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
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 NO.                                                  PAGE NO.
CHAPTER 3                                               CHAPTER 5
        OPERATING INSTRUCTION-KEYBOARD…………. 3-1                    MACHINE LANGUAGE PROGRAMMING…………. 5-1
3.1    KEYBOARD OPERATION…………………………………. 3-1             5.1   MONITOR SUBROUTINES………………………………… 5-1
3.2    SET , INR , DCR KEYS…………………………………….. 3-2               1.      MODIAD…………………………………………… 5-3
3.3    REG………………………………………………………….. 3-3                        2.      MODIDT…………………………………………… 5-4
3.4    GO / EXEC………………………………………………….. 3-6                     3.      RDKBD …………………………………………….. 5-4
                                                              4.      DELAY…………………………………………….. 5-4
3.5    STEP………………………………………………………… 3-7
                                                              5.      CLEAR ……………………………………………. 5-5
3.6    VI : VECTOR INTERRUPT………………………………..       3-10         6.      GTHEX……………………………………………….5-5
3.7    RES : RESET……………………………………………….            3-10         7.      OUTPUT…………………………………………….. 5-5
3.8    CODE……………………………………………………….                3-10   5.2   SERIAL ROUTINES…………………………………………..5-7
3.9    USER KEYS U1 , U2 , U3 , U4…………………………….   3-11         1.      CIN………………………………………………….. 5-8
3.10   SAVE………………………………………………………..               3-12         2.      COUT………………………………………………. 5-8
3.11   LOAD……………………………………………………….                3-12         3.      CROUT……………………………………………… 5-8
                                                              4.      NMOUT…………………………………………….. 5-8
CHAPTER 4                                                     5.      GETHX …………………………………………….. 5-8
         CODES………………………………………………….. 4-1                 5.3   PROGRAMMING EXAMPLES…………………………….. 5-9
4.1    CODE 00 : MOVE BLOCK…………………………………. 4-1                 EXAMPLE 1 : FAMILIARIZATION……………………….. 5-9
4.2    CODE 01 : FILL BLOCK…………………………………… 4-3                 EXAMPLE 2 : RDKBD……………………………………… 5-11
4.3    CODE 02 : INSERT BLOCK………………………………. 4-3                EXAMPLE 3 : MODIDT……………………………………... 5-12
                                                              EXAMPLE 4 : RDKBD + MODIDT………………………… 5-12
4.4    CODE 03 : DELETE BLOCK………………………………. 4-3
                                                              EXAMPLE 5 : HEX ADDITION…………………………….. 5-12
4.5    CODE 04 : SEARCH BLOCK……………………………… 4-5                 EXAMPLE 6 : 4 DIGIT HEX COUNTER…………………… 5-13
4.6    CODE 04 : HEX TO DECIMAL……………………………. 4-6               EXAMPLE 7 : 2 DIGIT DECIMAL COUNTER…………….. 5-14
4.7    CODE 06 : DECIMAL TO HEX……………………………. 4-7               EXAMPLE 8 : FLASHING DISPLAY………………………. 5-15
4.8    CODE 0E : COMPLEMENT BLOCK………………………. 4-7               EXAMPLE 9 : ROLLING DISPLAY………………………… 5-16
4.9    CODE OF : ROLLING DISPLAY…………………………… 4-8               TABLE 5.1 SCRATCH PAD LOCATION……………….. 5-2
                             ii                               TABLE 5.2 CHARACTER CODES………………………. 5-6
                                                                                     iii
PAGE NO.
CHAPTER 6                                                                                                  PAGE NO.
                                                              APPENDIX
        SERIAL I/O OPERATION                         6-1
                                                              A    CONNECTOR AND STRAPPING DETAILS            A-1
6.1   USE OF MONITOR                                 6-2           CONNECTOR J1 : DYNA BUS INTERFACE          A-1
6.2   COMMAND STRUCTURE                              6-2           CONNECTOR J2 : 8155 CONNECTOR              A-2
      6.2.1   D – DISPLAY MEMORY COMMAND             6-3           CONNECTOR J3 : 8255 CONNECTOR              A-3
      6.2.2   G – PROGRAM EXECUTE COMMAND            6-3           CONNECTOR J4 : 8279 CONNECTOR              A-4
      6.2.3   I – INSERT INSTRUCTIONS INTO RAM-1     6-3           CONNECTOR J5 : POWER SUPPLY CONNECTOR      A-4
      6.2.4   M – MOVE MEMORY COMMAND                6-4           CONNECTOR J6 : SERIAL CONNECTOR            A-4
      6.2.5   S – SUBSTITUTE MEMORY                  6-4           CONNECTOR J7 : 8253 CONNECTOR              A-4
      6.2.6   X – EXAMINE / MODIFY CPU               6-5           STRAPPING DETAILS                          A-5
              REGISTER COMMAND
6.3   PROGRAM DEBUGGING                              6-7      B    ADD-ON CARDS FOR MICROFRIEND               B-1
                                                                   DYNA-85 SYSTEM
6.4   ERROR CONDITIONS                               6-8
6.5   ADDRESS VALUE ERRORS                           6-8      C    CIRCUIT DIAGRAM                            C-1
6.6   COMMAND EXAMPLES                               6-9      D    MICROFRIEND DYNA-85 MONITOR LISTING        D-1
6.7   AUDIO CASSETTE INTERFACE                       6-9
      TABLE 6.1     BAUD RATE SELECTION              6-11     E    PROCEDURE FOR UPLOADING AND                E-1
                                                                   DOWNLOADING

CHAPTER 7

        FOR THE MICROFRIEND ILC USER                 7-1

                             iv

                                                                                        v
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
1-1

CHAPTER 1

CONFIGURATION OF MICROFRIEND DYNA-85

 1.1             SYSTEM OVERVIEW


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-2                                                                                                                                           1-3

        HEX KEYPAD / DISPLAY INTERFACE                                                                     a
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.                                 f                      b
                                                                                                          g
Simultanous Keyboard & Display operation.
Scanned Keyboard Model sensor Mode.
2 Key locked / N Key roll over.
Contact Debounce.                                                                             e                       c
16 Displays
Programmable scan timing.
                                                                                                          d
The hex keypad has the standard hexadecimal keys and many other
function and Code keys. 4 “User Definable” function keys are also          Writing a 1 in the desired bit lights that particular segment.
provided which can be defined by the user . All scan, return, shift and            PARALLEL I/O INTERFACE
control lines of 8279 are brought on to connected J4.                      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).
8279 DATA FORMAT :
                                                                                   SERIAL I/O AUDIO CASSETTE INTERFACE
The data format for the character being displayed by the 8279 is one bit   Serial I/O is available through RS232C compatible port. The SID & SOD
corresponding to each segment of the seven segment display plus one        lines are used under software control for serial operation . Baud rate is
bit for the decimal point. The display bits are store in the 8279 in the   adjustable.
form of one byte digit of the display from RAM location 0 to 5 .
                                                                           Onboard Audio Cassette I / F is provided with file management , for
The byte format is as follows :                                            storage and retrieval of data using a cassette recorder.

        A3      A2       A1       A0     B3       B2      B1      B0               TIMER
        c       d        b        a      e        g       f       dp       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.
1-4                                                                                                                                          1-5


         EXPANSION SLOT                                                    STEP :         Allows the user to execute the program on single step
All Address, Data, Control and Hardware Interrupt lines are brought on                    mode or break point mode.
to a 50 pin FRC connector for system interfacing and expansion. These      SAVE :         Used for saving the contents of memory onto an audio
lines are unbuffered so user has to take care while expanding their                       cassette.
system.                                                                    LOAD :         Used for loading the program from audio cassette back
1.1.2    SYSTEM COMMANDS OVERVIEW                                                         to the memory in RAM area.
The HEX KEYPAD mode supports the following commands :                      U1..U4 :       These keys are user definable functin keys. The function
                                                                                          of these keys can be defined by the user , by loading the
RESET :        Provides hardware reset . Display shows “FrlEND” on
                                                                                          appropriate memory locations with vectors pointing to
               pressing this key.
                                                                                          user subroutines.
VI :           Vector interrupt key.Activate RST 7.5 vectored interrupt.
                                                                           1.1.3 SYSTEM FIRMWARE OVERVIEW
SET :          Allows the user to examine & modify the contents of
               RAM and only examination of contents is possible in
               case of EPROM.
                                                                           The MICROFRIEND DYNA-85 has very powerful and user
                                                                           friendly FIRMWARE in the EPROM.
INR :          Increments memory address presently displayed un the
               address field of display.                                   Complete listing of the Monitor FIRMWARE is given at the end of
                                                                           User can borrow any subroutine from the listing for his own
DCR :          Decrements memory address presently displayed in the        program development.
               address field od display.                                   Various commands available through the keyboard and the coded
REG :          Allows the user to examine contents of CPU registers &      subroutines are accessible through the CODE key and is already been
               modify them if necessary.                                   listed in chapter.
GO :           Allows the user to load the program counter by the          A point worth mentioning here about the FIRMWARE is the options of
               desired memory address which is the starting address of     entry point to the Monitor.
               the program to be executed.
                                                                           There are two options available , one is the COLD START , other is
EXEC :         Used to start the execution of GO or CODE command.          WARM START . In COLD START entry the system is completely
CODE :         Used for selecting one of the coded subroutines in the      reinitialized and no user program status is saved from the previous
               monitor.                                                    program executed. This is equivalent to the hardware reset.
1-6                                                                                                                                     1-7


COLD START entry can be performed through software by using the         The areas of application on MICROFRIEND DYNA-85 are as follows :-
RST 0 instruction.
                                                                          1.     Analog to Digital Converter Interface.
In WARM START entry, the start of previously executed user program is
                                                                          2.     Digital to Analog Converter interface.
fully saved before entering the monitor. WARM START entry is possible
                                                                          3.     Interfacing Hexadecimal Keyboad.
through software by using th RST 1 instruction.
                                                                          4.     Simulation of an Elevator.
In both cases, the sign on display is ‘FrlEND’ as in case of hardware     5.     Temparature Controller Interface.
reset through RESET Key.                                                  6.     Stepper motor Controller.
CODE COMMANDS :                                                           7.     Traffic Light Control System.
                                                                          8.     DC Motor Controller.
CODE    00      :       Move a block of memory.
                                                                          9.     Thumbwheel Interface.
CODE    01      :       Fill a block with a data byte.
CODE    02      :       Insert a byte in a block.                         And many more experiment and application can be thought and
CODE    03      :       Delete a byte from a block.                       successfully developed on MICROFRIEND DYNA-85 system.
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.
2-1

CHAPTER 2

SYSTEM MEMORY & INPUT / OUTPUT
MAPPING

 2.1             MEMORY 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
                                 USER
                                  RAM
                                IC 6116
              C000
              BFFF
                            EXPANSION
                            EPROM/RAM

              4000

              3FFF
                              MONITOR
              0000             EPROM
2-2                                                                                                                                2-3


0000H TO 3FFFH :
                                                                     IC       ADDRESS          MODE             I/O FUNCTION
Monitor EPROM socket.Monitor 2732 is located at 000H to 0FFFH and
is mapped at 1000H-1FFFH,2000H-2FFFH and 3000-3FFFh also.            8255     10               R/W              PORT A
                                                                              11               R/W              PORT B
It 2764 / 27128 are used , 1000H - 3FFFH can be used for further              12               R/W              PORT C
expansion.                                                                    13               WRITE            CONTROL REGISTER

4000H to BFFFH :                                                     8253     18               R/W              COUNTER 0
                                                                              19               R/W              COUNTER 1
This Socket is used for user expansion of EPROM and RAM.                      1A               R/W              COUNTER 2
EPROMs like 2716 / 2732 / 2732 / 2764 / 27128 / 27256 or RAMs                 1B               WRITE            CNTROL REGISTER
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-        2.3              POWER SUPPLY
FFFFH.This 2K memory is folded after every 2K bytes from C000H to
FFFFH.In this socket 6264 can also be used.


2.2            INPUT/ OUTPUT MAPPING
                                                                      Recommanded Power Supply for DYNA-85 kit

                                                                                   DMS SMPS – 01
IC     ADDRESS         MODE           I/O FUNCTION
                                                                      Having following specification :
8279    04             READ           READ KEYBOARD FIFO
                       WRITE          WRITE DATA TO DISPLAY
        05             READ           READ STATUS WORD                             Voltage               Current Rating
                       WRITE          WRITE COMMAND WORD
                                                                                   +5V                   1A
8155    08             WRITE          COMMAND/STATUS                               + 12 V                500 mA
                                      REGISTER
        09             R/W            PORT A
                                                                                   - 12 V                250 mA
        0A             R/W            PORT B                                       + 30 V                100 mA
        0B             R/W            PORT C
        0C             R/W            TIMER LOW BYTE
        0D             R/W            TIMER HIGH BYTE
2-4                                                                      3-1

                                                CHAPTER 3

                                                OPERATING INSTRUCTION- KEYBOARD
KEYPAD LAYOUT :
                                                 3.1             KEYBOARD OPERATION


RESET        VI   C       D      E      F       MICROFRIEND DYNA-85 has a built in keyboard ( KEYPAD).The layout
                  U1      U2     U3     U4      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
            DCR    8      9       A      B      number system . There are 16 keys for entering Hex numbers from 0
                  GO/H          LOAD   SAVE     to F. These are all dual meaning keys and the key designated depends
                          L
                                                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
           EXEC    4      5      6      7       ’F r l E n d’. This indicates that the system is reset and the monitor
                  SPH    SPL    PCH    PCL      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
            INR    0       1      2      3      and then press a valid command key.
                  SET    CODE   STEP   REG/I
                                                The various command and function keys are explained below :
3-2                                                                                                                                                3-3


 3.2               SET,INR,DCR KEYS                                             EXAMPLE 1 :

                                                                                    Key Pressed          Address Field           Data Field
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                RES                  F r I E                 n d
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        SET
data field .The dot in the address field indicates that your next key will be       F                    0   0   0   F
treated as an address entry (entry is from Right to Left and last 4 entries         0                    0   0   F   0
are retained).                                                                      0                    0   F   0   0
                                                                                    0                    F   0   0   0
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             INR                  F   0   0   0           X X
that memory location as the two digits in the data field.                           3                    F   0   0   0           0 3
                                                                                    E                    F   0   0   0           3 E
Now you can modify or retain the contents of the location.                          INR                  F   0   0   1           X X
                                                                                    DCR                  F   0   0   0           3 E
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            EXEC                 F
address by 1 location and dispalys the contents of that new locaton with
required data.
                                                                                Pressing EXEC key terminate the loading of memory and the monitor
DCR key also works in a similar way but it decrements the address by 1
                                                                                waits for next command.
and points to the previous location.

Trying to load data into a Monitor EPROM location using SET key                     3.3           REG
results in ‘FErr’(error).
                                                                                This key allows you to examine and optionally modify the contents of
SET, INR, DCR, keys can also be used to verify the data loaded in RAM
                                                                                all 8085 internal registers.
by displaying one location after another.
                                                                                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-4                                                                                                                                              3-5

6         :        PCH ( Program Counter High                                Format of the F register ( Flag Register ) is as follows :
7         :        PCL ( Program Counter Low )
8         :        H ( H Register )
9         :        L ( L Register )
                                                                                   S       Z    X     AC    X      P      X     C
A         :        A ( A Register )
B         :        B ( B Register )                                          X         :       Don’t care.
C         :        C ( C Register )                                          C         :       Carry
D         :        D ( D Register )                                          P         :       Parity
E         :        E ( E Register )                                          X         :       Don’t Care
F         :        F ( Flag register )                                       AC        :       Auxillary Carry
                                                                             Z         :       Zero
Pressing any one of these keys after pressing REG key will display the       S         :       Sign
particular register name in the address field and the contents of that
register will be displayed in the data field.                                EXAMPLE 2 :
Pressing INR key after this , will point to the next register and DCR will
point to the previous register.                                                   Key Pressed              Address Field            Data Field
Contents of the register can be modified at this point similar to loading
any other memory location.
                                                                                  REG                      .
Pressing INR and DCR keys after modifying the contents of that register
                                                                                  A                        A                        X X
and ENTER terminates the command. Address field shows F in the left
                                                                                  0                        A                        0 0
most digit , the monitor indicates as usual that the it is waiting for the
                                                                                  5                        A                        0 5
next command.
                                                                                  0                        0                        5 0
Format for the I register (Interrupt mask) is as follows :                        INR                      B                        X X
                                         I        M       M     M                 DCR                      A                        5 0
                                                                                  EXEC                     F
     0        0        0       A        E       7.5      6.5   5.5

    I Interrupt enable Flag [ 1 is enabled, 0 is disabled ]
    M Interrupt Mask [1 is masked , 0 is unmasked ]                          NOTE : ONLY LAST TWO ENTRIES ARE RETAINED.
3-6                                                                                                                                             3-7



   3.4              GO/EXEC                                                    3.5              STEP

This pairs of keys is used to execute a program from a desired location       We have seen how a program can be executed by using GO and
onwards. If the GO key is pressed, It displays the present address in the     EXEC pair of keys.This method is useful only when the program is
program counter and the contents of the memory location at address. A         finalized, or when we have a ready program.
dot appears in the address field indicating that you can enter a new          In case a program is being developed , it is essential that we have
address in the address field. You can now modify the contents of the          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.
program counter . After loading the desired starting address in the
address field , press EXEC key to execute the program starting at the         This can be achieved in two ways . One way is to insert the RST 1
address .During execution of the program , the address field shows ‘E’        instruction ( CFH ) at every point where a break is desired to check
indicating that the user program or subroutine is being executed.             status or result , which is possible only in case of short programs being
                                                                              run from the RAM.
The Monitor Regains control either after pressing the RESET key
                                                                              Another way is to use the STEP key and step through the program.
( Hardware Reset ) or after executing RST 0, RST 1, JMP 0000H or JMP
                                                                              Pressing the STEP key displays the contents of the program
0008H instruction (Software Reset).
                                                                              counter , Which can be modified to set the starting address of the
EXAMPLE 3 :                                                                   program.
                                                                              Now press INR and the monitor will prompt for other parameters :
     Key Pressed              Address Field           Data Field
                                                                             br      :      Break Address
     GO                       P   P   P   P                   X X            Cn      :      N +1 , where N is the number of times the break should
     F                        0   0   0   F                                                 occur.
     0                        0   0   F   0
     0                        0   F   0   0                                 In case ‘br’ and ‘Cn’ both are given a value of zero,the system goes into
     0                        F   0   0   0                                 single stepping mode. In single stepping mode, the program os executed
     EXEC                     F                                             single instruction at a time . Execution stops after every instruction and a
                                                                            status check is possible.
                                                                            EXAMPLE 4 :
    NOTE : P P P P IS THE PRESENT CONTENTS OF PROGRAM                       Let us take a simple program to see how the STEP command
    COUNTER WHEN GO KEY WAS PRESSED. XX IS THE DATA IN                      works.Load
    MEMORY LOCATION P P P P.
                                                                            the following program starting at location F000H.
3-8                                                                                                                                           3-9

                Address                 Data            Mnemonic
                                                                             Key              Address         Data            Comments
                F000                    3E 05           MVI A, 05h           Pressed          Field           Field
                F002                    3D              DCR A
                F003                    C202F0          JNZ F002h            STEP             PPPP            XX              PRESENT PC
                F006                    76              HALT                                                                  CONTENTS
This program first loads register A ( Accumulator ) with 05 , then           F000             F000                            STARTING ADDRESS
decrements the accumulator contents by 1 till the contents become zero       INR                 .            br              BREAK POINT ?
                                                                             0                0000            br              IGNORE br.
and halts at that point.
                                                                             INR                Cn            .               Cn ?
The JNZ loop will make use of ‘br’ and ‘Cn’. First let us execute the        0                0000            00              IGNORE Cn.
program with STEP key and using ‘br’ and ‘Cn’ parameters.                    INR              F002            3D              FIRST INSTRUCTION
                                                                                                                              EXECUTED PC POINTS
Key            Address          Data            Comments                                                                      TO NEXT INSTR .
Pressed        Field            Field                                        EXEC                     F                       PROGRAM STOPS FOR
                                                                             REG                      .                       STATUS CHECK .
STEP           PPPP             XX              PRESENT PC CONTENTS          A                        A       05              REG . A (Acc)
F000           F000                             STARTING ADDRESS                                                              CONTENS 05
INR                     .       br              BREAK ADDRESS ?              EXEC                F                            NEXT COMMAND ?
F002           F002             br              BREAK AT F002                STEP             F002            3D              STEP
INR            Cn               .               Cn ?                         INR              F003            C2              SECOND INSTR.
04             Cn               04              Cn 4 N + 1                                                                    EXECUTED
INR            F002             3D              PROGRAM STOPS AFTER          EXEC                 F                           PROGRAM STOP FOR
                                                BREAKPOINT OCCURRED 3                                                         STATUS CHECK
EXEC                F                           TIMES                        REG                  .                           REGISTER A (Acc)
REG                 .                           EXAMINE REG.A                                                                 CONTENTS 04
A                   A           02                                           A                    A           04              AFTER
                                                                                                                              DECREMENTING
As the program stopped after the breakpoint occurs 3 times, the original                                                      ONCE
contents of register A which were 05 have been decremented three
times. The register A should now contain 02, which is displayed in the     After counting this sequence till the contents of A become 00, the
data field.                                                                program comes out from the JNZ loop and the address field shows the
The same program can be executed in a single stepping mode.                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.
3-10                                                                                                                                          3-11


 3.6              VI : VECTOR INTERRUPT                                     3.9              USER KEYS U1,U2,U3,U4


This key is used to interrupt the program execution and transfe r the     There are 4 user definable keys on the MICROFRIEND DYNA-85. Each
control to location 003CH in the monitor.This location has a jump to      of these keys has a vector in the scratchpad RAM area . By loading
location FFCEH in the user RAM.By inserting another jump instruction at   an appropriate jump instruction at these location, you can define the
                                                                          functon of keys U1, U2, U3, U4.
FFCEH , we can transfer the control to an interrupt service routine
located to another area in the memory.                                    The vector location are as follows :
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
                                                                              Key              Memory Location
using the SIM instruction.
The exmple of a decimal counter included in the chapter on                    U1               FF9CH, FF9DH, FF9EH
programming, will make the application of key will make it more clear.        U2               FF9FH, FFA0H, FFA1H
                                                                              U3               FFA2H, FFA3H, FFA4H
 3.7              RES : RESET                                                 U4               FFA5H, FFA6H, FFA7H

Pressing RES key causes a hardware RESET operation.The control is         An example will illustrate how these keys can be used . There is a
transferred to location 0000H in the monitor. The monitor program is      subroutine in the monitor for a “ROLLING DISPLAY” at location 0E5BH.
executed from 0000H onwards without saving the status resulting from      Using the SET key load a jump instruction C3 5B 0E at location FF9CH,
any user program executed before the ‘RESET’. The display shows           FF9DH and FF9EH which are the U1 key vector location.Mow reset the
‘F r l E N D’ as the sign-on message and the monitor waits for a valid    system and then press U1 key, the display immediately blanks for a
command.                                                                  moment and then a rolling message appears

 3.8              CODE
                                                                          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

The code key allows you to access one of the coded subroutines in the     By using the U1 key vector, ypu have efficiently transferred the control to
monitor firmware. All the user accessible coded subroutines are           the rolling display subroutine.
explained in Chapter 4.
3-12                                                                                                                                          3-13


  3.10            SAVE                                                        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.
This command is used for saving your program on an audio cassette.
The procedure for saving is as follows :                                      4. Immediately press EXED Key. L appears in the data field, indicating
                                                                                 that the CPU is searching for the file with file number Fn.
1.     Command the MIC socket (on the top) of the MICROFRIEND
       DYNA – 85 to the MIC socket of the CTR.                                5. Whenever the CPU comes across any File Number , it is displayed
                                                                                 in the data field. Loading starts only when the specified File
2.     Press SAVE key, enter the following parameters                            number is found and displayed.

       SS :    Source Start                                                   6. The SS parameter of your program is already saved on the cassette
       SE :    Source End                                                        tape, and when the program is being loaded back into RAM , it
       Fn :    File Number – any hex number from 00 to FF.                       automatically gets loaded at the same address.

3.     Turn CTR ON and keep it in RECORD mode.                                7. On completion of loading the program with File number Fn , SS
                                                                                 parameter is displayed in the address field.
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     NOTE : There shouldn’t be a gap of more than 10 sec. Between
       display.                                                                    turning CTR ON and pressing EXEC key.

6.     Turn CTR OFF.

  3.11            LOAD

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)
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.


 4.1              CODE 00

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-2                                                                                                                                         4-3


Example : 1
                                                                   4.2              CODE 01
 Key Pressed             Address Field            Data Field
                                                                   Fill Block with a Data Byte
 CODE
                                                                   This code requires the following parameters :
 0                                                0 0.
 INR                           .                  SS               SS    :       Starting address of the block.
 0                       0 0 0 0.                 SS               SE    :       End address of the block.
 INR                           .                  SE               Sr.   :       Data byte to be filled in all the location from SS to SE
 5                       0 0 0 5.                 SE               Sr. can be any hex number from 00 to FF must be within the RAM area.
 INR                           .                  dS
 F000                    F 0 0 0.                 dS               4.3              CODE 02
 EXEC                    FrIE                     nd
                                                                 Insert Byte in a Block ( SE, Sr,IA )
This example program moves a block of memory between 0000H and   In a given block of RAM it is sometimes necessary to insert a byte of data
0005H to the RAM address F000H.                                  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
This can be verified by using the SET key as follows :           SE.
                                                                 No address relocation for jumps are done.
      Key Pressed          Address Field            Data Field
                                                                   4.4              CODE 03
      SET                  F 0 0 0.
      INR                  F000                     3E           Delete a Byte at a Given Address ( SE,DA )
      INR                  F001                     0 0.         In a given block at a given address DA, a byte is deleted. The remaining
      INR                  F002                     d 3.         block till SE shifts up by one position. The above two INSERT and
      INR                  F003                     0 5.         DELETE commands are very useful in inserting or deleting a display
      INR                  F004                     00           character in the VIDEO RAM at the given cursor position.
      INR                  F005                     C3
4-4                                                                                                                                             4-5

      Ex : INSERT BYTE                                                          You can insert anything else.
                                                                                With the SET command verify that 3E,00,D3,05,32,FF,20,19,76 is
      Load the RAM location 1000H-1007H with the help of SET command.           the data from location 1000H-1008H. The block has shifted down by 1
                                                                                byte.
      1000        3E      After loading we notice that the instruction to
         1        00      store accumulator STA 200FFH is incorrect.The
                                                                                The opposite of INSERT is DELETE and it works as follows :
         2        D3      ‘OPCODE’ 32 is missing. It has to be inserted
         3        05      before FF , 20                                          Key Pressed             Address Field           Data Field
         4        FF
         5        20                                                              CODE
         6        19                                                              03                                              0 3.
         7        76                                                              EXEC                    .                       SE
         8        XX                                                              1008                    1 0 0 8.                SE
      If the block is small you an manually make 1004 as 32 and reload            INR                     .                       DA
      theremaining by shifting one down. But if the block is very tedious. To     1004                    1 0 0 4.                DA
      Do this use INSERT byte command.IA (Insert Address ) is 1004. SE            EXEC                    FriE                    N D.
      ( Block End ) is 1007 and Sr ( Insert byte ) is 32.

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

       CODE                                                                     4.5             CODE 04
       02                                                02
       EXEC                                              SE
       1007                     1 0 0 7.                 SE                     Search a Given Block for Given Pattern ( SS,SE,Sr )
       INR                                               IA
                                                                                The given block of memory (RAM or ROM ) between SS and SE is
       1004                     1 0 0 4.                 IA
                                                                                searched for a pattern o f byte given in Sr. Whenever the first match
       INR                      Sr
                                                                                is found, the address and bytes are displayed. Remaining mismatches
       32                       Sr                       32
                                                                                can be scanned with INR.
       EXEC                     FriE                     N D.
                                                                                LOAD the data in Ex.4.3 from 1000H.
4-6                                                                                                                                             4-7



 Ex : BLOCK SEARCH                                                         4.7              CODE : 06

      Key Pressed          Address Field           Data Field              Decimal to Hex Conversion

                                                                           This code is useful for converting any Decimal number from 0000 to
      CODE
                                                                           9999 into a Hex number equivalent.
      04                                           0 4.
      EXEC                 .                       SS                      The parameter to be entered is dE, which is the decimal number we
      1000                 1 0 0 0.                SS                      desire to convert into Hex format.
      INR                                          SE
                                                                           Pressing EXEC after entering the decimal number displays the Hex
      1008                 1 0 0 8.                SE
                                                                           equivalent. An important precaution to be taken is that , when you are
      INR                  Sr                      .
                                                                           entering the decimal number to be converted to Hex, do not press any
      19                   Sr                      1 9.
                                                                           keys from A to F. There is no provision for detecting this error and the
      EXEC                 1006                    19
                                                                           results of converting that number are unpredictable.
      INR                  FriE                    nd
                                                                           CODE 05 and CODE 06 are very useful in address conversions,relative
                                                                           jumps and total space calculations.

 4.6                CODE : 05                                              4.8              CODE : 0E

Hex to Decimal Conversion                                                  Complement a block of memory
                                                                           This code complements all the data contained within a memory block :
CODE 05 is a utility code for converting any Hex number from 0000 to       The required parameters are :
FFFF into a Decimal number.
                                                                           SS    :       Starting address of the block.
The parameter to be entered is prompted in the data field as HE, and the   SE    :       End address of the block.
Hex number to be converted can now the directly entered in the Address
field. Pressing EXEC displays the Decimal equivalent of the Hex number     On executing this code, all the ‘0’ are replaced by ‘1’ by ‘0’ within the
entered.                                                                   specified block of memory.

                                                                           SS and SE must be in RAM area.
4-8                                                                                                                                                  5-1

                                                                                 CHAPTER 5
 4.9               CODE : 0F
                                                                                 MACHINE LANGUAGE PROGRAMMING
Rolling Display
                                                                                  5.1              MONITOR SUBROUTINES
This is not a utility code but it is a demonstration code to illustration code
illustrate the powerof the display control.
                                                                                 This section will cover the applications from the software point of view of
                                                                                 MICROFRIEND DYNA - 85 . You are advised to get familiar with the
On executing 0F, the display starts rolling the message :
                                                                                 assembly language of INTEL 8085 Microprocessor.You should get familiar
  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.                           with the various mnemonics and their power.

CODES REFERANCE CHART                                                            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
 Code              Function                  Parameters                          LIFO ( Last In First Out ) type for storage during subroutine calls.

                                                                                 User is advised to initialize the Stack Pointer with his stack area.The
 00                Block Move                SS,SE,dS
                                                                                 suggested stack pointer location is FEFFH. Location beyond this should
 01                Fill Block                SS,SE,Sr
                                                                                 not be utilized by the user as the monitor uses this area as the scratch-pad
 02                Insert Byte               SE,IA,Sr
                                                                                 RAM.
 03                Delete Byte               SE,dA
 04                Block Search              SS,SE,Sr
                                                                                 You may borrow several monitor routines to simplify your task of
 05                Hex to Dec                HE
                                                                                 programming and to minimize RAM used. From the Firmware listing
 06                Dec to Hex                dE
                                                                                 provided, take care of noting the parameters required by these routines,
 0E                Complement Block          SS,SE
                                                                                 as some of the routines destroy the contents of the Registers.
 0F                Rolling Display
                                                                                 Also go through the manuals for the detailed operation of 8155, 8255 and
SS        :        Statrting Address                                             8279 supporting chips.
SE        :        End Address
dS        :        Destination                                                   The following is a list of scratch-pad RAM allocation to the Monitor
IA        :        Insert Address                                                program.
DA        :        Delete Address
Sr        :        Data Byte
5-2                                                                                                                                5-3

                  TABLE 5.1

 Location (Hex)      Used for                                   Location (Hex)                    Used for

 FF9 A, B            HALF BIT                                   FFED                              Flags
 FF9 C, D, E         U1 Key Jump                                FFEE                              A Register
 FF9 F, 0, 1         U2 Key Jump                                FFEF                              L Register
 FFA2, 3, 4          U3 Key Jump                                FFF0                              H Register
 FFA5, 6, 7          U4 Key Jump                                FFF1                              Interrupt Mask
 FFA8                P DATA                                     FFF2                              Prog. Cntr – Low Byte
 FFAA, B             Unused                                     FFF3                              Prog. Cntr – Hi Byte
 FFAC,               CnSave                                     FFF4                              Stack Ptr – Low Byte
 FFAD, E             BrSave                                     FFF5                              Stack Ptr – Hi Byte
 FFA, F, 0           DESAVE                                     FFF6                              Current Address
 FB1                 CARRYLOC                                   FFF8                              Current Data
 FFB2, 3             HESAVE                                     FFF9-FFFC                         Output buffer & Temp Loc
 FFB4, 5             DASAVE                                     FFFD                              Register Pointer
 FBB6, 7             IA SAVE                                    FFFE                              Input Buffer
 FFBB, C             SE SAVE                                    FFFF                              8155 command/status Register Image
 FFB9, A             DS SAVE
 FFBD, E             SS SAVE
 FFBF                COPY TEST                                Important subroutines which can be borrowed from the Monitor
 FFC0, 1             BIT TIME                                 FIRMWARE are listed below.These subroutines can be called in your
 FFB8                SR SAVE                                  own programs by using the CALL Instruction and specifying the
 FFC2                User may place a JMP instr. to a RST 5   starting address of that particular subroutine.The starting addreses of
                     routine in locs FFFC2H-FFFC4H
                                                              all these subroutines are given in brackets along with their names.
 FFC5                JMP to RST 6 routine
 FFC8                JMP to RST 6.5 routine                       1. Modiad (0362) – Modify address field of display
                     (Hardwored user interrupt)
 FFCB                JMP to RST 7 routine                         Inputs
 FFCE                JMP to ‘VECT INTR’Key routine
 FFDI-FFE8           Monitor Stack                                B   :       Dot Flag-
                     (temporary storage Used by Monitor                       1 Put dot at right edge of the field.
 FFE9                E Register                                               0 No dot.
 FFEA                D Register
 FFEB                C Register                                   HL :        The character to be displayed.
5-4                                                                                                                                                        5-5



The contents of HL Register pair are displayed in the address field.The                5. CLEAR (01D7)
contents of all the CPU registers are affected
                                                                                       Inputs       :        B : Dot falg –
        2. MODIDT ( 036E )                                                                                   1 – Dot in address field
                                                                                                             0 – No Dot
        Inputs    B        :        Dot Flag-
                  1        :        Put Dot at the right edge of the field         This routines sends blank characters to both the address field and data
                  0        :        No dot                                         field of the display. If the dot flag is set then a Dot appears at the right edge
The contents of the A register are displayed in hex notation in the data field     of the address field.
of display the contents of all the CPU registers and flags are affected.
                                                                                       6. GTHEX (022B) – Get Hex Digits
        3. RDKBD (02E7)
                                                                                       Inputs       :        B : Display Flag –
        Input      :       Nothing                                                                           0 – Use address field of display.
                                                                                                             1 – Use data field of display.
        Output     :       A : character read from the keyboard                        Outputs      :        A : Last character read from keyboard.
                                                                                                             DE : Hex Digits from keyboard last four entered.
        Destroys   :       A, H, L, F/E’s.                                             Carry        :        Set : At least one hex digit read, else it is reset.
                                                                                                             Destroys contents of all registers.
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.                     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
For the RDKBD routine to work correctly, the user must unmask RST 5.5            keys, the received hex digits are invalid.
hardware interrupt using the SIM instuction in Version 1.
                                                                                       7. OUTPUT (02B7)
        4. DELAY (05F1)                                                                Inputs  :      A : Display Flag –
                                                                                                      0 – To use address field
This routine takes the 16 bit contents of register pair and counts down                               1 – Use data field
to zero.Then returns to the calling program. The A,D & E register and flags
are affected.
5-6                                                                                                                                                  5-7

                  B : Dot Flag –
                                                                                       Character                       Hex Code
                  1 - Dot at right edge
                  0 - No dot                                                              H                            10
                                                                                          L                            11
                  HL : Address of characters to be output.
                                                                                          P                            12
Destroys all                                                                              I                            13
                                                                                          r                            14
Outputs two characters to data field or four to address field. The address of             Blank                        15
the characters is received as an argument. The routines MODIDT and                        n                            16
MODIAD are useful whenever the user wants to display hexadecimal                          U                            17
information like messages. The userhas to use the output routine with the                 h                            18
following code assigned to the characters to be displayed. The display                    G                            19
technique on 7 segment LED is already explained.                                          J                            1A
                                                                                          y                            1B
                         TABLE 5.2                                                        O                            1C

      Character                      Hex Code
                                                                                 5.2               SERIAL ROUTINES
         0                                00
         1                                01
                                                                                The following are the routines you can borrow from the serial Monitor.
         2                                02
                                                                                Whenever the user straps the SID to TTY ( 20 mA loop ) or CRT
         3                                03
                                                                                (RS232C) the serial routine is invoked. The serial routine is AUTOBAUD
         4                                04                                    type i.e. on power up or RESET, the contents for HALFBIT and BITTIME
         5                                05                                    are undefined. After sending ASCII space character (20H) from a serial
         6                                06                                    device, and baud rate is calculated . A BRID routine and a sign on
         7                                07                                    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
         8                                08
                                                                                COUT routines for any other purpose of block transfer on serial link from
         9                                09                                    one system to another etc. Please refer to the chapter on serial I/O
         A                                0A                                    operation for details, before using any of the following routines which can
         b                                0B                                    be obtained from the serial monitor.
         C                                0C
         d                                0D
         E                                0E
         F                                0F
5-8                                                                                                                                             5-9

  1.CIN (07FD) – Console Input                                                 The following are the program examples . The user should load and
                                                                               execute these program to get familiar with the keyboard of
This routine returns a character in ASCII code received from the serial        MICROFRIEND DYNA-85.
devices,to the A register. Condition flags are affected.
                                                                                 5.3               PROGRAMMING EXAMPLES
 2.COUT (07FA) – Console Output
                                                                               Example 1 : Familiarizaton
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.          Let us start with a simple program to understnd exactly what happens
                                                                               inside a microprocessor when a program is run.
 3.CROUT (05EB) – Carriage Return Line Feed
                                                                               First, load the following program using ‘SET’ and ‘INR’ keys.
CROUT send CR and LF characters to console, A, B, C and F are destroyed.

                                                                               Address       Data            Mnemonic                 Comments
 4.NMOUT (06C6) – Hex Number printing

NMOUT converts the 8 bit unsigned integer in A register to 2 ASCII             F000          31 FF FE        LXI SP           Define Stack Pointer
characters representing 2 hex digits and prints the two digits on console.     F003          00              NOP
Contents of A,B, and C, F are destroyed.                                       F004          00              NOP
                                                                               F005          00              NOP
 5.GETHX (0626)                                                                F006          00              NOP
                                                                               F007          00              NOP
Outputs           :        BC : 16 Bit Integer                                 F008          00              NOP
                           D : Character which terminated the integer.         F009          CD 6E 03        CALL             Display contents of A into
Carry             :        1 – First character is not delimiter                                                               Data Field
                           0 – If first character is delimiter.                F00C          76              HALT             Stop Executing
Destroys :                 A, B, C, D, E & F.
                                                                               Now to understand exactly how the program works, let us take three
GETHX accepts a string of hex digits from the input stream and returns a       simple instructions.
value, a 10 bit binary integer, taking only last four digits entered.
                                                                                       MVI A, D8
                                                                                       MVI B, D8
                                                                                       ADD B
                                                                                       RST 1
5-10                                                                                                                                               5-11

The RST 1 instruction will be used so that the register status is saved and           Execute the program at F000H and examine registers A & B, this
we can examine registers after executing the programs , using the ‘REG’               time the contents of register A are not 23 as before, but it is 34.
key.                                                                                  This is the result of instruction

a.      Execute the program that has been entered at location F000H by                ADD B, 80
        using the ‘GO’ and ‘EXEC’ keys .‘E’ will appear in the address field          Which contents of B are added to A, A become 34 (23+11).
        showing that the program is being executed. Press ‘RES’ to reset
                                                                                  e. Now remove the CF from location F008 and replace it by 00 (NOP)
        and ‘FrlEnd’ will appear.
                                                                                     again. Execute the program at F000H and observe the difference.
b.      Modify the initial contents of location , as follows :                        This time the data field shows 34.Instruction CALL MODIDT has
                F003     3E                                                           displayed the contents of register A in the data field.Execution of
                F004     23                                                           program now select different sets of instruction and study the effect
                F005     CF                                                           of executing those instruction in the similar manner.

        Execute the program at F000H and examine the register A and B.                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
        Contents of A should be 23, because the instruction MVI A , 23                the ‘STEP’ key which is already explained.
        (3E 23 ) will load register A with 23.
                                                                               Example 2 : RDKBD
c.      Modify the locations again as follows :
                                                                               The following program illustrate the utility of the subroutine RDKBD.
                F005     06                                                    Execute the following program and then examine register A . Register A
                F006     11                                                    will contain the value of the key you has pressed.
                F007     CF
                                                                               Address        Data             Mnemonic                 Comments
        Execute the program at F000H and examine the registers A and B.        F000           32 FF FE         LXI SP, FEFF        Define Stack Pointer
                                                                               F003           00               NOP
        Register A contain 23, and Register B will contain 11, because the     F004           00               NOP
        instruction MVI B, 11 (06 11) has now loaded the register B with       F005           00               NOP
        11.
                                                                               F006           CD E7 02         CALL RDKBD        Read Keyboard value
d.      Modify the location again as follows :                                                                                   Into A.
                F007 80                                                        F009           CF               RST 1             Save registers & return
                F008 CF                                                                                                          to monitor
5-12                                                                                                                                           5-13

                                                                               Address         Data            Mnemonics               Comments
Example 3 : MODIDT
                                                                               F000            31 FFFE         LXI SP,FEFF        Define stack pointer
This examples loads register A with a value and displays that value in the
                                                                               F003            00              NOP
data field of the display.
                                                                               F004            00              NOP
Address           Data            Mnemonic                 Comments            F005            00              NOP
                                                                               F006            CD E702         CALL RDKBD       Read Keyboard into A
F000              31 FF FE        LXI SP, FEFF             Define stack        F009            47              MOV B, A         Transfer A to B
                                                           Pointer             F00A            CD E702         CALL RDKBD       Read next key
F003              3E 96           MVI A, 96                Load A with         F00D            80              ADD B            Add B to A
                                                           Value 96            F00E            CD 6E03         CALL MODIDT      Display result in data
F005              CD 6E 03        CALL MODIDT              Display contents                                                     field
F008              76              HLT                      of A in the data    F001            C3 06F0         JMP F006         Wait for Next cycle
                                                           field
                                                                               Addition Suggestions :
Example 4 : RDKBD + MODIDT                                                     1.     Modify this program using the DAA instruction to perform decimal
This example combines previous two programs and the Data field of display             addition.
the value of the key pressed.                                                  2.     Write a program for 2 digit decimal addition using DAA and RLC
                                                                                      instructions.
Address           Data            Mnemonics                Comments
                                                                               Example 6 : 4 DIGIT HEX COUNTER
F000              31 FFFE         LXI, SP FEFF             Define stack
                                                           pointer             This example program displays a 4 digit Hex count in the address field of
F003              00              NOP                      Unmak interrupt     the display, from 000 to FFFF and again resets to 0000 before continuing
F004              00              NOP                                          further count. The HL register pair is used for counting and the MODIDT
F005              00              NOP                                          subroutine is used to obtain the display.
F006              CD E702         CALL RKBD                Read keyboard
                                                           Into A              Address         Data            Mnemonic                Comments
F009              CD 6E03         CALL MODIDT              Display A into
                                                           data field          F000            31 FFFE         LXI SP,FEFF         Define stack pointer
F00C              C3 06F0         JMP F006                 Wait for next key   F003            21 0000         LXI H, PUSH H       Save HL on stack
                                                                               F007            CD 6203         CALL MODIAD         Display count in
Example 5 : HEX ADDITION                                                                                                           address field
This program combines the RDKBD and MODIDT subroutines with the ADD            F00A            11 0040         LXI D 4000          Set Delay
B instruction.The RDLBD subroutine reads two successive key entries and        F00D            CD F105         CALL DELAY          Wait out Delay
adds them together in register A. The MODIDT subroutines then displays         F010            EI              POP H               Restore HL
the result of this addition in the data field of the display.                  F011            23              INX H               Increment count
                                                                               F012            C3 06F0         JMP F006            Continue in loop
5-14                                                                                                                                           5-15

Example 7 : 2 DIGIT DECIMAL COUNTER                                           This program executedas GO F000 EXEC, and it can be stopped by
This program displays s decimal counter in the data field of display. The     pressing the VI key.
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       The count can be restarted by pressing any key other than Reset key.
program is being executed.
Address         Data            Mnemonics               Comments              1. Change the speed of counter by modifying the contents of location
                                                                                 F011H which decides the delay.
F000            31 FFFE         LXI SP,FEFF        Define stack Pointer       2. Use the CPI instruction to compare the count with 60, & a conditional
F003            3E IB           MVI A, IB          Load A with 1B                jump JNZ, converts this program to count only upto 59.Use the XRA
F005            30              SIM                Set interrupt mask            instruction to reset the accumulator to 00 after counting upto 59.
F006            FB              EI                 Enable Interrupt
F007            06 00           MVI B, 00          Clear B                       Now set the delay in such a way that count advances by 1 per
F009            78              MOV A, B           Load A from B                 second . This program coverts your MICROFRIEND DYNA – 85 into
F00A            27              DAA               Decimal adjust A               digital stop watch.
F00B            47              MOV B, A          Load B from A               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
F00C            C5              PUSH B            Save B on stack                either have a 12 hour or 24 hour clock.
F00D            CD 6E03         CALL MODIDT       Display count
F010            16 18           MVI D, 18         Set Delay
                                                                              Example 8 : FLASHING DISPLAY ‘LErn’
F012            CD F105         CALL DELAY        Wait out delay
F015            C1              POP B             Restore count               This program flashes the message ‘Lern’ in the address field of the
F016            04              INR B             Increment count             dispay.
F017            C3 09F0         JMP F009          Continue
F020            3E 1F           MVI A, 1F         Load A with 1 F             Adderss       Data            Mnemonic        Comments
F022            30              SIM               Set interrupt mask
F023            CD E702         CALL RDKBD         Wait for a key to be       F000          11                              L
                                                  Pressed                     F001          0E                              E
F026            3E 1B           MVI A, 1B         Load a with 1B              F002          14                              r
F028            30              SIM               Set interrupt mask          F003          16                              n
F029            FB              EI                Enable Interrupt            F004          15                              blank
F02A            C9              RET               Return                      F005          15                              blank
FFCE            C3 20F0         JMP F020          Jump to interrupt routine   F006          15                              blank
5-16                                                                                                                                           5-17

Address         Data             Mnemonics                Comments            Example 9 : ROLLING DISPLAY

F010            31 FFFE          LXI SP, FEFF      Define stack pointer       This program is included in the monitor FIRMWARE and it is accessible
F013            3E 01            MVI A, 01         Load A with 1 to use       through code ‘0F’. On executing this code the display starts showing the
                                                   Data field.                rolling message “dYnALOG hELPS YoU In LEArning UP”.
F015            06 00            MVI B, 00         No decimal point
F017            21 06F0          LXI, H F006       Get characters starting    The rolling display is using the OUTPUT and DELAY subroutines. To
                                                   at F006H                   simulate the effect of rolling, characters are taken one from a string of
F01A            CD B702          CALL OUTPUT       Display them in data       characters and the position is shifted from right to left.
                                                   field
F01D            3E 00            MVI A, 00         Use address field          When the first letter appears in the highermost position, remaining 5 digits
F01F            06 00            MVI B, 00         No Decimal point           must be blank.
F021            21 00F0          LXI H, F000       Get characters starting
                                                   at F000                    This string starts with 5 blank characters. The last character in the string is
F024            CD B702          CALL OUTPUT       Display them in address    FFH, which is not used to display any letter but it is used only to detect the
                                                   Field                      end of string , so that the rolling can once again start from the beginning
F027            11 FFFF          LXI D,FFFF        Set Delay                  using a conditional jump instruction.
F02A            CD F105          CALL DELAY        Wait out delay
F02D            3E 00            MVI A, 00                                    The complete listing of this program is given in the FIRMWARE listing at
F02F            06 00            MVI B, 00                                    address 0E5BH.
F031            21 04F0          LXI H F004        Get blank
F034            CD B702          CALL OUTPUT       Blank display              Transfer this program from EPROM to RAM using CODE 00. Then modify
F037            11 FFFF          LXI D, FFFF                                  all the address locations suitably so that the same program can be
F03A            CD F105          CALL DELAY                                   executed form RAM.
F03D            C3 1DF0          JMP F01D          Continue Flashing
                                                                              Now you can put any other message in the string and display that
Additional Suggestion :                                                       message.

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.
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.
6-2                                                                                                                                              6-3


The later paragraphs will explain the operation of various commands           6.2.1   D – Display memory Command
supported under the serial section. The commands are in the form of a         D
single alphabetical character specifying the command, followed by a list of
numerical or alphabetical parameters which are entered as hexadecimal         Selected area of addressable memory may be accessed and
numbers, The monitor recognizes the character 0 through 9 and A through       displayed by the D command. The D command produces a formatted
F as legal hexadecimal digits . Longer numbers may be entered but only        listing of the memory contents between ( Low Address ) , and (High
the last four digits will be retained.                                        Address ) , inclusive on the console. Each line of the listing begins
                                                                              with the address of the first memory location displayed on that line,
The only command an alphabetical parameter is the ‘X’ command. The
                                                                              represented as 4 hexadecimal digits , followed by up to 16 memory
nature of such parameter will be discussed in the section explaining the
command.                                                                      location, each one represented by 2 hexadecimal digits.

 6.1            USE OF MONITOR                                                6.2.2 G – Program Execute Command
                                                                              G ( Entry Point )
The monitor allows you to enter, checkout and execute small programs. It
contains facilities for memory display and modification program loading       Control of the CPU is transferred from the monitor to the user program
from console device and program initiation with a break-point facility. In    by means of the program execute command G. The entry point should
addition, the key on the keyboard may be used to initiate your own            be an address in RAM which contains an instruction in the program. If
keyboard interrupt routine.                                                   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.
 6.2             COMMAND STRUCTURE
                                                                              G Command Example
In the following paragraphs, the Monitor command language is discussed.
Each command is described and examples are included for clarity. Error            G 2000
conditions that may be encountered while operating the monitor are            Control is passed to location 2000.
described later.
The monitor requires each command to be terminated by a carriage return       6.2.2   I – Insert Instructions into RAM-1
with the exception of the ‘S’ and ‘X’ commands, the command is not acted      I ( Address ) ( Data )
upon until the carriage return is sensed. Therefore, you may abort any
command , before entering the carriage return, if you have typed an illegal   Single instruction , or an entire user program, are entered into RAM
character.                                                                    with the I command. After sensing the carriage return terminating the
Except where indicated otherwise, a single space is synonymous with the       command line , the monitor waits for the user to enter a string of
comma for use as a delimiter.                                                 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
Consecutive spaces or commas or a space or comma immediately
following the command letter, are illegal in all commands except the ‘X’      at the starting address specified and continuing with sequential
command.                                                                      memory locations . Two hexadecimal digits are loaded into each byte
                                                                              of memory.
6-4                                                                                                                                             6-5


Seperators between digits ( Commas, Spaces, Carriage Returns ) are            1. Type S, followed by the hexadecimal address of the first memory
ignored, illegal characters, however will terminate the command with an          location which is displayed, followed by a space or comma.
error message. (The character ESC or ALTMODE which is echoed on
the console as ‘$’ terminates the digit string.                               2. The contents of the location are displayed, followed by a dash (-).

6.2.3     M – Move Memory Command                                             3. To modify the contents of the location displayed, type in the new
                                                                                 data, followed by a space, comma or carriage return.
M ( Low Address ) ( High Address ) ( Destination )
The M command moves the contents of memory between (Low Address)                  If you do not wish to modify the location type only space, comma
and ( High Address ) inclusive of the area of RAM beginning at                    or carriage return . The next higher memory location will
( destination ) .The contents of the field remain undistributed, unless the       automatically be displayed as in step ( 2 ).
receiving field overlaps the source field.
                                                                              4. Type a carriage return. The S command will be terminated.
The move operation is performed on a Byte–by-Byte basis, beginning at
(Low Address). Care should taken if ( Destination ) is between ( Low          6.2.5    X – Examine / Modify CPU Register Command
Address) and (High Address). For example, if l ocation 2010H contains         X ( Register Identifier )
1A, the command M2010, 201F, 2011 will result in locations 2010H to
                                                                              The displaying and modification of the CPU registers are
2020H containing ‘1A1A1A’ , and the original contents of the memory
                                                                              accomplished via the X command. The X command uses (Register
will be lost.
                                                                              Identifier) to select the particular register to be displayed. The register
                                                                              identifier is asingle alphabetic character denoting a register, as defined
The monitor will continue to move data until the source field is exhausted
                                                                              in table.
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
                                                                              X command register identifiers :
stop.
                                                                                      Identifier code                 Register
  6.2.4   S – Substitute Memory
                                                                                             A                        Register A
S ( Address ) ( Data)                                                                        B                        Register B
                                                                                             C                        Register C
The S command allows you to examine and optionally modify memory                             D                        Register D
locations individually. The command functions as follows :                                   E                        Register E
                                                                                             F                        Flags Byte
6-6                                                                                                                                                    6-7

                                                                                  The bits in the byte (F) and interrupt mask (I) are encoded as follows :
      Identifier code                  Register
                                                                                  The format of F register :
            I                          Interrupt mask                             S         Z   X     C        X        P        X   C
            H                          Register H
            L                          Register L
            M                          Register H & L combined                                                                                 Carry
            S                          Stack Pointer                                                                                           Parity
            P                          Program Counter
                                                                                                                                               Aux.Carry

                                                                                                                                               Zero
The command operates as follows :

1. Type X, followed by a register identifier or a carriage return.                                                                             Sign X= Undefined
                                                                                  The format of I register :
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)                                                  I       M         M      M
      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              0       0      0           0         E       7.5       6.5    5.5
      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                                                                  Interrupt Mask
      terminated. If a carriage return is entered in step 3, the X command is
      terminated.                                                                                                      Interrupt enable flag

5.    If a carriage return is typed in step (1) above, an annotated list of all
                                                                                  6.3               PROGRAM DEBUGGING
      registers and their contents are displayed.
                                                                                  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.
6-8                                                                                                                                     6-9


 6.4              ERROR CONDITIONS                                              2.      I COMMAND EXAMPLE :

Each character is checked as it is entered from the console. As soon as                 1 1 0 0 0 (CR)
the monitor determines that the last character entered is illegal, it aborts            0123456789A$
the commands and issues ‘*’ to indicate an error has occurred.
                                                                               This command puts the following into RAM.
 6.5              ADDRESS VALUE ERRORS                                          3.      M COMMAND EXAMPLE :

Some commands require an address pair in the form of ( Low Address )                    M 0 0 0 0, 0 0 1 0, F 0 0 0 (CR)
( 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      Block area from 0H to 0010H (27 Bytes) is moved to RAM from
indicated by the command will be performed on the data at low address          F000H. User can check it with two commands.
only.
                                                                               D0, 10 (CR) and
Addresses are evaluated modulo 210 , thus if a hexadecimal address             DF000, F020 (CR)
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              4.      S COMMAND EXAMPLE :
memory in a command which does not exit in the hardware configuration
you are using.                                                                          SF000       3E- 00-05      D3-00   05-07 (CR)
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     The location F000H which contains 3E is unchanged. Location F001H
existent portion of memory is given as the distrinct field in a command,       contains 00 is replaced with 05 , location F002H contains D3 is
the command effect.                                                            replaced with 00 and F0003H contains 05, which is replaced by 07.
                                                                               The user can verify it with the D command.
 6.6              COMMAND EXAMPLES
                                                                                6.7             AUDIO CASSETTE I/F
1.          D COMMAND EXAMPLE :

            DC5, D6 (CR)                                                       Till now the full discussion was concentrated on CRT (RS232C) type
                                                                               of communication interface . Additional useful interface provided on
00C5       DA 9D 00 C3 E9           01    CD    00   02   CD    E7             SID and SOD lines of 8085 Microprocessor is the Audio Cassette I/F.
00D0       02 FE 10 CA EC           00    32
6-10                                                                                                                                            6-11


    The System RAM is volatile, i.e. whenever the power is OFF, data is           If Err is displayed. It indicates :
    lost.EPROM is nonvolatile storage but it is costly and consumes more
    time for erasing and reburning.                                               Open area for RAM (SS-SE)
                                                                                  Improper formatting
    Audio Cassette I/F is cheap and fast to use. You can store 30K bytes          Checksum mismatch
    on one side of the C60 cassette. The two commands SAVE and LOAD               Noisy Tape recorde/ tape
    in operating section explain the use of this interface. In this section the
    background of this interface is discussed . A file management type of                                  BAUD RATE TABLE 6.1
    storage is supported . A very reliable , ‘Simple Hardware Complex                                      (At 6,144 MHz Crystal)
    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                                     Baud Rate          Bit-Time    Half Bit

    Byte Start Bit ( 0 ) bit 7 to bit 0   1 stop                                               110                08C6        04E3
          Bit 10*6 60ms                                                                        150                05B2        03D9
    FILE Hexadecimal file.
                                                                                               300                03D7        026C
    SAVE / LOAD SEQUENCE :                                                                     600                0269        01A5
                                                                                               1200               02B2        0159
                                                                                               4800               0157        012C
                                                                 SS
 LOAD        FILE        SE         SS     CHKSUM    MIDSYNC DATA TAIL
                                                                                               9600               0129        0115
 SYNC        NAME                                            SS   SYNC                         19200              0112        0109
                                                                                                                  0107        0104


1KHz        1 Byte    2 Bytes 1Byte       1 Byte    2 KHz      Variable 2KHz
4 Sec.                                              2 Sec.     Data    2Sec.      Please note that only while using the CIN and COUT routines off line.
                                                                                  You have to load these HALFBIT and BITTIME.
The data rate is 165 bps in 30 min. You can store (165 * 30 * 60) * 10
Bytes 25 K.                                                                       In all other situations the AUTOBAUD software will adjust to
                                                                                  terminal baud rate ( Any nonstandard baud rates also ). While loading
The Output could be connected to MIC or AUX IN of CRTs.                           the locations are FF9AH for HALFBIT and FFCOH for BITTIME

The total procedure for SAVING and LOADING is explained in command                For 600 Baud, load the following using the SET command :
chapter.
                                                                                  FFC0 – 69
                                                                                  FFC1 – 02
                                                                                  FF9A – A5
                                                                                  FF9B – 01
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.
7-2                                                                                                                         A-1


The details of the 56 pin edge connector is given below :       APPENDIX A
Pin No.           Signal        Pin No.          Signal
                  Name                           Name
                                                                CONNECTOR & STRAPPING DETAILS

1                   +5V         29               A0             The connectors on MICROFRIEND-DYNA 85 are designated as
2                   +5V         30               A8             follows :
3                   GND         31               WR
4                   GND         32               RD             J1   :      50 pin Edge connector with STD compatible signals
5                   NC          33               IORQ           J2   :      26 pin flat cable connector for 8155
                                                                J3   :      26 pin flat cable cinnector 8255
6                   NC          34               MEMRQ
                                                                J4   :      26 pin flat cable connector for 8279
7                   AD3         35               IOEXP
                                                                J5   :      7 pin power supply connector
8                   AD7         36               NC
                                                                J6   :      7 pin connector for serial I/O
9                   AD2         37               NC
                                                                J7   :      10 pin FRC connector for 8253
10                  AD6         38               NC
11                  AD1         39               S1
12                  AD5         40               S0             Connector J1 : DYNA-85 Bus Interface
13                  AD0         41               BUSAK (HLDA)
                                                                Pin No.            Signal Name Pin No.            Signal Name
14                  AD4         42               BUSRQ (HOLD)
15                  A7          43               INTA           1                  + 5V            26             A10
16                  A15         44               INTRQ          2                  + 5V            27             A1
17                  A6          45                              3                  GND             28             A9
18                  A14         46               NMIRQ          4                  GND             29             A0
19                  A5          47               SYSRST         5                  RDY             30             A8
20                  A13         48               PBRESET        6                  ALE             31             WR
21                  A4          49               CLK            7                  AD3             32             RD
22                  A12         50               NC             8                  AD7             33             IORQ
                                                                9                  AD2             34             IO/ M
23                  A3          51               NC
                                                                10                 AD6             35             IOEXP
24                  A11         52               NC
                                                                11                 AD1             36             IOEXP1
25                  A2          53               NC
                                                                12                 AD5             37             IOEXP2
26                  A10         54               NC
                                                                13                 AD0             38             IOEXP3
27                  A1          55               +12V           14                 AD4             39             NMIRQ
28                  A9          56               -12V
A-2                                                                                                       A-3

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

Pin No.     Signal Name         Pin No.   Signal Name   Connector J4 : 8279 Connector
                                                        Pin No.    Signal Name          Pin No.   Signal Name
1           PA3                 2         PA2            1         RL0                  2         RL1
3           PA1                 4         PA0            3         RL2                  4         RL3
5           VCC                 6         PA7            5         RL4                  6         RL5
7           PA6                 8         PA5            7         RL6                  8         RL7
9           PA4                 10        TIM OUT        9         OUT A3               10        OUT A2
11          TIM IN              12        PC5           11         OUT A1               12        OUT A0
13          PC4                 14        PC0           13         OUT B3               14        OUT B2
15          PC1                 16        PC2           15         OUT B1               16        OUT B0
17          PC3                 18        PB0           17         NC                   18        VCC
19          PB1                 20        PB2           19         CNTL                 20        SHIFT
21          PB3                 22        PB4           21         NC                   22        GND
23          PB5                 24        PB6           23         SL3                  24        SL2
25          PB7                 26        GND           25         SL1                  26        SL0
A-4                                                                                                                        B-1


Connector J5 : Power Supply Connector                     APPENDIX B
Pin No.             Signal Name
                                                          ADD-ON CARDS FOR MICROFRIEND DYNA-85
1                   GND
2                   GND
3                   + 5V                                  The MICROFRIEND DYNA-85 trainer and development system
4                   + 5V                                  supports various type of add-on interfacing cards like DYNA study
5                   + 12V                                 card, PIO cards. These cards are designed for the novice as well as
6                   -12V                                  those who already know about microprocessors, to carry out
7                   NC                                    experiments for the purpose of thorough understanding of the
                                                          peripheral chips and interfacing with external world.
Connector J6 : Serial Connector
                                                          List of add on card supported by DYNA-85 is as follows :
Pin No.             Signal Name

1                   NC                                    1) DYNA-SERIES PERIPHERAL STUDY CARDS
2                   NC
3                   NC                                    [A]   DYNA-PIO                :       8155 STUDY CARD
4                   NC                                    [B]   DYNA-PIO/1              :       8212 STUDY CARD
5                   TXD                                   [C]   DYNA-PIO/2              :       8255 STUDY CARD
6                   RXD                                   [D]   DYNA-TIMER              :       8253 STUDY CARD
7                   GND                                   [E]   DYNA-SERIAL             :       8251 STUDY CARD
                                                          [F]   DYNA-LBDR               :       LATCH, BUFFER, DECODER,
                                                                                                RAM
Connector J7 : 8253 Connector                                                                   STUDY CARD
                                                          [G]   DYNA-INTR               :       8259 STUDY CARD
Pin No.    Signal Name            Pin No.   Signal Name   [H]   DYNA-KBDISP             :       8279 STUDY CARD
                                                          [I]   DYNA-DCM                :       DC MOTOR CONTROL
1          GATE 0                 2         GATE 1                                              STUDY CARD
3          GATE 2                 4         GND           [J]   DYNA-TWH                :       THUMBWHEEL STUDY CARD
5          CLK 0                  6         OUT 0
7          CLK 1                  8         OUT 1
9          CLK 2                  10        OUT 2         And many more study cards will be made available in the DYNA-
                                                          SERIES.
B-2                                                                                                                  D-1


 2)    DMS-PIO CARDS                                                APPENDIX D

 [A]   HEX KEYPAD CARD.
                                                                    MICROFRIEND DYNA-85 MONITOR LISTING
 [B]   STEPPER MOTOR CONTROLLER CARD.                               ADDRESS      NAME                FUNCTION
 [C]   ELEVATOR SIMULATOR CARD.
 [D]   D TO A CONVERTER CARD.                                       0000         RST 0 COLD START Resets & Reinitializes
 [E]   A TO D CONVERTER CARD.                                                                     all
 [F]   LOGIC INTERFACE CARD.                                        0008         RST 1 WARM START Stores all CPU status
 [G]   SERIAL DISPLAY CARD.                                         004E         SIGNONK          Friend Message
 [H]   DIGITAL I/O SIMULATOR CARD                                   0066         CMMND            Keyboard command
                                                                                                  recognizer
 For further information or demonstration of the above cards with   0092         REG              'REG' Command entry
 DYNA-85, please contact us or our dealers.                                                       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
D-2                                                       D-3

ADDRESS   NAME                 FUNCTION                   ADDRESS   NAME           FUNCTION

029F      * INSDG      INSERT hex digit in A into DE      065B      ** GETNM       Get specified count of
02A8      NXTRG        Advance register pointer to next                            numbers from input
                       reg.                                                        stream
02B7      ** OUTPUT    Output characters to display       06A0      * HIL0         Compare HL & DE
02E7      ** RDKBD     Read characters from KBD in A      06C7      ** NMOUT       Outputs two ASCII
02F7      RETF         Return False                                                characters for each
02FA      RETT         Return True                                                 number in A
02FC      RGLOC        Get register save location         06E2      PRVAL          Convert hex to ASCII
0309      RGNAM        Display register name              06EA      REGDS          Display contents of
031B      RSTOR        Restore user registers                                      register save one
0344      SETRG        SET Register pointer                                        location
035F      MODIAD       Update address field of display    071B      RGADR          From a character
                       from CURAD                                                  denoting register gets
0362      ** MODADI    Update address field of display                             the saved location
                       from HL                                                     address
036B      MODIDT       Update address field of display    0732      SRET           Success return
                       from WRDT                          0734      STHF0          Store to lower half zero
036E      ** MODIDT1   Update data field of display       073F      STHLF          Store into specified half
                       from A                                                      byte of DE the 4 bit
03FA      SIGNON       Print MICROFRIEND-I on TTY                                  value in C
0408      GETCM        Get commands from TTY              075E      VALDG          0-9 & A-F valid hex
0437      DCMD         Display memory block                                        degit check
0468      GCMD         Execute user program               0779      VALDL          Valid delimiter check
0486      IMCD         Insert byte into memory            0841      CODECMD        CODE Command
04D0      SCMD         Block move during memory           085C      MOVE BLOCK     Move Block of Memory
04F0      SCMD         Examine & Modify memory                                     CODE 00
0514      XCMD         Examine & Modify registers         088D      FILL BLOCK     Fill block of RAM with
0590      ** CIN       Gets character in A from TTY                                variable CODE 01
05BB      * CNVBN      Converts ASCII hex to Binary       08A6      COMPL CMENT    Complement RAM
05C4      ** COUT      Outputs ASCII character in C to                             block CODE 0E
                       TTY                                08BD      BLOCK Search   Search a given block
05EB      ** CROUT     Outputs CR & CF to console                                  for variable CODE 04
05F1      ** DELAY     Returns when count in DE           08D4      * DISPLAY      Display
                       become 0                                                    match/mismatch & wait
05F8      ** ECHO      Gets character from console &                               for INR
                       sends it back                      08DD      INSERT         Insert a byte in a block
0611      * ERROR      Outputs to console                                          CODE 02
061C      FRET                                            0929      DELETE         Delete a byte from a
061F      ** GETCH     Get a character from input                                  block code 03
                       stream                             0951      HEX-DECIMAL    CODE 05 Hexadecimal
0626      ** GETHX     Accept a string of hex digits                               to Decimal
                       from input stream
D-3                                                                                                             D-4

ADDRESS   NAME       FUNCTION                   ADDRESS                NAME                    FUNCTION

 --       DEC-HEX    CODE 06 Decimal to         0D28                   LOAD                    Load from cassette to
                     Hex conversion                                                            RAM
09D7      SERIAL     Baud Rate id, Sign,        0D5C                   TAPEIN                  Input a byte from tape
                     Command                    0D84                   BITIN                   Input a bit at a time
09E3      BRID       Baud Rate identification                                                  from Tape
0A10      CNVBN      Convert to Binary          0DAB                   PRVRG                   Previous register
0A19      TPO        Break point loading        0DBA                   CHK                     INR or DCR Check
0A4B      SSTEP      Break point checking       0DC3                   INR DCR
0A78      * LDALL    Load SS, SE & DS           0DD9                   VALCHI                  Validity Check
0A93      LDSSE      Load SS & SE               0DF8                   * BITSPAS               Pass Bits in serial
0AC2      * DTDISP   Display as per code                                                       mode
0AE6      BLANKCHK   Check EPROM for            0E0F                   SRL1                    Display Serial
                     erasure code 0B            0E50                   * COMPARE               Block compare
0B16      Pr LOAD    Load Pr (Program)type                                                     compares two blocks
0B35      DUPL       Duplicate CODE 0A                                                         SS, SE & ds
055B      COPY       Copy PROM into RAM         0E5B                                           CODE OF
                     CODE 09                    0EA2                                           Guess game CODE 0D
0B65      CHKSUM     Checksum given
                     PROM CODE 'OC'              *     These routines are very useful to the user & are re-explained
0BA7      VERIFY     Verify RAM VS EPROM               in the programming section
                     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-5                                                                                                             D-6

                                                              0028 C3C2FF    JMP RST 5.5   ;BRANCH TO RST 5
      SOFTWARE LISTING OF MICROFRIEND-DYNA-85                                              LOCATION IN RAM INPUT
                                                                                           INTERRUPT ENTRY POINT
                                                                                           (RST 5.5)
LOC OBJ                     SOURCE STATEMENT                  002C           ORG 2CH
                            "RESET" KEY ENTRY POINT-COLD      002C C397FF    JMP ININT     ;BRANCH TO USER RAM RST
                            START RST 0 ENTRY POINT                                        6 ENTRY POINT
 0000   3E00        MVI A, KMODE ;GET CONTROL                 0030           ORG 30H
                                     CHARACTER                0030 C3C5FF    JMP RSET6     ;BRANCH TO RST 6
 0002   D30500      OUT CTRL      ;SET                                                     LOCATION IN RAM HARD
                                  KEYBOARD/DISPLAY MODE                                    WIRED USER INTERRUPT
 0005   C3F101      JMP CLDST     ;GO FINISH COLD START                                    ENTRY POINT (RST 6.5)
             CLDBK                ;THEN JUMP BACK HERE        0034 ORG 34H
 0008                             ORG 8                       0034 C3C8FF    JMP RESET 6.5 ;BRANCH TO RST 675
             SAVE REGISTERS                                                                LOCATION IN RAM
 0008   22EFFF      SHLD LSAV     ;SAVE H & L                 0038 ORG 38H
                                  REGISTERS                   0038 C3CBFF    JMP RSET7     ;BRANCH TO RST 7
 000B   E1          POP H         ;GET USER PROGRAM                                        LOCATION IN RAM
                                  COUNTER                                                  "VECTORED INTERRUPT"
             FROM TOP OF STACK                                                             KEY ENTRY POINT(RST 7.5)
 000C   22F2FF      SHLD PSAV     ;/AND SAVE IT               003C ORG 3CH
 000F   F5          PUSH PSW      ;                           003C C3CEFF    JMP USINT    ;BRANCH TO USER
 0010   E1          POP H                                                                 INTERRUPT LOCATION IN
 0011   22EdFF      SHLD FSAV     ;SAVE FLIP/FLOP &                                       RAM.
                                  REGISTER A                            RES10             ; CONTINUE SAVING USER
 0014   210000      LXI H, 0      ;CLEAR H & L                                            STATUS
 0017   39          DAD SP        ;GET USER STACK POINTER                                 ;GET USER INTERRUPT
 0018   22F4FF      SHLD SSAV     ;AND SAVE IT                                            STATUS AND INTERRUPT
 001B   21EDFF      LXI H, BSAV+1 ;SET STACK POINTER                                      MASK
                                  FOR SAVING                  003F 20         RIM         ;GET USER INTERRUPT
 001E   F9          SPHL ;REMAINING REGISTERS                                             STATUS AND INTERRUPT
 001F   C5          PUSHB ;SAVE B& C                                                      MASK
 0020   D5          PUSHD ;SAVE D & E                         0040 E60F       ANI 0FH     ;KEEP STATUS & MAK BITS
 0021   C33F00      JMPRES10      ;LEAVE ROOM FOR             0042 32F1FF     STA ISAV    ;SAVE INTERRUPT STATUS &
                                  VECTORED INTERRUPTS                                     MASK
             TIMER INTERRUPT (TRAP) ENTRY POINT (RST 4.5)--   0045 3E0E       MVI A, UNMASK ;UNMASK INTERRUPTS
 0024   ORG 24H                                                                              FOR MONITOR USE
 0024   C35701      JMP STP 25    ;BACK TO SINGLE STEP        0047            30 STM      ;INTERRUPTS DISABLED
                                  ROUTINE RST5 ENTRY                                      WHILE MONITOR IS
                                  POINT                                                   RUNNING (EXCEPT WHEN
 0028   ORG 28H                                                                           WAITING FOR INPUT)
                                                              0049            20          RIM     ;TTY OR KEYBOARD
                                                                                          MONITOR?
                                                              004A      07           RLC  ;IS TTY CONNECTED?
D-7                                                                                                                         D-8

                                                                               ****************************************
0048 DAD709         JC SERIAL      ;YES - BRANCH TO                           FUNCTION ; COMMD-COMMAND RECOGNIZER
                                   TTY MONITOR                                INPUTS ; NONE
                                   ;NO - ENTER KEYBOARD                       OUTPUT ; NONE
                                   MONITOR                                    CALLS ; RDKBD, ERR, SET, REG, RUN, STEP, CODE,
                                                                              SAVE, LOAD DESTROYS ; A, B, C, D, E, H, L, F/F'S
          ******************************************
          BEGINNING OF KEYBOARD MONITOR CODE                        0066   31E9FF      LXIH MNSTK     ;MONITOR SP INITIALIZED
           *****************************************************    0069   3E90        MVI A, ADISP   ;USE ADDRESS FIELD
                        OUTPUT SIGN-ON MESSAGE                      006B   D305        OUT CNTRL      ;OUTPUT TO CNTRL
004E    AF              XRA A             ;ARG-USE ADDRESS FIELD    006D   3E1E        MVI A, F       ;PROMPT
                                          OF DISPLAY                006F   D304        OUT DATA       ;OUTPUT F TO START OF
004F    0600            MVI B, NODOT ;ARG-NO DOT IN ADDRESS                                           ADDRESS
                                          FIELD                     0071 00          NOP
0051   21A063           LXI H, SGNAD ;ARG-GET ADDRESS OF            0072 CDE702      CALL RDKBD ;READ KEYBOARD
                                          ADDRESS FIELD PORTION     0075 010B00      LXI B, NUMC ;COUNTER FOR NUMBER OF
                                          OF SIGN-ON MESSAGE                                       COMMANDS IN C
0054   CDB702           CALL OUTPUT ;OUTPUT SIGN ON MESSAGE         0078   210008 CMD10 LXI H, CMDTB ;GET ADDRESS OF
                                          TO ADDRESS FIELD                                             COMMAND TABLE
0057   3E01             MVI A, DTFLD ;ARG-USE DATA FIELD OF         0078   BE        CMP M        ;RECOGNIZE THE COMMAND?
                                          DISPLAY                   007C    CA8700   JZ CMD15      ;YES GO PROCESS IT
0059   0600             MVI B, NODOT ;ARG-NO DOT IN DATA FIELD      007F    23       INX H         ;NO-NEXT COMMAND TABLE
                                          PORTION OF SIGN-ON                                       ENTRY
                                          MESSAGE                   0080   0D        DCR C         ;END OF TABKE?
005B    21AA03          LXI H, SGNOT ;ARG-GET ADDRESS OF            0081    C27800   JNZ CMD10     ;NO-GP CHECK NEXT ENTRY
                                          DATA FIELD PORTION OF                                    ;YES - COMMAND UNKNOWN
                                          SIGN-ON MESSAGE           0084   C31502    JMP ERR       ;DISPLAY ERROR MESSAGE
005E   CDB702           CALL OUTPUT ;O/P SIGN-ON MESSAGE TO                                        AND GET ANOTHER
                                          DATA FIELD                                               COMMAND
0061   3E80             MVI A, EMPTY                                       CMD15
0063   32FEFF           STA IBUFF         ;SET INPUT BUFFER EMPTY   0087   210B08    LXI H, CMDAD ;GET ADDRESS OF
                                          FLAQ                                                     COMMAND ADDRESS TABLE
                                                                    008A   0D        DCR C         ;ADJUST COMMAND
                                                                                                   COUNTER COUNTER ACTS
                                                                                                   AS POINTER TO COMMAND
                                                                                                   ADDRESS TABLE
D-9                                                                                                                 D-10


 008B 09          DAD B        ;ADD POINTER TO TABLE      00A3 7E          MOV A, M     ;GET REGISTER CONTENTS
                               ADDRESS                    00A4 32F8FF      STA CURDT    ;STORE REGISTER
 008C 09          DAD B ;      TWICE BECAUSE TABLE HAS                                  CONTENTS AT CURRENT
                               2 BYTE ENTRIES                                           DATA
 008D 7E          MOV A, M     GET LOW ORDER BYTE OF      00A7 0601        MVI B, DOT   ;ARG-DOT IN DATA FIELD
                               COMMAND ADDRESS            00A9 CD6B03      CALL UPDOT ;UPDATE DATA FIELD OF
 008E 23          INX H                                                                 DISPLAY
 008F 66          MOV H, M     ;GET HIGH ORDER BYTE OF    00AC 0601        MVI A, DTFLD ;ARG-USE DATA FIELD OF
                               COMMAND                                                  DISPLAY
 0090 6F          MOV L, A     ;PUT LOW ORDER BYTE IN L   00AE CD2B02      CALL GTHEX ;GET HEX DIGIT-WERE ANY
                               COMMAND ROUTINE                                          DIGIT RECEIVED FALSE
                               ADDRESS IS NOW IN H & L                                  EXM10;NO-DOT UPDATE
0091 E9           PCHL         ;BRANCH TO ADDRESS IN H                                  REG.CONTENT
                               &L                         00B1 D2B800      JNC EXM10
                                                          00B4 CDFC02      CALL RGLOC ;YES GET REGISTER SAVE
             ************************                                                   LOCATION IN H & L
             COMMAND ROUTINES                             00B7 73          MOV M, E     ;UPDATE REGISTER
             ************************                                                   CONTENTS EXAM10
      FUNCTION ; REG EXAMINE AND MODIFY REGISTERS         00B8 FE11        CPI PERIO    ;WAS LAST CHARACTER A
      INPUTS ; NONE                                                                     PERIOD ?
      OUTPUTS ; NONE                                      00BA CAE901      JZ CLDIS     ;YES CLEAR DISPLAY AND
      CALLS ; CLEAR, SETRG, ERR, RGNAM, RGLOC,                                          TERMINATE COMMAND
      UPDDT, GTHEX, NXTRG                                 00BD FE10        CPI COMMA ;WAS LAST CHARACTER. ?
      DESTROYS ; A, B, C, D, E, H, L, F/F'S REG           00BF C2E60D      JNZ PRRG     ;NO JUMP TO PREVIOUS
                                                                                        REG.
 0092 0601        MVI B, DOT;ARG-DOT IN ADDRESS           00C2 CDA802      CALL NXTRG ;YES ADVANCE REG.
                            FIELD OF DISPLAY                                            POINTER TO NEXT REG.
 0094   CDD701   CALL CLEAR ;CLEAR DISPLAY                                              ANY MORE REGISTER TRUE
 0097   CD4403   CALL SETRG ;GET REGISTER                                               EXAM05 ;YES CONTINUE
                            DESIGNATOR FROM                                             PROCESSING WITH NEXT
                            KEYBOARD AND SET                                            REGISTER
                            REGISTER/POINTER              00C5 DA9D00      JC EXAM05
                            ACCORDINGLY WAS               00C8 C3E901      JMP CLDIS    ;NO CLEAR DISPLAY AND
                            CHARACTER A REGISTER                                        TERMINATE COMMAND
                            DESIGNATOR
                 FALSE ERR  ;NO-DISPLAY ERROR MSG.              *************************************************
                            AND TERMINATE COMMAND                     FUNCTION RUN -EXECUTE USER PROGRAM
 009A   D21502   JNC ERR                                              INPUTS ; NONE
            EXAM05                                                    OUTPUTS ; NONE
 009D   CD0903   CALL RGNAM ;OUTPUT REGISTER NAME                     CALLS ; DISPC, RDKBD, CLEAR, ERR, OUTPT
                            TO ADDRESS FIELD                          DESTROYS ; A, B, C, D, E, H, L, F/F'S
 00A0   CDFC02   CALL RGLOC ;GET REGISTER SAVE
                            LOCATION IN H & L
D-11                                                                                                                        D-12

                                                                   00FA C31B03         JMP RSTOR        ;RESTORE USER
                  RUN                                                                                   REG.INCLUDING PROGRAM
00CB CD0002             CALL DISPC     ;DISPLAY USEER PROGRAM                                           COUNTER i.e.BEGIN
                                       COUNTER                                                          EXECUTION OF USER
00CE CDE702             CALL RDKBD     ;READ FROM KEYBOARD                                              PROGRAM
00D1 FE11               CPI PERIO      ;IS CHAR. IS PERIOD ?        **************************************************************
00D3 CAEC0              JZ GIO         ;YES GO EXECUTE THE            FUCTION ; STEP-SINGLE STEP(EXECUTE 1 USER
                                       COMMAND                                   INSTRUCTION)
                                       ;NO ARG CHARACTER IS IN A       INPUTS ; NONE
00D6     32FEFF         STA IBUFF      ;REPLACE CHARACTER IN          OUTPUTS ; NONE
                                       INPUT BUFFER                   CALLS ; DISPC, RDKBD, CLEAR, GTHEX, ERR
00D9     0601           MVI B, DOT     ;ARG DOT IN ADDRESS            DESTROYS; A, B, C, D, E, H, L, F/F'S
                                       FIELD                          STEP
00DB     CDD701         CALL CLEAR     ;CLEAR DISPLAY              00FD CD0002          CALL DISPC ;DISPLAY USER
00DE     0600           MVI B, ADFLD   ;ARG USE ADDRESS FIELD                                           PROG.COUNTER
00E0     CD2B02         CALL GTHEX     ;GET HEX DIGITS             0100 CDE702          CALL RDKBD ;READ FROM KEYBOARD
00E3     FE11           CPI PERIO      ;WASLASTCHAR. A PERIOD      0103 FE11            CPI PERIO       ;WAS CHARACTER A
00E5     C21902         JNZ ERR        ;NO-DISPLAY ERROR MSG.                                           PERIOD?
                                       AND TERMINATE COMMAND       0105 CAE901          JZ STP20        ;YES GO TO STP20
00E8     EB             ECHG           ;PUT HEX VALUE FROM         0108 FE10            CPI COMMA ;WAS LAST CHARATER '.'?
                                       GTHEX TO H & L              010A CA2601          JZ CLD1S        ;YES-GO SET TIMER
00E9     22F2FF         SHLD PSAV      ;HEX VALUE IS NEW USER                                           NO-CHARACTER FROM
                                       PC                                                               KEYBOARD WAS NEITHER
00EC     0600     G10   MVI B, NODOT   ;YES-ARG-NO DOT IN                                               PERIOD NOR COMMA
                                       ADDRESS FIELD               010D 32FEFF          STA IBUFF       ;REPLACE THE CHARACTER
00EE     CDD701         CALL CLEAR     ;CLEAR DISPLAY                                                   IN THE INPUT BUFFER
00F1     AF             XRA A          ;ARG-USE-NO ADDRESS         0110 0601            MVI A, DOT      ;ARG-DOT IN ADDRESS
                                       FIELD OF DISPLAY                                                 FIELD
00F2     0600           MVI B, NODOT   ;ARG-NO DOT IN              0112 CDD701          CALL CLEAR ;CLEAR DISPLAY
                                       ADDR. FIELD                 0115 0600            MVI B, ADFLD ;ARG-USE ADDRESS FIELD
00F4     21A203         LXI H, EXMSG   ;GET ADDRESS OF                                                  OF DISPLAY
                                       EXECUTION MESSAGE           0117 CD2B02          CALL GTHEX ;GET HEX DIGIT-WERE ANY
                                       IN H & L                                                         DIGITS RECIEVED ?
00F7     CDB702         CALL OUTPT     ;DISPLAY EXECUTION                               FALSE ERR       ;NO DISPLAY ERROR MSG.
                                       MESSAGE                                          AND TERMINATE COMMAND
                                                                   011A D21502          JNC ERR
D-13                                                                                                        D-14


011D EB      XCHG        ;HEX VALUE FROM GTHEX TO HL     0161 F1            POP PSW      ;RETRIEVE PSW
011E 22F2FF SHLDX PSAV ;HEX VALUE IN NEW USER PC         0162 22EFFF        SHLD PSAV    ;SAVE H & L
0121 FE11 CPI PERIO      ;WAS LAST CHAR. FROM GTHEX A    0165 E1            POP H        ;GET USER PROGRAM
                         PERIOD ?                                                        COUNTER FROM TOP OF
0123 C4190A CNZ STP0     ;NO-GO TO CHECK BREAK                                           THE STACK
0126 3AF1FF STP20 LDA ISAV        ;GET USER INTERRUPT
                                  MASK                   0166   22F2FF      SHLD PSAV    ;SAVE USER PC
 0129 E608 ANI 08H       ;KEEP INTERRUPT STATUS          0169   F5          PUSH PSW
 012B 32FDFF STA TEMP    ;SAVE USER INTERRUPT            016A   E1          POP H
                         STATUS                          016B   22EDFF      SHLD PSAV     ;SAVE FLIPFLOP & A REG.
 012E 2AF2FF LHLD PSAV ;GET USER PC                      016E   210000      LXI H, 0H     ;CLEAR H & L
 0131 7E    MOV A, M     ;GET USER INSTRUCTION           0171   39          DAD SP        ;GET USER STACK POINTER
 0132 FEF3 CPI (DI)      ;DI INSTRUCTION ?               0172   22F4FF      SHLD SSAV     ;SAVE USER STACK
 0134 C23B01 JNZ STP21 ;NO                                                                POINTER
 0137 AF    XRA A        ;YES-RESET USER INTR.           0175 21EDFF        LXI H, BSAV+1 ;SET MONITOR STACK
                         STATUS                                                           POINTER
 0138 C34201 STP21 JMP STP22                             0178          F9           SPHL ;SAVING REMAINING USER
 013B FEFB CPI (EI)      ;EI INSTRUCTION ?                                                REG
 013D C24501 JNZ STP23   ;NO                             0179 C5            PUSH B        ;SAVE B & C
 0140 3E08 MVI A,08H     ;YES SET USER INTR. STATUS      017A D5            PUSH D        ;SAVE D & C
 0142 32FDFF STP22 STA TEMP ;SAVE NEW USER INTR          017B 20            RIM           ;GET USER INTERRUPT
                                  STATUS                                                  MASK
 0145 3E40 MVI A,(TIMER SHR8);HIGH ORDER BITS OF         017C E607          ANI 07H       ;KEEP MASK BITS
                                TIME OR TMODE VALUE      017E 21FDFF        LXI H, TEMP ;GET USER INTERRUPT
                                OR'ED WITH MODE                                           STATUS
 0147 D30D OUT TIMHI                                     0181 B6            ORA M         ;OR IT INTO MASK
 0149 3EC5 MVI A,TIMER AND 0FFH;LOW ORDER BITS           0182 32F1FF        STA ISAV      ;SAVE INTR. STATUS& MASK
                                  OFTIMER VAL            0185 3E0E          MVI A, UNMASK;UNMASK INTERRUPT
 014B D30C OUT TIMLO                                                                      FOR MONITOR USE
 014D 3AFFFF LDA USCSR ;GRT USER IMAGE OF WHAT'S         0187 30            SIM
                         IN CSR                          0188 C34B0A        JMP SSTEP     ;GO GET READY FOR
 0150 F6C0 ORI TSTRT     ;SET TIMER COMMAND BITS                                          ANOTHER INSTR.
                         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-15                                                                                                          D-16


       ***************************************************   01AF CD6B03     CALL UPDDT ;UPDATE DATA FIELD OF
       FUNCTION : SET-SUBSTITUTE MEMORY                                                   DISPLAY
       INPUTS : NONE                                         01B2 0601       MVI B, DTFLD ;ARG-USE DATA FIELD
       OUTPUTS : NONE                                        01B4 CD2B02     CALL GTHEX ;GET HEX DIGITS-WERE ANY
       CALLS : CLEAR, GTHEX, UPADD, UPDDT, ERR                                            HEX DIGITS RECIEVED?
       DESTROYS : A, B, C, D, E, H, L, F/F'S                 01B7 F5         PUSH PSW     ;SAVE LAST CHARACTER
       SET                                                                   FALSE SUB10 ;NO LEAVE DATA
                                                                                          UNCHANGED
018B 0601       MVI B, DOT   ;ARG-DOT IN ADDR. FIELD         01B8 D2C401     JNC SUB10    ;AT CURRENT ADDRESS
018D CDD701     CALL CLEAR ;CLEAR THE DISPALY                01BB 2AF6FF     LHLD CURAD ;YES-GET CURRENT
0190 0600       MVI B, ADFLD ;ARG-USE ADDRESS FIELD                                       ADDRESS IN H & L
                             OF DISPLAY                      01BE 73         MOV M, E     ;STORE NEW DATA AT
0192 CD2B02     CALL GTHEX ;GET HEX DIGITS-WERE ANY                                       CURRENT ADDRESS
                             DIGIT RECIEVED                      MAKE SURE DATA WAS ACTUALLY STORED IN CASE
                FALSE ERR    ;NO-DISPLAY ERROR MSG.              CURRENT ADDRESS IN ROM OR IS NON-EXISTANT
                             AND                             01BF 7B         MOV A, E     ;DATA FOR A COMPARISON
0195 D21502     JNC ERR      ;TERMINATE COMMAND              01C0 BE         CMP M        ;WAS DATA STORED
0198 EB         XCHG         ;ASSIGN HEX VALUE                                            CORRECTLY
                             RETURNED BY GTHEX TO            01C1 C21502     JNZ ERR      ;NO DISPLAY ERROR MSG.
                             CURRENT ADDR.                                                AND TERMINATE COMMAND
0199 22F6FF     SHLD CURAD                                   01C4 C3C30D     SUB10 JMP INRDCR ;INCREMENT
019C CDBA0D SUB05 CALL CHK ;CALL CHK ROUTINE                                              DECREMENT CHECK
019F 000000     NOP                                          01C7 22F6FF     SUB20 SHLD CURAD
01A1 0600 SUB   MVI B, NODOT ;ARG-NO DOT IN ADDR.            01CA C3A101     JMP SUB      ;RETRIEVE LAST
                             FIELD                                                        CHARACTER
01A3 CD5F03     CALL UPDAD ;UPDATE ADDR.FIELD OF             01CF FE11 SUB15 CPI PERIO    ;WAS LAST CHARACTER '.'?
                             DISPLAY                         01D1 C21502     JNZ ERR      ;NO-DISPLAY ERROR MSG.
01A6 2AF6FF     LHLD CURAD ;GET CURRENT ADDR. IN H &                                      AND TERMINATE COMMAND
                             L                               01D4 C3E901     JMP CLDIS    ;YES-CLEAR DISPALY AND
01A9 7E         MOV A, M     ;GET DATA BYTE POINTED                                       TERMINATE COMMAND
                             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-17                                                                                                                               D-18


                                                                      *******************************************************************
    **********************************************                     FUNCTION : CLDIS-CLEAR DISPLAY AND TERMINATE
             UTILITY ROUTINES                                                      COMMAND
    **********************************************                     INPUTS : NONE
    FUNCTION : CLEAR-CLEAR THE DISPLAY                                 OUTPUTS : NONE
    INPUTS : B-DOT FLAG 1 - MEANS DOT IN ADDR. FIELD OF                CALLS : CLEAR
                                   DISPLAY                             DESTROYS : A, B, C, D, E, H, L, F/F'S
                                0 - MEANS NO DOT                       DESCRIPTION :              CLDIS IS JUMPED TO BY COMMAND
    OUTPUTS : NONE                                                                                ROUTINES WISHING TO TERMINATE
    CALLS : OUTPT                                                                                 NORMALLY. CLDIS CLEARS THE
    DESTROYS : A, B, C, D, E, H, L, FF'S                                                         DISPLAY AND BRANCHES TO THE
    DESCRIPTION :               CLEAR SENDS BLANK CHARACTERS                                      COMMAND RECOGNISER.
                                TO BOTH THE ADDRESS & DATA        01E9 0600 CLDIS MVI B, NODOT ;ARG-NO DOT IN ADDR.
                                FIELD OF THE DISPLAY.IF THE                                                 FIELD
                                DOT FLAG IS SET THEN A DOT WILL   01EB CDD701            CALL CLEAR ;CLEAR THE DISPLAY
                                APPEAR AT THE RIGHT EDGE OF       01EE C36600            JMP COMMAND                 ;GO GET ANOTHER
                                THE ADDRESS FIELD.                                                                   COMMAND
             CLEAR
01D7 AF               XRA A ;ARG-USEADDRESS FIELD OF                  ****************************************************
                                DISPLAY ARG-FLAG FOR DOT IN           FUNCTION : CLDST -COLD START
                                ADDR. FIELD IN B                      INPUTS : NONE
01D8 219A03           LXI H, BLNKS ;ARG-ADDRESS OF BLANKS             OUTPUTS : NONE
                                         FOR DISPLAY                  CALLS : NOTHING
01DB CDB702           CALL OUTPT ;O/P BLANKSTOADDR.FIELD              DESTROYS : A
01DE 3E01             MVI A, DTFLD ;ARG-USE DATA FIELD FOR            DESCRIPTION :               CLDST IS JUMPED BY THE MAIN
                                         DISPLAY                                                  COLD START
01E0 0600             MVI B, NODOT ;ARG-USE NO DOT IN DATA                                        PROCEDURE,COMPLETES COLD
                                         FIELD                                                    START INITIALIZATION
01E2 219A03           LXI H, BLNKS ;ARG-ADDRESS OF BLANKS                                         AND JUMPS BACK TO THE MAIN
                                         FOR DISPLAY                                              COLD START PROCEDURE.
01E5 CDB702           CALL OUTPT ;OUTPUT BLANKS TO DATA                        CLDST
                                         FIELD                    01F1 3EC0             MVI A, KBINT ;GET CONTROL CHAR.
01E8 C9               RET                ;RETURN                  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
D-19                                                                                                                             D-20


    ***************************************************************        *********************************************
    FUNCTION : DISPC-DISPLAY PROGRAM COUNTER                               FUNCTION : ERR-DISPLAY ERROR MASSEGE
    INPUTS : NONE                                                          INPUTS : NONE
    OUTPUTS : NONE                                                         OUTPUTS : NONE
    CALLS : UPDAD,UPDDT                                                    CALL : OUTPT
    DESTYROYS: A, B, C, D, E, H, L, FF'S                                  DESTROYS : A, B, C, D, E, H, L, FF'S
    DESCRIPTION :               DISPC- DISPLAYS THE USER                   DESCRIPTION :               ERR IS JUMPED TO BY COMMAND
                                PROGRAM COUNTER IN ADDRESS                                             ROUTINES WISHING TO TERMINATE
                                FIELD OF THE DISPLAY,WITH A DOT                                        BECAUSE OF AN ERROR ERR
                                AT THE RIGHT EDGE OF THE                                               OUTPUTS AN ERROR MESSEGS TO
                                FIELD.THE BYTE OF DATA                                                 THE DISPLAY AND BRANCHES TO
                                ADDRESSED BY THE PROGRAM                                               THE COMMAND RECOGNISER.
                                COUNTER IS DISPLAYED IN THE                         ERR
                                DATA FIELD OF DISPLAY                 0215 AF                XRA A              ;ARG-USE ADDRESS FIELD
             DISPC                                                    0216 0600              MVI B, NODOT ;ARG-NO DOT IN ADDRESS
0200 2AF2FF           LHLD PSAV          ;GET USER PROGRAM                                                      FIELD
                                         COUNTER                      0218 219E03            LXI H, ERMSG ;ARG-ADDRESS OF ERROR
0203 22F6FF           SHLD CURAD ;MAKE IT THE CURRENT                                                           MESSAGE
                                         ADDRESS                      021B CDB702            CALL OUTPT ;OUTPUT ERROR MESSAGE
0206 7E               MOV A, M           ;GET THE INSTRUCTION                                                   TO ADDRESS FIELD
                                         AT THAT ADDRESS              021E 3E01              MVI A, DTFLD ;ARG-USE DATA FIELD
0207 32F8FF           STA CURDT ;MAKE IT THE CURRENT                  0220 0600              MVI B, NODOT ;ARG-NO DOT IN DATA FIELD
                                         DATA                         0222 219A03            LXI H, BLNKS ;ARG-ADDRESS OF BLANKS
020A 0601             MVI B, DOT         ;ARG-DOT IN ADDRESS                                                    FOR
                                         FIELD                        0225 CDB702            CALL OUTPT ;OUTPUT BLANKS TO DATA
020C CD5F03           CALL UPDAD ;UPDATE ADDRESS FIELD OF                                                       FOR DISPLAY
                                         DISPLAY                      0228 C36600            JMP CMMND ;GO GET A NEW COMMAND
020F 0600             MVI B, NODOT ;ARG-NO DOT IN DATA FIELD
0211 CD6B03           CALL UPDDT ;UPDATE DATA FIELD OF
                                         DISPLAY
0214 C9               RET
D-21                                                                                                                  D-22


       ********************************************                  0235 FE10       CPI 10H      ;IS CHAR. A HEX DIGIT?
       FUNCTION : GTHEX-GET HEX DIGITS                               0237 D25502     JNC GTH20    ;NO-GO CHECK FOR
       INPUTS : B - DISPLAY FLAG -0 MEANS USE ADDRESS                                             TERMINATOR.
                       FIELD OF DISPLAY                                                           YES-ARG-NEW HEX DIGIT IS
                   1 - MEANS USE DATA FIELD OF DISPLAY                                            IN A
       OUTPUTS : A - LAST CHARACTER READ FROM KEYBOARD               023A D1          POP D       ;ARG-RETRIEVE HEX VALUE
                      DE - HEX DIGITS FROM KEYBOARD EVALUATED        023B CD9F02      CALL INSDG ;INSERT NEW DIGIT IN HEX
                      MODULO 2**16                                                                VALUE
                      CARRY - SET IF AT LEAST ONE VALID HEX          023E C1          POP B       ;RETRIEVE DISPLAY FLAG
                      DIGIT WAS READ RESET OTHERWISE                 023F 0301        MVI C, 1    ;SET HEX DIGIT FLAG i.e.
       CALLS        : RDKBD, INSDG, HXDSP, OUTPT                                                  HEX DIGIT HAS BEEN READ
       DESTROYS: A, B, C, D, E, H, L, FF'S                          0241 C5          PUSH B      ;SAVE DISPLAY AND HEX
       DESCRIPTION :               GTHEX ACCEPTS A STRING OF HEX                                  DIGIT FLAGS
                                   DIGITS FROM THE KEYBOARD,         0242 D5          PUSH D      ;SAVE HEX VALUE
                                   DISPLAYS THEM AS THEY ARE         0243 78          MOV A, B    ;TEST DISPLAY FLAG
                                   RECIEVED AND RETURNS THEIR        0244 0F          RRC         ;SHOULD ADDRESS FIELD
                                   VALUE AS A 16 BIT INTEGER. IF                                  FIELD OF DISPLAY BE USED
                                   MORE TAHN 4 HEX DIGITS ARE        0245 D24902      JNC GTH10   ;YES-USE HEX VALUE AS IS
                                   RECIEVED ONLY THE LAST 2 HEX                                   NO-ONLYLOWORDER BYTE
                                   DIGITS ARE DISPLAYED IN THE                                    OF HEX VALUE SHOULD BE
                                   DATA OF THE DISPLAY. IN EITHER                                 USED FOR DATA FIELD OF
                                   CASE,A DOT WILL BE DISPLAYED AT                                DISPLAY
                                   THE RIGHTMOST EDGE OF THE         0248 53          MOV D, E    ;PUT LOW ORDER BYTE OF
                                   FIELD. A CHARACTER WHICH IS                                    HEX VALUE IN D
                                   NOT A HEX DIGIT TERMINATES                                     ARG-HEX VALUE TO BE
                                   THE STRING AND IS RETURNED AS                                  EXPANDED IN D & E
                                   AN OUTPUT OF THE FUCTION. IF      0249 CD6C02      GTH10 CALL HXDSP ;EXPAND HEX VALUE
                                   THE TERMINATORS IS NOT A                                       FOR DISPLAY ARG-
                                   PERIOD OR A COMMA THEN ANY                                     ADDRESS OF EXPANDED
                                   HEX DIGITS WHICH MAY HAVE                                      HEX VALUE IN H & L
                                   RECIEVED ARE CONSIDERED TO BE     024C 78          MOV A, B    ;ARG-PUT DISPLAY FLAG IN
                                   INVALID. THE FUNCTION RETURNS                                  A
                                   A FLAG INDICATING WHETHER         024D 0601        MVI B, DOT  ;ARG-DOT IN APPROPRIATE
                                   OR NOT ANY VALID HEX DIGITS                                    FIELD
                                   WERE RECIEVED.                    024F CDB702      CALL OUTPT ;OUTPUT HEX VALUETO
                                                                                                  DISPLAY
022B 0E00            GTHEX MVI C, 00 ;RESET HEX DIGIT                0252 C33202      JMP GTH05   ;GOGETNEXT CHARACTER
                                         FLAG                                                     ;LAST CHAR WAS NOT A HEX
022D C5              PUSH B       ;SAVE DISPLAY AND HEX                                           DIGIT
                                  DIGIT FLAGS                        0255 D1    GTH20 POP D       ;RETRIEVE A HEX VALUE
022E 110000          LXI D, 0     ;SET HEX VALUE TO ZERO             0256 C1          POP B       ;RETRIEVE HEX DIGIT FLAG
0231 D5              PUSH D       ;SAVE HEX VALUE                                                    IN C
0232 CDE702          GTH05 CALL RDKBD ;READ KEYBOARD                 0257 C33202      JMP VALCH   ;VALIDITY CHECK
D-23                                                                                                                 D-24


025A 0000            NOP         ;YES-READY TO RETURN              026D 0F         RRC           ;CONVERT 4 HIGH ORDER
025C FE11            CPI PERIO   ;NO-WAS LAST CHAR. '.'?                                         BITS TO A SINGLE
025E CA6702          JZ GTH25    ;YES READY TO RETURN                                            CHARACTER
                                 `NO-INVALID TERMINATOR-           026E   0F       RRC
                                 IGNORE ANY HEX DIGIT              026F   0F       RRC
                                 READ                              0270   0F       RRC
0261   110000        LXI D, 0    ;SET HEX VALUE TO ZERO            0271   E60F     ANI 0FH
0264   C3F702        JMP RETF    ;RETURN FALSE                     0273   21F9FF   LXI H, BUFF   ;GET ADDR.OF OUTPUT
0267   47            GTH25 MOV B, A ;SAVE LAST CHARACTER                                           BUFFER
0268   79            MOV A, C    ;FHIFT HEX DIGIT FLAG TO          0276 77         MOV M, A      ;STORE CHAR.IN O/P
0269   0F            RRC         ;CARRY BIT                                                        BUFFER
026A   78            MOV A, B    ;RESTORE LAST                     0277 7A         MOV A, D      ;GET FIRST DATA BYTE AND
                                 CHARACTER                                                       CONVERT 4 LOW ORDER
026B C9              RET         ;RETTURN                                                        BITS TO A SINGLE
                                                                                                 CHARACTER.
      ***************************************************          0278   E60F     ANI 0FH
      FUNCTION : HXDSP-EXPAND HEX DIGITS FOR DISPLAY               027A   23       INX H         ;NEXT BUFFER POSITION
      INPUTS : DE-4 HEX DIGITS                                     027B   77       MOV M, A      ;STORE CHAR.IN BUFFER
      OUTPUTS : HL-ADDRESS OF OUTPUT BUFFER                        027C   7B       MOV A, E      ;GET SECOND DATA BYTE
      CALLS : NOTHING                                              027D   0F       RRC           ;CONVERT 4 HIGH ORDER
      DESTROYS : A, H, L, F/F'S                                    027E   0F       RRC           ;BITS TO A SINGLE CHAR.
      DESCRIPTION :               HXDSP EXPANDS EACH INPUT BYTE    027F   0F       RRC
                                  TO 2 BYTE IN A FORM SUITABLE     0280   0F       RRC
                                  FOR DISPLAY BY THE OUTPUT        0281   E60F     ANI 0FH
                                  ROUTINES.EACH HEX DIGIT IS       0283   23       INX H        ;NEXT BUFFER POSITION
                                  PLACED IN THE LOW ORDER 4 BITS   0284   77       MOV M, A     ;STORE CHAR. IN BUFFER
                                  OF A BYTE WHOSE HIGH ORDER 4     0285   7B       MOV A, E     ;GET SECOND DATA BYTE &
                                  BITS ARE SET TO ZERO. THE                                     ;CONVERT LOW ORDER 4
                                  RESULTING BYTE IS STORED                                      BIT
                                  IN THE OUTPUT BUFFER THE         0286   E60F     ANI 0FH      ;TO A SINGLE CHARACTER
                                  FUNCTION RETURNS THE             0288   23       INX H ;NEXT BUFFER POSITION
                                  ADDRESS OF THE OUTPUT BUFFER.    0289   77       MOV M, A     ;STORE CHAR. IN BUFFER
               HXDSP                                               028A   21F9FF   LXI H, OBUFF ;RETURN ADDRESS OF
  026C 7A               MOV A, D           ;GET FIRST DATA BYTE                                 OUTPUT
                                                                   028D C9         RET          ;BUFFER IN H & L
D-25                                                                                                                                  D-26


028E   DB05 INBYTE             IN, STATUS       ;GET 8279 FIFO                 ********************************************************
0290   E607                    ANI,07           ;STATUS & KEEP                 FUNCTION : NXTRG - ADVANCE REGISTER POINTER TO
0292   FE00                    CPI,00           ;COUNT                                         NEXT REG.
0294   CA8E02                  JZ,INBYTE        ;IF NO ENTRY WAIT              INPUTS : NONE
0297   3E40                    MVI A,40H        ;IF ENTRY OF                   OUTPUTS : CARRY - 1 IF POINTER IS AADVANNCE
                                                KEYBOARD IN                                              SUCCESSFULLY
0299 D305                      OUT 05H          ;FIFO                                                    0 OTHERWISE
029B DB04                      IN,DATA          ;THEN GET BYTE IN              CALLS : NOTHING
                                                ACC.                           DESTROYS : A, F/F'S
029D C9                        RET                                             DESCRIPTION :               IF THE REG.POINTER POINTS TO
029E FF                                         ;BLANK                                                     THE LAST REG.
                                                                                                           IN THE EXAMINE REG. SEQUENCE,
       ****************************************************************                                    THE POINTER
       FUNCTION : INSDG-INSERT HEX DIGIT                                                                   IS NOT CHANGED AND THE
       INPUTS : A - HEX DIGIT TO BE INSERTED                                                               FUNCTION RETURNS FALSE.
                  DE - HEX VALUE                                                                           IF THE REG. POINTER DOES NOT
       OUTPUTS : DE - HEX VALUE WITH DIGIT INSERTED                                                        POINT TO THE LAST
       CALLS : NOTHING                                                                                     REG. THEN THE POINTER IS
       DESTROYS : A, F/F'S                                                                                 ADVANCED TO THE NEXT
       DESCRIPTION :               INSDG SHIFTS THE CONTENTS OF D                                          REG. IN THE SEQUENCE & THE
                                   & E. LEFT 4 BITS (1 HEX DIGIT) &                                        FUNCTION RETURNS TRUE.
                                   INSERTS THE HEX DIGIT INA. THE                                NXTRG
                                   LOW ORDER DIGIT POSITION OF             02A8 3AFDFF           LDA RDPTR          ;GET REG. POINTER
                                   THE RESULT. A IS ASSUMED TO             02AB FE0C             CPI NUMRG-1 ;DOES POINTER POINT TO
                                   CONTAIN A SINGLE HEX DIGIT IN                                                    LAST REGISTER
                                   THE LOW ORDER 4 BITS AND                02AD D2F702           JNC RETF           ;YES-UNABLE TO ADVANCE
                                   ZEROS IN THE HIGH ORDER                                                            POINTER RETURN ELSE
                                   4 BITS.                                 02B0 3C               INR A              ;NO ADVANCE REG.POINTER
       *****************************************************************   02B1 32FDFF           STA RGPTR ;SAVE REGISTER POINTER
                                                                           02B4 C3FA02           JMP RETT           ;RETURN TRUE
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-27                                                                                                                   D-28

                                                                    02C4 3E94   MVI A, DDISP       ;CONTROL CHARACTER FOR
    ****************************************************                                           O/P TO DATA FIELD OF
     FUNCTION : OUTPUT - O/P CHARACTER TO DISPLAY                                                  DISPLAY
     INPUTS : A - DISPLAY FLAG 0=USE ADDRESS FIELD                  02CC6 D30500 OUT10 OUT CNTRL
                1 = USE DATA FIELD                                  02C9 7E     OUT15 MOV A, M     ;GET O/P CHARACTER
                B - DOT FLAG 1 = O/P DOT AT RIGHT EDGE OF           02CA EB     XCHG               ;SAVE O/P CHARACTER
                                  FIELD                                                            ADDRESS IN D & E
                                  0 = NO DOT                        02CB 217803 LXI H, DSPTB       ;GET DISPLAY FORMAT
                HL - ADDRESS OF CHARACTER TO BE OUTPUT                                             TABLE ADDRESS
     CALLS : NOTHING                                                02CE 85     ADD L              ;USE O/P CHARACTER AS A
     DESTROYS : A, B, C, D, E, H, L, F/F'S                                                         POINTER TO DISPLAY
     DESCRIPTION :              OUTPUT SENDS CHARCTERS TO                                          FORMAT TABLE
                                THE DISPLAY. THE ADDRESS            02CF 6F     MOV L, A
                                OF THE CHARACTER IS RECIEVED        02D0 7E     MOV A, M           ;GETDISPLAYFORMAT
                                AS AN ARGUMENT EITHER                                              CHARACTER FROM TABLE
                                2 CHARACTERS ARE SENT TO THE        02D1 61     MOV H, C           ;TEST COUNTER WITHOUT
                                DATA FIELD,OR 4 CHARACTERS                                         CHANGING IT
                                ARE SENT TO THE ADDRESS FIELD       02D2 25     DCR H              ;IS THIS THE LAST
                                ? DEPANDING ON THE DISPLAY                                         CHARACTER
                                FLAG ARGUMENT THE DOT FLAG          02D3 C2DC02 JNZ OUT20          ;NO-GO OUTPUT CHAR.
                                ARGUMENT DETERMINES                                                AS IS
                                WHETHER OR NOT A DOT (DECIMAL       02D6 05     DCR B              ;YES-IS DOT FLAG SET?
                                POINT) WILL BE SENT ALONGWITH       02D7 C2DC02 JNZ OUT20          ;NO-GO OUTPUT CHAR.
                                THE LAST OUTPUT CHARACTER.                                         AS IS
              OUTPT                                                 02DA F601   ORI DTMSK          ;YES-ORINMASKTO DISPLAY
02B7 0F                RRC ;USE DATA FIELD?                                                        DOT WITH LAST CHARACTER
02B8 DAC202            JC OUT05;YES-GO SET UP TO USE DATA           02DC 00     OUT20 NOP
                                     FIELD                          02DD D30400 OUT DSPLY          ;SEND CHARACTER TO
02BB 0E04              MVI C, 4           ;NO-COUNT FOR ADDR.                                      DISPLAY
                                          FIELD                     02E0 EB     XCHG               ;RETRIEVE O/P
02BD 3E90              MVI A, ADISP ;CONTROL CHARCTER FOR                                          CHAR.ADDRESS
                                          OUTPUT TO ADDRESS FIELD   02E1 23     INX H              ;NEXT O/P CHARACTER
                                          OF DISPLAY                02E2 0D     DCR C              ;ANY MORE O/P CHARACTER
02BF C3C602            JMP OUT10                                    02E3 C2C902 JNZ OUT15          ;YES-GO PROCESS
02C2 0E02              OUT05 MVI C, 2;COUNT FOR DATA FIELD                                         ANOTHER CHARACTER
                                                                    02E6 C9     RET                ;NO-RETURN
D-29                                                                                                                            D-30


     ****************************************************         02F8 3F              CMC    ;COMPLEMENT CARRY TO MAKE
     FUNCTION : RDKBD-READ KEYBOARD                                            02F9    RET    ;IT FALSE
     INPUTS : NONE
     OUTPUTS : A - CHARCATER READ FROM KEYBOARD                       *******************************************************
     CALLS : NOTHING                                                  FUNCTION : RETT-RETURN TRUE
     DESTROYS : A, H, L, F/F'S                                        INPUTS : NONE
     DESCRIPTION :               RDKBD DETERMINES WHETHER OR          OUTPUTS : CARRY=1 TRUE
                                 NOT THERE IS A CHARACTER IN          CALLS : NOTHING
                                 THE INPUFT BUFFER IF NOT THE         DESTROYS : CARRY
                                 FUNCTION ENABLES INTERRUPTS          DESCRIPTION :               RETT IS JUMPED TP BY ROUTINES
                                 AND LOOPS UNTIL THE INPUT                                        WISHING TO RETURN TRUE. RETT
                                 INTERRUPT ROUTINE STORES A                                       SETS CARRY TO 1 AND RETURNS
                                 CHARACTER IN THE BUFFER.WHEN                                     TO THE CALLER OF THE ROUTINE
                                 THE BUFFER CONTAINS A                                            INVOKING RETT.
                                 CHARACTER,THE FUNCTION FLAGS                  RETT
                                 THE BUFFER AS EMPTY AND          02FA 37               STC       ;SET CARRY TRUE
                                 RETURNS THE CHARACTER AS         02FB C9               RET
                                 OUTPUT.
              RDKBD                                                   ********************************************************
02E7 21FFFF            LXI H,IBUFF                                    FUNCTION : RGLOC-GET REGISTER SAVE LOCATION
02EA 7E                MOV A, M                                       INPUTS : NONE
02EB B7                ORA A              ;IF HIGHER ORDER BIT        OUTPUTS : HL-REGISTER SAVE LOCATION
02EC F2F302            JP RDKIO           ;ONE THEN                   CALLS : NOTHING
02EF F3                DI                 ;BUFFER EMPTY,DISABLE       DESTROYS : B, C, H, L, F/F'S
                                             INT.                     DESCRIPTION :               RGLOC RETURNS THE SAVE
02F0 CD8E02            CALL INBYT ;INPUT BYTE                                                     LOCATION OF THE REG.
02F3 3680              RDKIO MVI M, EMPTY ;SET B                                                  INDICATED BY THE CURRENT
02F5 FB                EI                                                                         REGISTER POINTER VALUE.
02F6 C9                RET                                                     RGLOC
                                                                  02FC 2AFDFF                     LHLD RGPTR ;GET REG. POINTER
    *******************************************************       02FF 2600                       MVI H, 0          ;IN H AND L
    FUNCTION : RETF-RETURN FALSE                                  0301 01ED03                     LXI B, RGTBL ;GET REG.SAVE
    INPUTS : NONE                                                                                                   LOCATION TABLE
    OUTPUTS : CARRY =0 FALSE                                                                                        ADDRESS
    CALLS : NOTHING                                               0304 09                         DAD B             ;POINTER INDEXES
    DESTROYS : CARRY                                                                                                TABLE
    DESCRIPTION :               RETF IS JUMPED TO BY FUNCTIONS    0305 6E                         MOV L, M          ;GET LOW ORDER
                                WISHING TO RETURN FALSE.RETF                                                        BYTE OF REGISTER
                                RESETS CARRY TO 0 AND RETURNS                                                       SAVE LOCATION
                                TO THE CALLER OF THE ROUTINE      0306 26FF                       MVI H,(RAMST SHR B) ;GET HIGH
                                INVOKING RETF.                                                                      ORDER BYTE OF
             RETF                                                 0308 C9                         RET               ;REGISTER SAVE
02F7 37               STC       ;SET CARRY TRUE                                                                     LOCATION
D-31                                                                                                                           D-32


        ***********************************************************       ********************************************************
        FUNCTION : RGNAM-DISPLAY REGISTER NAME                            FUNCTION : RSTOR-RESTORE USER REGISTER
        INPUTS : NONE                                                     INPUTS : NONE
        OUTPUTS : NONE                                                    OUTPUTS : NONE
        CALLS : OUTPT                                                     CALLS : NOTHING
        DESTROYS : A, B, C, D, E, H, L, F/F'S                             DESTROYS : A, B, C, D, E, H, L, F/F'S
        DESCRIPTION :               RGNAM DISPLAYS IN THE ADDRESS         DESCRIPTION :               RSTOR RESTORES SALL CPU
                                    FIELD OF THE DISPLAY, THE                                         REGISTERS,FLIP/FLOPS,
                                    REGISTER NAME CORRESPONDING                                       INTERUPT STATUS, INTERRUPT,
                                    TO THE CURRENT REGISTER                                           STACK POINTER AND PROGRAM
                                    POINTER VALUE.                                                    COUNTER FROM THEIR
                  RGNAM                                                                               RESPACTIVE SAVE LOCATION IN
0309   2AFDFF LHLD RGPTR ;GET REGISTE POINTER                                                         MEMORY,BY RESTORING THE
030C   2600      MVI H, 0                                                                             PROGRAM COUNTER,THE
030E   29        DAD H              ;MULTIPLY POINTERVALUE BY 4                                       ROUTINE EFFECTIVELY TRANSFERS
030F   29        DAD H              ;REG. NAME TABLE HAS 4 BYTE                                       CONTROL TO THE ADDRESS IN THE
                                    ENTRIES)                                                          PROGRAM COUNTER SAVE
0310   01B903 LXI B, NMTABL ;GET ADDRESS OF START OF                                                  LOCATION.THE TIMING OF THIS
                                    REGISTER NAME TABLE                                               ROUTINE IS CRITICAL TO THE
0313   09        DAD B              ;ARG-ADD TABLE ADDRESS TO                                         CORRECT OPERATION OF THE
                                    POINTER-RESULT IS ADDRESS OF                                      SINGLE STEP ROUTINE.
                                    APPROPRIATE REG.NAME IN H & L                                     IF ANY MODIFICATION CHANGES
0314   AF        XRA A              ;ARG-USE ADDRESS FIELD OF                                         THE NUMBER OF CPU STATUS
                                    DISPLAY                                                           NEEDED TO EXECUTE THE
0315   0600      MVI B, NODOT ;ARG-NO DOT IN ADDR.FIELD                                               ROUTINE THEN THE TIMER VALUE
0317   CDB702 CALL OUTPT ;OUTPUT REGISTER NAME TO                                                     MUST BE ADJUSTED BYTHE SAME
031A   C9        RET                ADDRES FIELD                                                      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
D-33                                                                                                                           D-34


0320 30          SIM           ;RESTORE USER INTERRUPT MASK                                                CONVERTED TO THE
                               RESTORE USER INTERUPT STATUS                                                CORROSPONDING
0321 3AF1FF      LDA ISAV      ;GET USER INTERRUPT MASK                                                    REGISTER POINTER
0324 E608        ANI 08H       ;SHOULD USER INTERRUPT BE                                                   VALUE, THE POINTER IS
                               ENABLED                                                                     SAVED, AND THE FUNCTION
0326 CA2D03      JZ RST05      ;NO-LEAVE INTERRUPT DISABLED                                                RETURNS
0329 FB          EI            ;YES-ENABLE INTERRUPT FOR                                                   'TRUE'.OTHERWISE,THE
                               USER PROGRAM                                                                FUNCTION RETURNS'FALSE'
032A C33103      JMP RSR10                                                           SETRG
032D 37          RSR05 STC     ;DUMMY INSTRUCTION-WHEN               0344 CDE702             CALL RDKBD ;READ FROM KEYBOARD
                               SINGLE STEP ROUTINE IS BEING          0347 FE11               CPI 10H     ;IS CHARACTER A DIGIT?
                               USED,THE                              0349 D2F702             JNC RETF    ;NO-RETURN FALSE-
032E D23103      LNC RSR10     ;TIMER IS RUNNING AND EXECUTE                                             CHARACTER IS NOT
                               TIME FOR THIS ROUTINE MUST NOT                                            A REGISTER DESIGNATOR
                               VARY                                  034C D603               SUI 3       ;YES-TRY TO CONVERT
0331 21E9FF      RSR10 LXI H, MNSTK ;SET MONITOR STACK                                                   REGISTER DESIGNATOR TO
                               POINTER TO START OF STACK                                                 INDEX INTO REGISTER
0334 F9          SPHL          ;WHICH IS ALSO END OF REGISTER                                            POINTER TABLE WAS
                               SAVE AREA                                                                 CONVERSION SUCCESSFU?
0335   D1        POP D         ;RESTORE REGISTERS                    034E   DAF702           JC RETF     ;NO-RETURN FALSE
0336   C1        POP B                                               0351   4F               MOV C, A    ;INDEX TO B & C
0337   F1        POP PSW                                             0352   0600             MVI B, 0
0338   2AF4FF    LHLD SSAV     ;RESTORE USER STACK POINTER           0354   21AC03           LXIH, RGPTB ;GET ADDRESS OF
033B   F9        SPHL                                                                                    REGISTER POINTER TABLE
033C   2AF2FF    LHLD PSAV                                           0357 09                 DAD B       ;INDEX POINTS INTO TABLE
033F   E5        PUSH H        ;PUT USER PROGRAM COUNTER ON          0358 7E                 MOV A, M    ;GET REGISTER POINTER
                               STACK                                                                     FROM TABLE
0340 2AEFFF      LHLD LSAV     ;RESTORE H & L REGISTERS              0359 32FDFF             STA RGPTR ;SAVE REGISTER POINTER
0343 C9          RET           ;JUMP TO USER PROGRAM                 035C C3FA02             JMP RETT    ;RETURN TRUE
                               COUNTER
                                                                             ********************************************************
          ********************************************************           FUNCTION : MODIAD-UPDATE ADDRESS FIELD OF
          FUNCTION : SETRG-SET REGISTER POINTER                                             DISPLAY
          INPUTS : NONE                                                      INPUTS : B - DOTFLAG - 1 MEANS PUT DOT AT
          OUTPUTS : CARRY-SET IF CHARACTER FROM KEYBOARD                                     RIGHTEDGEOF FIELD
                        IS A REGISTER DESIGNATOR RESET                       OUTPUTS : NONE
                        OTHERWISE.                                           CALLS : HXDSP,OUTPT
          CALLS : RDKBD                                                      DESTROYS : A, B, C, D, E, H, L, F/F'S
          DESTROYS : A, B, C, H, L, F/F'S                                    DESCRIPTION :               UPDAD UPDATES THE ADDRESS
          DESCRIPTION :SETRG - READS A CHARACTER FROM THE                                                FIELD OF THE DISPLAY USING THE
                               KEYBOARD IF THE CHARACTER IS A                                            CURRENT ADDRESS
                               REGISTER DESIGNATOR, IT IS
D-35                                                                                        D-36


            MODIAD                                                 0379     01      A0
035F 2AF6FF LHLD CURAD ;GET CURRENT ADDRESS                        037A     02      7C
0362 EB     XCHG       ;ARG-PUT CURRENT IN D & E                   037B     03      F4
0363 CD6C02 CALL HXDSP ;EXPAND CURRENT ADDRESS FOR                 037C     04      A6
                       DISPALY. ARG-ADDRESS OF                     037D     05      D6
                       EXPANDED ADDRESS IS IN H & L                037E     06      DE
0366 AF     XRA A      ;ARG-USE ADDRESS FIELD OF                   037F     07      B0
                       DISPLAY                                     0380     08      FE
0367 CDB702 CALL OUTPT ;OUTPUT CURRENT ADDRESS TO                  0381     09      B6
                       ADDRESS FIELD                               0382     0A      BE
036A C9     RET                                                    0383     0B      CE
                                                                   0384     0C      5A
        ********************************************************   0385     0D      EC
        FUNCTION : MODIDT - UPDATE DATA FIELD OF DISPLAY           0386     0E      5E
        INPUTS : B - DOT FLAG - 1 MEANS PUT DOT AT RIGHT OF        0387     0F      1E
                        FIELD                                      0388     H       AE
                       0 MEANS NO DOT                              0389     L       4A
        OUTPUTS : NONE                                             038A     P       3E
        CALLS : HXDSP,OUTDT                                        038B I   A0
        DESTROYS : A, B, C, D, E, H, L, F/F, S                     038Cr    0C
        DESCRIPTION :               UPDDT UPDATES THE DATA FIELD   038D     BLANK   00
                                    OF THE DISPLAY                 038E     n       8C
                                    USING THE CURRENT DATA BYTE    038F     U       EA
                 UPDDT:                                            0391     h       8E
036B   3AF8FF LDA CURDT ;GET CURRENT DATA                          0391     G       DA
036E   57        MOV D, A           ;ARG-PUT CURRENT DATA IN D     0392     J       E0
036F   CD6C02 CALL HXDSP ;EXPAND CURRENT DATA FOR                  0393     y       E6
                                    DISPLAY. ARG-ADDRESS OF        0394     O       CC
                                    EXPANDED DATA IS IN H & L.     0395     3E46    4(19)
0372   3E01      MVI A, DTFLD ;ARG-USE DATA FIELD OF DISPLAY       0397     01FF
                                    ARG-DOT FLAG IS IN B           0399     01FF
0374   CDB702 CALL OUTPT ;OUTPUT CURRENT DATA TO DATA
                                    FIELD
0377   C9                           RET
0378   00        FA
D-37                                                               D-38


               MESSAGES FOR OUTPUT TO DISPLAY                      03B0   0C          DB   12        :PCL
039A 15        BLANKS     DB BLANK, BLANK, BLANK, BLANK            03B1   07          DB   7         :H
                          ;FOR ADDRESS OR DATA FIELD.              03B2   08          DB   8         :L
039B   15                                                          03B3   00          DB   0         :A
039C   15                                                          03B4   01          DB   1         :B
039D   15                                                          03B5   02          DB   2         :C
039E   15      ERMSG             DB BLANK, LETRE, LETRR, LETRR     03B6   03          DB   3         :D
                                 ;ERROR MESSAGE FOR ADDRESS        03B7   04          DB   4         :E
                                 FIELD                             03B8   05          DB   5         :FLAGS
039F 0E
03A0 14                                                                ********************************************************
03A1 14        EXMSG             DB LETRE, BLANK, BLANK, BLANK         NMTBL : REGISTER NAME TABLE
                                 ;EXECUTION MESSAGE                             : NAMES OF REGISTER IN DISPLAY FORMAT
03A2   0E                                                          03B9 15                         DB BLANK, BLANK, BLANK, LETRA
03A3   15                                                                                          ;A REGISTER
03A4   15                                                          03BA 15
03A5   15                                                          03BB 15
03A6   0F      SGNAD             DB F r I E                        03BC 0A
                                 ;SIGN ON MESSAGE                  03BD 15                         DB BLANK, BLANK, BLANK, LETRB
                                 (ADDR. FIELD)                                                     ;B REGISTER
03A7   14                                                          03BE 15
03A8   13                                                          03BF 15
03A9   0E                                                          03C0 0B
03AA   16      SGNDT             DB n d                            03C1 15                         DB BLANK, BLANK, BLANK, LETRC
                                 ;SIGN ON MESSAGE(DATA FIELD)                                      ;C REGISTER
                                                                   03C2 15
        ********************************************************   03C3 15
        RGPTB REGISTER POINTER TABLE                               03C4 0C
                 :THE ENTRIES IN THIS TABLE ARE IN THE SAME        03C5 15                         DB BLANK, BLANK, BLANK, LETRD
                 ORDER AS                                                                          ;D REGISTER
                 THE REGISTER DESIGNATOR KEYS ON THE               03C6 15
                 KEYBOARD EACH                                     03C7 15
                 ENTRY CONTAINS THE REGISTER POINTER VALUE         03C8 0D
                 WHICH CORROSPONDS TO THE REG.                     03C9 15                         DB BLANK, BLANK, BLANK, LETRE
                 DESIGNATOR. REGISTER POINTER VALUES ARE                                           ;E REGISTER
                 USED TO POINT INTO THE REGISTER NAME TABLE        03CA 15
                 (NMTBL) AND REGISTER SAVE LOCATION TABLE          03CB 15
                 (RGTBL).                                          03CC 0E
                                                                   03CD 15                         DB BLANK, BLANK, BLANK, LETRF
03AC   06              DB   6          :INTERRUPT MASK                                             ;F REGISTER
03AD   09              DB   9          :SPH                        03CE 15
03AE   0A              DB   10         :SPL                        03CF 15
03AF   0B              DB   11         :PCH                        03D0 0F
D-39                                        D-40

03D1 15      DB BLANK, BLANK, BLANK, LETRI
             ;INTERRUPT MASK                        *************************************************
03D2    15                                          REGISTER SAVE LOCATION TABLE
03D3    15                                          ADDRESSES OF SAVE LOCATIONS OF REGISTERS IN THE
03D4    13                                          ORDER IN WHICH THE REGISTERS ARE DISPLAYED BY
03D5    15   DB BLANK, BLANK, BLANK, LETRH          THE EXAMINE COMMAND
             ;H REGISTER
03D6    15                                       RGTBL
03D7    15                                   03ED EE   DB    ASAV AND OFFH         ;A REGISTER
03D8    10                                   03EE EC   DB    BSAV AND OFFH         ;B REGISTER
03D9    15   DB BLAMK, BLANK, BLANK, LETRL   03EF EB   DB    CSAV AND OFFH         ;C REGISTER
             ;L REGISTER                     03F0 EA   DB    DSAV AND OFFH         ;D REGISTER
03DA    15                                   03F1 E9   DB    ESAV AND OFFH         ;E REGISTER
03DB    15                                   03F2 ED   DB    FSAV AND OFFH         ;FLAGS
03DC    11                                   03F3 F1   DB    ISAV AND OFFH         ;INTERRUPT MASK
03DD    15   DB BLANK, LETRS, LETRP, LETRH   03F4 F0   DB    HSAV AND OFFH         ;H REGISTER
             ;STACK POINTER HIGH ORDER       03F5 EF   DB    LSAV AND OFFH         ;L REGISTER
             BYTE                            03F6 F5   DB    SPHSV AND OFFH        ;STACK POINTER
03DE    05                                                                         HIGH ORDER BYTE
03DF    12                                   03F7 F4      DB SPLSV AND OFFH        ;STACK POINTER
03E0    10                                                                         LOW ORDER BYTE
03E1    15   DB BLANK, LETRS, LETRP, LETRL   03F8 F3      DB PCHSV AND OFFH        ;PROGRAM
             ;STACK POINTER LOW ORDER BYTE                                         COUNTER HIGH
03E2    05                                                                         ORDER BYTE
03E3    12                                   03F9 F2      DB OCKSV AND IFFG        ;PROGRAM
03E4    11                                                                         COUNTER LOW
03E5    15   DB BLANK, LETRP, LETRC, LETRH                                         ORDER BYTE
             ;PROGRAM COUNTER HIGH BYTE      000D NUMRG         EQU ($ - RGTBL)    ;/REGISTER SAVE
03E6    12                                        TABLE                            LOCATION NUMBER
03E7    0C                                                                         OF ENTRIES.
03E8    10
03E9    15   DB BLANK, LETRP, LETRC, LETRL
             ;PROGRAM COUNTER LOW BYTE
03EA 12
03EB 0C
03EC 11
D-41                                                                                                                   D-42


       *********************************************                040C 0E2E         MVI C,'.'    ;PROMPT CHARCHTER TO C
                          TTY                                       040E CDF805       CALL ECHO    ;SEND PROMPT CHARATER
                PRINT SIGNON MESSAGE                                                               TO USER TERMINAL
       *********************************************                0411   C31404     JMP GTC03    ;WANT TO LEAVE ROOM FOR
                                                                                                   RST BRANCH
03FA    218C07           SIGNON            LXIH STRING              0414   CD1F06     GTC03 CALL GETCH ;GET COMMAND
   D    4E               S1                MOVC, M                                                 CHARATER TO A
   E    AF               XRAA                                       0417 CDF805       CALL ECHO    ;ECHO CHARCTER TO USER
   F    B1               ORAC                                       041A 79           MOV A, C     ;PUT COMMAND CHARCTER
                                                                                                   INTO ACC.
0400   C8                RZ                                         041B 010600       LXI B, NCMDS ;C CONTAINS LOOP AND
   1   CDC405            CALLC OUT                                                                 INDEXCOUNT
   4   23                INX H                                      041E 21AE07       LXI H, CTAB ;HL POINTS INTO COMMAND
0405   C3FD03            JUMP S1                                                                   TABLE
                                                                    0421   BE         GTC05 CMP M ;COMPARE TABLE ENTRY
    *************************************************************                                  AND CHARATER
             COMMAND RECOGNIZING ROUTINE                            0422   CA2D04     JZ GTC10     ;BRANCH IF EQUAL –
    *************************************************************                                  COMMAND RECOGNIZED
    FUNCTION : GETCM                                                0425   23         INX H        ;ELSE,INCREMENT TABLE
    INPUTS : NONE                                                                                  POINTER
    OUTPUTS : NONE                                                  0426   0D         DCR C        ;DECREMENT LOOP COUNT
    CALLS : GETCH, ECHO, ERROR                                      0427   C22104     JNZ GTC05    ;BRANCH IF NOT AT TABLE
    DESTROYS : A, B, C, H, L, F/F'S                                                                END
    DESCRIPTION :               GETCM RECEIVES AN INPUT             042A C31106       JMP ERROR ;ELSE COMMAND
                                CHARATER FROM THE USER                                             CHARACTER IS ILLEGAL
                                AND USER AND ATTEMPTS TO
                                LOCATE THIS CHARATER IN ITS         042D 21A007 GTC10 LXI H, CADR ;IF GOOD COMMAND. LOAD
                                COMMAND CHARATER TABLE. IF                                        ADDRESS OR TABLE OF
                                SUCCESSFUL,THE ROUTINE                                            COMMAND ROUTINE
                                CORROSPONDING TO THIS IS                                          ADDRESSES
                                SELECTED FROM A TABLE OF            0430 09          DAD B        ;ADD WHAT IS LEFT OF
                                COMMAND ROUTINE ADDRESSES,                                        LOOP COUNT
                                AND CONTROL IS TRANSFERED TO        0431 09          DAD B        ;ADD AGAIN -EACH ENTRY IN
                                THIS ROUTINE. IF THE CHARATER                                     CADR IS 2 BYTES LONG
                                DOES NOT MATCH ANY                  0432 7E          MOV A, M     ;GET LSP OF ADDRESS OF
                                ENTRIES,CONTROL IS PASSED TO                                      TABLE ENTRY TO A
                                THE ERROR HANDLER.                  0433 23          INX H        ;POINT TO NEXT BYTE IN
                      GETCM                                                                       TABLE
0408 21E9FF           LXI H, MNSTK ;ALWAYS WAMT TO RESET            0434 66          MOV H, M     ;GET MSP OF ADDRESS OF
                                         STACK PTR TO MONITOR                                     TABLE ENTRY TO H
040B F9               SPHL               ;STARTING VALUE SO
                                         ROUTINE NEED NOT CLEAN
                                         UP
D-43                                                                                                            D-44


0435   6F             MOV L, A       ;PUT LSP OF ADDRESS OF         044F CDC706      CALL NMOUT   ;DISPLAY CONTENTS
                                     TABLE ENTRY IMTO L             0452 CDA006      CALL HILO    ;SEE IF ADDRESS OF
0436   E9             PCHL           ;NEXT INSTRUCTION COMES                                      DISPLAY LOC.
                                     FROM COMMAND ROUTINE                                         IS GREATER THAN
                                                                                                  OR EQUAL TO
  ***************************************************************                                 ENDING ADDRESS
        COMMAND IMPLEMENTING ROUTINES                                           FALSE DCM15       ;IF NOT ,MORE TO
  ***************************************************************                                 DISPLAY
        FUNCTION : DCMD                                             0455 D25E04      JNC DCM15
        INPUTS : NONE                                               0458 CDEB05      CALL CROUT   ;CARRIGE
        OUTPUTS : NONE                                                                            RETURN/LINE FEED
        CALLS : ECHO, NMOUT, HILO, GETCM,CROUT, GETNM                                             TO END LINE
        DESTROYS : A, B, C, D, E, H, L, F/F'S                       045B C30804     JMP GETCM     ;ALL DOME
        DESCREPTION :               DCMD IMPLEMENTS THE DISPLAY     045E 23   DCM15 INX H         ;IF MORE TO GO,
                                    MEMORY (D) COMMAND                                            POINTS TO THE NEW
                                                                                                  DISPLAY
              DCMD                                                  045F 7D          MOV A,L      GET LOW ORDER
 0437 0E02            MVI C, 2       ;GET 2 NUMBERS FROM                                          BITS OF NEW
                                     INPUT STREAM                                                 ADDRESS
 0439 CD5B06      CALL GETNM                                        0460 E60G        ANI NEWLN    ;SEE IF LAST HEX
 043C D1          POP D      ;ENDING ADDRESS TO DE                                                DIGIT OR ADDRESS
 043D E1          POP H      ;STARTING ADDRESS TO HL                                              DENOTES START OF
            DCMO5                                                                                 NEWLINE
 043E CDEB05      CALL CROUT ;ECHO CARRIAGE                         0462 C24904      JNZ DCM10    ;NO-DOT AT END OF
                             RETURN/LINE FEED                                                     LINE
 0441 7C          MOV A, H   ;DISPLAY ADDRESS OF                    0465 C33E04      JMP DCM05    ;YES-START NEW
                             FIRST LOCATION IN LINE                                               LINE WITH ADDRESS
 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-45                                                                                                                                      D-46


  *******************************************************************************       *****************************************************
         FUNCTION : GCMD                                                                FUNCTION : ICMD
         INPUTS : NONE                                                                  INPUTS : NONE
         OUTPUTS : NONE                                                                 OUTPUTS : NONE
         CALLS : ERROR, GETHX, RSTTF                                                    CALLS : ERROR, ECHO, GETCH, VALDL, VALDG, CNVBN,
         DESTROYS : A, B, C, D, E, H, L, F/F'S                                                    STHLF, GETNM, GROUT
         DESCRIPTION :               GCMD IMPLEMENTS THE BEGIN                          DESTROYS : A, B, C, D, E, H, L, F/F'S
                                     EXECUTION (G) COMMAND                              DESCRIPTION :               ICMD IMPLEMENTS THE INSERT
                                                                                                                    MODE INTO MEMORY
0468 CD2606       GCMD CALL GETHX ;GET ADDRESS(IF PRESENT)                                                (I) COMMAND
                                      FROM INPUT STREAM
                  FALSE GCM05                                                       0468 0E01 ICMD           MVI C, 1
046B   D27D04     JNC GCM05   ;BRANCH IF NO NU. PRESENT                             0488 CD5B06              CALL GETNM    ;GET SINGLE NU.
046E   7A         MOV A, D    ;ELSE GET TERMINATOR                                                                         FROM INPUT
046F   FE0D       CPI CR      ;SEE IF CARRIAGE RETURN                                                                      STREAM
0471   C21106     JNZ ERROR ;ERROR IF NOT PROPERLY                                  048B 3EFF               MVI A, UPPER
                              TERMINATED                                            048D 32FDFF             STA TEMP     ;TEMP WILL HOLD
0474 21F2FF       LXI H, PSAV ;WANT NU. TO REPLACE SAVE 1/4                                                              THE UPPER/LOWER
                              PGM COUNTER                                                                                HALF BYTE FLAG
0477   71         MOV M, C                                                          0490 D1                 POP D
0478   23         INX H                                                             0491 CD1F06       ICM05 CALL GETCH ;GET A CHAR. FROM
0479   70         MOV M, B                                                                                               INPUT STREAM
047A   C38304     JMP GCM10                                                         0494 4F                 MOV C, A
047D   7A         GCM05 MOV A, D      ;IF NO STARTING ADDRESS                       0495 CDF805             CALL ECHO    ;ECHO IT
                                      MAKE SURE THATCR                              0498 79                 MOV A, C     ;PUT CAHR. BACK
                                      TERMINATED COMMAND                                                                 INTO A
047E FE0D         CPI CR                                                            0499 FE1B               CPI TERM     ;SEE IF CHAR.IS A
0480 C21106       JNZ ERROR           ;ERROR IF NOT                                                                      TERMINATING
0483 C31B03       GCM10 JMP RSTOR ;RESTORE REG. AND BEGIN                                                                CHARACTER
                                      EXECUTION (RSTOR IS IN                        049B CAC704             JZ ICM25     ;IF SO ALL DONE
                                      KEYBOARD MONITOR)                                                                  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
D-47                                                                                                            D-48


04A7   D2C104     JNC ICM20                                              MCMD
04AA   CD100A     CALL CNVBN ;CONVERT DIGIT TO BINARY          04D0 0E03             MVI C, 3
04AD   4F         MOV C, A   ;MOVE RESULT TO C                 04D2 CD5B06    CALL GETNM ;GET 3 NUMBERS FROM
04AE   CD3F07     CALL STHLF ;STORE IN APPROPRIATE                                          INPUT STREAM
                             HALF WORD                         04D5 C1        POP B         ;DESTINATION ADDR. TO BC
04B1 3AFDFF       LDA TEMP   ;GET HALF BYTE FLAG               04D6 E1        POP H         ;ENDING ADDR. TO HL
04B4 B7           ORA A      ;SET F/F'S                        04D7 D1        POP D         ;STARTING ADDR TO DE
04B5 C2B904       JNZ ICM10  ;BRANCH IF FLAG SET FOR           04D8 E5 MCM05 PUSH H         ;SAVE ENDING ADDRESS
                             UPPER                             04D9 62        MOV H, D
04B8 13           INX D      ;IF LOWER ,INC ADDRESS OF         04DA 6B        MOV L, E      ;SOURCE ADDR. TO HL
                             BYTE TO STORE IN                  04DB 7E        MOV A, M      ;GET SOURCE BYTE
04B9 EEFF   ICM10 XRI INVERT ;TOGGLE STATE OF FLAG             04DC 60        MOV H, B
04BB 32FDFF       STA TEMP   ;PUT NEW VALUE OF FLAG            04DD 69        MOV L, C      ;DESTINATION ADDR. TO HL
                             BACK                              04DE 77        MOV M, A      ;MOVE BYTE TO
04BE C39104       JMP ICM05  ;PROCESS NEXT DIGIT                                            DESTINATION
04C1 CD3407 ICM20 CALL STHFO ;ILLEGAL CHARACTER                04DF 03        INX B         ;INR. DESTINATION
04C4 C31106       JMP ERROR ;MAKE SURE ENTIRE BYTE                                          ADDRESS
                             FILLED THEN ERROR                 04E0 78        MOV A, B
04C7 CD3407 ICM25 CALL STHF0 ;HERE FOR ESCAPE                  04E1 B1        ORA C         ;TEST FOR DESTINATION
                             CHARACTER I/P IS DONE                                          ADDR
04CA CDEB05       CALL CROUT ;ADD CARRIAGE RETURN              04E2 CA0804    JZ GETCM      ;IF SO CAN TERMINATE CMD.
04CD C30804       JMP GETCM                                    04E5 13        INX D         ;INCREMENT SIURCE
                                                                                            ADDRESS
        ****************************************************   04E6 E1        POP H         ;ELSE GET BACKENDING
        FUNCTION : MCMD                                                                     ADDR
        INPUTS : NONE                                          04E7 CDA006    CALL HILO     ;SEE IF ENDING
        OUTPUTS : NONE                                                                      ADDR=SOURCE ADDR
        CALLS : GETCM, HILO, GETNM                                                          FALSE GETCM ;IF NOT
        DESTROYS : A, B, C, D, E, H, L, F/F'S                                               COMMAND IS DONE
        DECRIPTION : MCMD IMPLEMENTS THE MOVE DATA IN          04EA D20804    JNC GETCM
        MEMORY(M) COMMAND                                      04ED C3D804    JMP MCM05 ;MOVE ANOTHER BYTE
D-49                                                                                                                         D-50


          ****************************************************           *********************************************************
          FUNCTION : SCMD                                                FUNCTION : XCMD
          INPUTS : NONE                                                  INPUTS : NONE
          CALLS : GETHX, GETCM, NMOUT, ECHO                              OUTPUTS : NONE
          DESTROYS : A, B, C, D, E, H, L, F/F/'S                         CALLS : GETCH, ECHO, REGDS, GETCM, ERROR, RGADR,
          DESCRIPTION :               SCMD IMPLEMENTS THE                           NMOUT, CROUT, GTHEX
                                      SUBSTITUTE INTO MEMORY             DESTROYS : A, B, C, D, E, H, L, F/F'S
                                      (S) COMMAND                        DESCRIPTION :               XCMD IMPLEMENTS THE REGISTER
                                                                                                     EXAMINE AND CHANGE (X)
                       SCMD                                                                          COMMAND.
04F0 CD2606      CALL GETHX             ;GET A NUMBER IF
                                        PRESENT, FROM INPUT       0514 CD1F06          XCMD CALL GETCH ;GET REGISTER
04F3 C5          PUSH B                                                                                INDENTIFIER
04F4 E1          POP H                  ;GET NU. TO HL-DENOTES    0517   4F            MOV C, A
                                        MEMORY LOCATION           0518   CDF805        CALL ECHO       ;ECHO IT
04F5 7A          SCM05 MOV A, D         ;GET TERMINATOR           051B   79            MOV A, C
04F6 FE20        CPI '.'                ;SEWE IF SPACE            051C   FE0D          CPI CP
04F8 CA0005      JZ SCM10               ;YES CONTINUE             051E   C22705        JNZ XCM05       ;BRANCH IF
                                        PROCESSING                                                     NOTCARRIAGE RET
04FB FE2C        CPI '.'                ;ELSE SEE IF COMMA        0521 CDEA06          CALL REGDS      ;ELSE,DISPLAY
04FD C20804      JNZ GWTCM              ;NO TERMINATE COMMAND                                          REG.CONTENTS
0500 7E          SCM10 MOV A, M         ;GET CONTENTS OF          0524 C30804          JMP GETCM       ;THEN TERMINATE
                                        SPECIFIED LOCATION TO A                                        COMMAND
0501 CDC706      CALL NMOUT             ;DISPLAY CONTENTS ON      0527 4F              XCM05 MOV C, A  ;GET REG.IDENTIFIER
                                        CONSOLE                                                        TO C
0504 0E2D        MVI C,'.'                                        0528 CD1B07          CALL RGADR      ;CONVERT
0506 CDF805      CALL ECHO           ;USE DASH FOR SEPARATOR                                           IDENTIFIER INTO
0509 CD2606      CALL GETHX          ;USE NEW VALUE FOR                                                RTAB TABLE ADDR
                                     MEMORY LOCATION IF ANY       052B C5              PUSH B
                 FALSE SCM15 ;IF NO VALUE PRESENT,BRANCH          052C E1              POP H           ;PUT POINTER TO
050C D21005      JNC SCM15                                                                             REGISTER ENTRY
050F 71          MOV M, C    ;ELSE,STORE LOWER 8BIT OF                                                 INTO HL
                             NUMBER ENTERED                       052D 0E20            MVI C,"
0510 23          SCM15 INX H ;INCREMENT ADDR. OF MEMORY           052F CDF805          CALL ECHO       ;ECHO SPACE TO
                             LOCATION TO VIEW                                                          USER
0511 C3F504      JMP SCM05                                        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
D-51                                                                                                      D-52


                                                        0563   7E        MOV A, M
0540 C20804      JNZ GETCM   ;NO-MUST BE CARRIAGE       0564   CDC706    CALL NMOUT        ;DISPLAY THEM
                             RETURN TO AN END           0567   0E2D      XCM20 MVI C,'-'
                             COMMAND                    0569   CDF805    CALL ECHO         ;USE DASH AS
0543 73          XCM15 MOV A, M                                                            SEPARATOR
0544 B7          ORA A       ;SET F/F'S                 056C CD2606      CALL GETHX        ;SEE IF THERE IS A
0545 C24E05      JNZ XCM16   ;BRANCH IF NOT AT END OF                                      VALUE TO PUT
                             TABLE                                                         INTO REGISTER
0548 CDEB05 CALL CROUT       ;ELSE O/P CARIAGE RETURN                    FALSE XCM30       ;NO GO
                             LINE FEED                                                     CHECKFORNEXT
054B C30804      JMP GETCM ;AND EXIT                                                       REG.
054E E5          XCM18 PUSH H ;PUT POINTER ON           056F D28705      JNC XCM30
                                STACK                   0572 7A          MOV A, D
054F 5E          MOV E, M                               0573 32FDFF      STA TEMP          ;ELSE SAVE THE
0550 16FF        MOV D, RAMST SHR 8 ;ADDRESS OF SAVE                                       TERMINATOR FOR
                                     LOCATION FROM                                         NOW
                                     TABLE              0576 F1          POP PSW           ;GET BACK LENGTH
0552 23          INX H                                                                     FLAG
0553 46          MOV B, M    ;FETCH LENGTH FLAG EROM    0577 E1          POPH              ;PUT ADDR.OFSAVE
                             TABLE                                                         LOCATION INTO HL
0554 D5          PUSHD       ;SAVE ADDR.OF SAVE         0578 B7          ORA A             ;SET F/F'S
                             LOCATION                   0579 CA7E05      JZ XCM25          ;IF 8 BIT REG,
0555 D5          PUSH D                                                                    BRANCH
0556 E1          POP H       ;MOVE ADDRESSS TO HL       057C 70          MOV M, B          ;SAVE UPPER 8 BITS
0557 C5          PUSH B      ;SAVE LENGTH FLAG          057D 2B          DCX H             ;POINT TO SAVE
0558 7E          MOV A, M    ;GET 8 BITS OF REG FROM                                       LOCATION FOR
                             SAVED LOCATION                                                LOWER 8 BITS
0559 CDC706      CALL NMOUT ;DISPLAY IT                 057E 71          XCM25 MOV M, C    ;STORE ALL OF 8 BIT
055C F1          POP PSW     ;GET BACK LENGTH FLAG                                         OR LOWER 1/2 OF 16
055D F5          PUSH PSW    ;SAVE IT AGAIN                                                BIT REG.
055E B7          ORA A       ;SET F/F'S                 057F 110300 XCM27 LXI D, RTABS     ;SIZE OF ENTRY
055F CA6705      JZ XCM20    ;IF8BIT REG.NOTHING TO                                        INRTAB TABLE
                             DISPLAY
0562 2B          DCX H       ;ELSE FOR 16 BIT REG.GET   0582 E1          POP H             ;POINTER INTO
                             LOWER 8 BITS                                                  REG.TABLE RTAB
D-53                                                                                                                             D-54


0583   19        DAD D       ;ADD ENTRY SIZE TO POINTER               05B1   05                   DCR B
0584   C33605    JMP XCM10   ;DO NEXT REGISTER                        05B2   CABC05               JZ CI5
0587   7A        XCM30 MOV A, D ;GET TERMINATOR                       05B5   79                   MOV A, C
0588   32FDFF    STA TEMP    ;SAVE IN MEMORY                          05B6   1F                   RAR
058B   D1        POP D       ;CLEAR STACK OF LENGTH FLAG              05B7   4F                   MOV C, A
058C   D1        POP D       & ADDR. OF SAVE LOCATION                 05B8   00                   NOP
058D   C37F05    JMP XCM27   ;GO INCREMENT REG. TABLE                 05B9   C3A405               JMP CI3
                             POINTER                                  05BC   E1            CI5    POP H
                                                                      05BD   FB                   EI
        ********************************************************      05BE   79                   MOV A, C
                          UTILITY ROUTINE                             05BF   C9FFFF               JMP 3PASS
                                                                      05C2   FF                   BLANK
        ********************************************************      05C3   FF                   BLANK
        FUNCTION : CI
        INPUTS : NONE                                                        ****************************************************
        OUTPUTS : A - CHARACTER FROM TTY                                     FUNCTION : CO
        CALLS : DELAY                                                        INPUTS : C-CHARACTER TO OUTPUT TO TTY
        DESTROYS : A, F/F'S                                                  OUTPUTS : C-CHARACTER OUTPUT TO TTY
        DESCRIPTION :               CI WAITS UNTIL A CHAR. HAS BEEN          CALLS : DELAY
                                    ENTERED AT THE TTY AND THEN              DESTROYS : A, F/F'S
                                    RETURNS THE CHAR. VIA THE A              DESCRIPTION :               CO-SENDS ITS INPUT ARGUMENT
                                    REG. TO THE CALLING ROUTINE.                                         TO THE TTY.
                                    THIS ROUTINE IS CALLED BY THE
                                    USER VIA A JUMP TABLE IN RAM                   C0
                 CI                                                   05C4    F3                  DI
0590    F3                          DI                                05C5    C5                  PUSH B
0591    E5                          PUSH H                            05C6    E5                  PUSH H
0592    0609                        MVI B, BITS                       05C7    060B                MVI B, BITS0
0594    20                CI1       RIM                               05C9    AF                  XRA A
0595    B7                          ORA A                             05CA    3E80         CO1    MVI A, 80H
0596    FA9405                      JM CI1                            05CC    1F                  RAR
0599    2A9AFF                      CHLD HALFBIT                      05CD    30                  SIM
059C    2D                 CI2      DCR L                             05CE    2AC0FF              LHLD BITTIME
059D    C29C05                      JNZ CI2                           05D1    2D           CO2    DCR L
05A0    25                          DCR H                             05D2    C2D105              JNZ CO2
05A1    C29C05                      JNZ CI2                           05C5    25                  DCR H
05A4    2AC0FF            CI3       LHLD BITTIMC                      05C6    C2D105              JNZ CO2
05A7    2D                 CI4      DCR L                             05C9    37                  STC
05A8    C2A705                      JNZ CI4                           05CA    79                  MOV A, C
05AB    25                          DCR H                             05CB    1F                  RAR
05AC    C2A705                      JNZ CI4                           05CC    4F                  MOV C, A
05AF    20                          RIM                               05CD    05                  DCR B
05B0    17                          RAL                               05CE    2CA05               JNZ CO1
D-55                                                                                                                         D-56


05E1    E1                    POP H                                  ********************************************************
05E2    C1                    POP B                                   FUNCTION : DELAY
05E3    FB                    EI                                      INPUTS : DE - 16BIT INT.DENOTING NUMBER OF TIMES TO
05E4    C9                    RET                                                       LOOP.
05E5    FF                    BLANK                                   OUTPUTS : NOTHING
05E6    FF                    BLANK                                   DESTROYS : A, D, E, F/F'S
05E7    FF                    BLANK                                   DESCRIPTION :              DELAY DOES NOT RETURN TO
05E8    FF                    BLANK                                                              CALLER UNTIL INPUT ARGUMENT IS
05E9    FF                    BLANK                                                              COUNTED DOWN TO 0.
05EA    FF                    BLANK
                                                                                       DELAY
       ********************************************************   05F1    1B                   DCX D ;DECREMENT INPUT ARG.
       FUNCTION : CROUT                                           05F2    7A                   MOV A, D
       INPUTS : NONE                                              05F3    B3                   ORA E
       OUTPUTS : NONE                                             05F4    C2F105               JNZ DELAY   ;IF ARG NOT 0,KEEP
       CALLS : ECHO                                                                                        GOING
       DESTROYS : A, B, C, F/F'S                                  05F7 C9                      RET
       DESCRIPTION :               CROUT SENDS A CARRIAGE
                                   RETURN AND HENCE A                    ********************************************************
                                   LINE FEED TO THE CONSOLE.             FUNCTION : ECHO
                                                                         INPUTS : C - CHARACTER TO ECHO TO TERMINAL
                      CROUT                                              OUTPPUTS : C - CHARACTER ECHOED TO TERMINAL
05EB 0E0D                     MVI C, CR                                  CALLS : CO
05ED CDF805                   CALL ECHO                                  DESTROYS : A, B, F/F'S
05F0 C9                       RET                                        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
D-57                                                                                                                               D-58


05FB B8              CMP B       ;SEE IF ECHOING AN                    ********************************************************
                                 ESCAPE CHARACTER                      FUNCTION : FRET
05FC C20106          JNZ ECHO5   ;NO BRANCH                            INPUTS : NONE
05FF 0E24            MVI C, '$'  ;YES ECHO AS $                        OUTPUTS : CARRY-ALWAYS 0
0601 CDC405          ECHO5 CALL CO ;DO OUTPUT THRO'                    CALLS : NOTHING
                                 MONITOR                               DESTROYS : CARRY
0604   3E0D          MVI A, CR                                         DESCRIPTION :               FRET IS JUMPED TO BY ANY
0606   B8            CMP B       ;SEE IF CHAR. ECHOED WAS                                          ROUTINE THET WISHES TO
                                 A CARRIAGE RETURN                                                 INDICATE FAILURE ON RETURN.
0607   C20F06        JNZ ECH10   ;NO-NO NEED TO TAKE                                               FRET SETS THE CARRY FALSE
                                 SPECIAL ACTION                                                    DENOTING FAILURE & THEN
060A 0E0A            MVI C, LF   ;YES-WANT TO ECHO                                                 RETURN TO THE CALLER OF THE
                                 LINEFEED                                                          ROUTINE INVOKINK FRET.
060C CDC405          CALL CO                                                             FRET
060F 48              ECH10 MOV C, B ;RESTORE                       061C 37               STC       ;SET CARRY TRUE
                                 ARGUMENT                          061D 3F               CMC ;THEN COMPLEMENT TO MAKE IT
0610   C9            RET                                                                           FALSE
                                                                   061E C9               RET       ;RETURN APPROPRIATLY
       ********************************************************
       FUNCTION : ERROR                                                 ********************************************************
       INPUTS : NONE                                                    FUNCTION : GETCH
       OUTPUTS : NONE                                                   INPUTS : NONE
       CALLS : ECHO, CROUT, GETCM                                       OUTPUTS : C - NEXT CHAR. IN INPUT STREAM
       DESTROYS : A, B, C, F/F'S                                        CALLS : CI
       DESCRIPTION :               ERROR PRINTS THE                     DESTROYS : A, C, F/F'S
                                   ERRORCHARACTER (CURRENTLY            DESCRIPTION :               GETCH RETURNS THE NEXT CHAR.
                                   AN ASTERISK) ON THE CONSOLE                                      IN THE INPUT STREAM TO THE
                                   FOLLOWED BY A CR LF, AND THEN                                    CALLING PROGRAM.
                                   RETURNS CONTROL TO THE                                 GETCH
                                   COMMAND RECOGNISER.             061F CD9005                      CALL CI           ;GET CHAR. FROM
                         ERROR                                                                                        TERMINAL
0611   OE2A              MVI C,'*'                                 0622 E67F                        ANI PRTY0         ;TURN OFF PARITY
0613   CDF805            CALL ECHO          ;SEND '*' TO                                                              BIT IN CASE SET BY
                                            CONSOLE                                                                   CONSOLE
0616   CDEB05            CALL CROUT ;SKIP TO BEGINING OR NEXT      0624 4F                          MOV C, A          ;PUT VALUE IN C
                                            LINE                                                                      REG.FOR
0619   C30804            JMP GETCM ;TRY AGAIN FOR ANOTHER          0625 C9                          RET               ;RETURN
                                            COMMAND
D-59                                                                                                                      D-60


       ********************************************************      062A 1E00          MVI E, 0      ;INITIALIZE DIGIT FLAG TO
       FUNCTION : GETHX                                                                               FALSE
       INPUTS : NONE                                                 062C   CD1F06      GTH05 CALL GETCH ;GET A CHARACTER
       OUTPUT : SBC - 16 BIT INTEGER                                 062F   4F          MOV C, A
                    D - CHAR. WHICH TERMINATED THE INTEGER           0630   CDF805      CALL ECHO     ;ECHO THE CHARACTER
                   CARRY - 1 IF FIRST CHAR NOT DELIMITER             0633   CD7907      CALL VALDL ;SEE IF DELIMITER
                             - 0 IF FIRST CHAR. IS DELIMITER                            FALSE GHX10 ;NO BRANCH
       CALLS : GETCH, ECHO, VALDL, VALDG, CNVBN, ERROR               0636 D24506        JNC GTX10
       DESTROYS : A, B, C, D, E, F/F'S                               0639 51            MOV D, C      ;YES-ALL DONE,BUT WANT
       DESCRIPTION :               GETHX ACCEPTS A STRING OF HEX                                      TO RETURN DELIMITER
                                   DIGITS FROM THE INPUT STREAM      063A   E5          PUSH H
                                   & RETURNS THEIR VALUE AS A        063B   C1          POP B         ;MOVE RESULT TO BC
                                   16 BIT BINARY INTEGER.IF MORE     063C   E1          POP H         ;RESTORE HL
                                   THAN 4 HEX DIGITS ARE ENTERED,    063D   7B          MOV A, E      ;GET FLAG
                                   ONLY THE LAST 4 ARE USED THE      063E   B7          ORA A         ;SET F/F'S
                                   NUM. TERMINATES WHEN A VALID      063F   C23207      JNZ SRET      ;IF FLAG NONE-0ANUM.HAS
                                   DELIMITER IS ENCOUNTERED.                                          BEEN FOUND
                                   THE DELIMITER IS ALSO RETURNED    0642 CA1C06        JZ FRET       ;ELSE DELIMITER WAS FIRST
                                   AS AN OUTPUT OF THE                                                CHARACTER
                                   FUNCTION.ILLEGAL CHAR. (NOT       0645 CD5E07     GHX10 CALL VALDG ;IF NOT DELIMITER SEE IF
                                   HEX DIGITS OR DELIMITERS) CAUSE                                        DIGIT
                                   AN ERROR INDICATION. IF THE                             FALSE ERROR ;ERROR, IF NOT A VALID
                                   FIRST (VALID)CHARACTER                                                  DIGIT
                                   ENCOUNTERED IN THE INPUT          0648 D21106        JNC ERROR
                                   STREAM IS NOT A DELIMITER,        064B CD100A        CALL CNVBN ;CONVERT DIGIT TO ITS
                                   GETHX WILL RETURN WITH THE                                   BINARY VALUE
                                   CARRY BIT SET TO 1;OTHERWISE      064E   1EFF        MVI E, 0FFH ;SET DIGIT FLAG NON-0
                                   THE CARRY BIT IS SET TO 0 AND     0650   29          DAD H         ;*2
                                   THE CONTENTS OF BC ARE            0651   29          DAD H         ;*4
                                   UNDEFINED.                        0652   29          DAD H         ;*8
                                                                     0653   29          DAD H         ;*16
                     GETHX                                           0654   0600        MVI B, 0      ;CLEAR UPPER 8 BITS OF BC
  0626 E5            PUSH H         ;SAVE HL                                                          PAIR
  0627 210000        LXI H, 0       ;INITIALIZE RESULT               0656 4F            MOV C, A      ;BINARY VALUE OF
                                                                                                      CHARACTER INTO C
D-61                                                                                                                          D-62

                                                                        066B CA7706         JZ GNM10     ;BRANCH IF NO MORE
0657 09                DADB ;ADD THIS VALUE TO PARTIAL                                                   NUM.WANTED
                             RESULT                                     066E 7A             MOV A, D     ;ELSE GET NUM.
0658 C32C06            JMP GHX05  ;GET NEXT CHARACTER                                                    TERMINATOR TO A
                                                                        066F   FE0D         CPI CR       ;SEE IF CARRIAGE RETURN
       ********************************************************         0671   CA1106       JZ ERROR     ;ERROR IF SO TOO FEW
       FUNCTION : GETNM                                                                                  NUM.
       INPUTS : C - COUNT OF NUM. TO FIND IN INPUT STREAM               0674   C36206       JMP GNM      ;ELSE PROCESS NEXT NUM.
       OUTPUTS : TOP OF STACK-NUM.FOUND IN REVERSE                      0677   7A     GNM10 MOV A, D     ;WHEN COUNT 0,CHECK
                     ORDER (LAST ON TOP OF STACK)                                                        LAST TERMINATOR
       CALLS : GETHX, HILO, ERROR                                       0678   FE0D         CPI CR
       DESTROYS : A, B, C, D, E, H, L, F/F'S                            067A   C21106       JNZ ERROR ;ERROR IF NOT CR
       DESCRIPTION :               GETNM FINDS A SPECIFIED COUNT        067D   01FFFF       LXI B, 0FFFFH ;HL GETS LARGEST NUM.
                                   OF NUMBERS, BETWEEN 1 & 3,           0680   7D           MOV A, L      ;GET WHAT'S LEFT OF MAX.
                                   INCLUSIVE, IN THE INPUT STREAM                                         ARG COUNT
                                   AND RETURNS THEIR VALUES ON          0681   B7           ORA A         ;CHECK FOR 0
                                   THE STACK. IF 2 OR MORE NUM.         0682   CA8A06       JZ GNM20      ;IF YES,3 NUM WERE I/P
                                   ARE REQUESTED THEN THE FIRST         0685   C5     GNM15 PUSH B        ;IF NOT? FILL REMAINING
                                   MUST BE LESS THEN OR EQUEL TO                                          ARG WITH 0FFFFH
                                   THE SECOND, OR THE FIRST &           0686   2D           DCR L
                                   SECOND NUM. WILL BE SET EQUAL.       0687   C28506       JNZ GNM15
                                   THE LAST NUM. REQUESTED MUST         068A   C1           GNM20 POP B ;GET THE 3 ARG. OUT
                                   BE TERMINATED BY A CARRIAGE          068B   D1           POP D
                                   RETURN OR AN ERROR INDICATION        068C   E1           POP H
                                   WILL RESULT.                         068D   CDA006       CALL HILO     ;SEE IF FIRST=SECOND
                         GETNM                                                                            FALSE GNM25 ;NO BRANCH
065B   2E03              MVI L, 3           ;PUT MAX. ARG.COUNT IN L    0690   D29506       JNC GNM25
065D   79                MOV A, C           ;GET THE ACTUAL             0693   54           MOV D, H
                                            ARG.COUNT                   0694   5D           MOV E, L      ;YES-MAKE SECOND EQUAL
065E   E603              ANI 03             ;FORCE TO MAX.OF 3                                            TO THE FIRST
0660   C8                RZ                 ;IF 0,DON'T BOTHER TO ANY   0695   E3           GNM25 XTHL ;PUT FIRST ON STACK GET
0661   67                MOV H, A           ;ELSE PUTACTUALCOUNT                                          RETURN ADDR
                                            INTO                        0696   D5           PUSH D        ;PUT SECOND ON STACK
0662   CD2606 GNM05 CALL GETHX ;GET A NUM.FROM I/P                      0697   C5           PUSH B        ;PUT THIRD ON STACK
                                            STREAM                      0698   E5           PUSH H        ;PUT RETURNADDR.ON
                         FALSE ERROR ;ERROR IF NOT THERE-TOO                                              STACK
                                            FEW NUMBERS                 0699   3D     GNM30 DCR A         ;DECREMENT RESDUAL
0665   D21106            JNC ERROR                                                                        COUNT
0668   C5                 PUSH B            ;ELSE SAVE NUM.ON STACK     069A   F8           RM            ;IF NEGATIVE,PROPER
0669   2D                DCR L              ;DECREMENT                                                    RESULT ON STACK
                                            MAX.ARG.COUNT               069B   E1           POP H         ;ELSE GET RETURN ADDR
066A   25                DCR H              ;DECREMENT ACTUAL           069C   E3           XTHL          ;REPLACE TOP RESULT
                                            ARG.COUNT                                                     WITH RETURN ADDR
                                                                        069D   C39906       JMP GNM30 ;TRY AGAIN
D-63                                                                                                                           D-64


       ********************************************************   06B8    13    INX D          ;2'S COMPLEMENT OF DE TO DE
       FUNCTION : HILO                                            06B9    7D    MOV A, L
       INPUTS : DE - 16 BIT INTEGER                               06BA    83    ADD E          ;ADD HL AND DE
                  HL - 16 BIT INTEGER                             06BB    7C    MOV A, H
       OUTPUTS : CARRY - 0 IF HL < DE                             06BC    8A    ADC D      ;THIS OPERATION SETS CARRY
                                 1 IF HL => DE                                             PROPERLY
       CALLS : NOTHING                                            06BD    D1 POP D         ;RESTORE ORIGINAL DE CONT.
       DESTROYS : F/F'S                                           06BE    78   MOV A, B    ;RESTORE ORIGINAL CONT.OF A
       DESCRIPTION :               HILO COMPARES THE 2 16 BIT     06BF    C1 POP B         ;RESTORE ORIGINALCONT.OF BC
                                   INTEGERS IN BL AND DE. THE     06C0    C9 RET           ;RETURN WITH CARRY SET AS
                                   INTEGERS ARE TREATED AS                                 REQUIRED
                                   UNSIGNED NUMBERS.THE CARRY     06C1    E1   HILO5 POP H ;IF HL CONTENTS 0FFFFH,THEN
                                   BIT IS SET ACCORDING TO THE    06C2    78   MOV A, B    CARRY CAN ONLY BE SET TO 1
                                   RESULT OF THE COMPARISON.      06C3    C1   POP B       ;RESTORE ORIGINAL CONTENTS OF
                HILO                                                                       REGISTERS
06A0   C5       PUSH B             ;SAVE BC                       06C4    C33207 JMP SRET ;SET CARRY AND RETURN
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                   FUNCTION : NMOUT
06A4   B3       ORA E                                                    INPUTS : A - 8 BIT INTEGER
06A5   CAC106 JZ HILO5             ;WE'RE AUTOMATICALLY DONE             OUTPUTS : NONE
06A8   23       INX H              IF HL IS INCREMENTED BY 1             CALLS : ECHO, PRVAL
06A9   7C       MOV A, H           ;WANT TO TEST FOR 0                   DESTROYS : A, B, C, F/F'S
06AA   B5       ORA L              RESULT AFTER INCREMENTING             DESCRIPTION :               NMOUT CONVERTS THE 8
06AB   CAC106 JZ HILO5             ;IF SOHL MUST HAVE CONTAINED                                      BIT,UNSIGNED INTEGER
                                   0FFFFH                                                            THE A REGISTER INTO 2 ASCII
06AE   E1       POP H              ;IF NOT RESTORE ORIGINAL HL                                       CHARACTERS. THE ASCII
06AF   D5       PUSH D             ;SAVE DE                                                          CHARACTER ARE THE ONES
06B0   3EFF MVI A, 0FFH ;WANT TO TAKE 2'S COMPLEMENT                                                 REPRESENTING THE 8 BITS. THESE
                                   OF DE CONTENTS                                                    TWO CHARACTERS ARE SENT TO
06B2   AA       XRA D                                                                                THE CONSOLE AT THE CURRENT
06B3   57       MOV D, A                                                                             PRINT POSITION OF THE CONSOLE.
06B4   3EFF MVI A, 0FFH
06B6   AB       XRA E
06B7   5F       MOV E, A
D-65                                                                                                                             D-66


              NMOUT                                                  06E7 09              DAD B          ;ADD DIGIT VALUE TO HL
06C7 E5            PUSH H            ;SAVE HL DESTROYS                                                   ADDRESS
                                     PREVAL                          06E8 4E              MOV C, M       ;GET CHAR.FROM MEMORY
06C8   F5             PUSH PSW       ;SAVE ARGUMENT                  06E9 C9              RET
06C9   0F             RRC
06CA   0F             RRC                                                   ********************************************************
06CB   0F             RRC                                                   FUNCTION : REGDS
06CC   0F             RRC            ;GET UPPER 4 BITS TO LOW               INPUTS : NONE
                                     4 BIT POSITION                         OUTPUTS : NONE
06CD E60F             ANI HCHAR      ;MASK OUT UPPER 4 BITS-                CALLS : ECHO, NMOUT, ERROR, CROUT
                                     WANT 1 HEX CHAR                        DESTROYS : A, B, C, D, E, H, L, F/F'S
06CF 4F               MOV C, A                                              DESCRIPTION :               REGDS DISPLAYS THE CONTENTS
06D0 CDE206           CALL PRVAL     ;CONVERT LOWER 4 BITSTO                                            OF THE REGISTER SAVE
                                     ASCII                                                              LOCATIONS,IN FORMATTED
06D3 CDF805           CALL ECHO      ;SEND TO TERMINAL                                                  FORM,ON THE CONSOLE.
06D6 F1               POP PSW        ;GET BACK ARGUMENT                                                 THE DISPLAY IS DRIVAN FROM A
06D7 E60F             ANI HCHAR      ;MASK OUT UPPER 4 BITS-                                            TABLE, RTAB,WHICH
                                     WANT 1 HEX CHAR                                                    CONTAINS THE REGISTERS'S PRINT
06D9   4F             MOV C, A                                                                          SYMBOL, SAVE LOCATION
06DA   CDE206         CALL PRVAL                                                                        ADDRESS,AND LENGTH (8 OR 16
06DD   CDF805         CALL ECHO                                                                         BITS).
06E0   E1             POP H          ;RESTORE SAVED VALUE OF
                                     HL                                                   REGDS
06E1 C9               RET                                            06EA 21C407          LXI H, RTAB;LOAD HL WITH ADDRESS OF
                                                                                                     START OF TABLE
       ********************************************************      06ED 4E             REG05 MOV C, M ;GET PRINT SYMBOL
       FUNCTION : PRVAL                                                                                  OF REG.
       INPUTS : C - INTEGER RANGE 0 TO F                             06EE   79           MOV A, C
       OUTPUTS : C - ASCII CHARACTER                                 06EF   B7           ORA A       ;TEST FOR 0 END OF TABLE
       CALLS : NOTHING                                               06F0   C2F706       JNZ REG10   ;IF NOT END,BRANCH
       DESTROYS : B, C, H, L, F/F'S                                  06F3   CDEB05       CALL CROUT ;ELSE CARRIAGE
       DESCRIPTION :               PRVAL CONVERTS A NUM. IN THE                                      RETURN/LINE FEED TO END
                                   RANGE 0 TO F                                                      DISPLAY
                                   HEX TO THE CORROSPONDING          06F6   C9           RET
                                   ASCII CHARACTER,0-9,              06F7   CDF805   REG10 CALL ECHO ;ECHO CHARACTER
                                   A-F.PRVAL DOES NOT CHECK THE      06FA   0E3D         MVI C,'='
                                   VALIDITY OF ITS INPUT ARGUMENT.   06FC   CDF805       CALL ECHO   ;O/P EQUAL SIGN i.e. A =
                                                                     06FF   23           INX H       ;POINT TO START OF SAVE
              PRVAL                                                                                  LOCATION ADDRESS
06E2 21B407           LXI H, DIGTB   ;ADDRESS OF TABLE               0700   5E           MOV E, M    ;GET LSP OF SAVE
06E5 0600             MVI B, 0       ;CLEAR HIGH ORDER BITS                                          LOCATION ADDRESS
                                     OF BC                                                           TO E
D-67                                                                                                                        D-68


0701 16FF     MVI D, RAMST SHR 8 ;PUT MSO OF SAVE LOC                                            RTAB. IF NO MATCH OCCURS, THEN
                                 ADDRESS TO E                                                    CONTROL IS PASSED TO THE
0703   23    INX H               ;POINT TO LENGTH FLAG                                           ERROR ROUTINE.
0704   1A    LDAX D              ;GET CONTENTS OF SAVE
                                 LOC.                                        071B 21C407 RGADR   LXI H, RTAB   ;HL GETS ADDR. OF
0705   CDC706 CALL NMOUT         ;DISPLAY ON CONSOLE                                                           TABLE START
0708   7E    MOV A, M            ;GET LENGTH FLAG                            071E 110300         LXI D, RTAB5 ;DE GET SIZE OF A
0709   B7    ORA A               ;SET SIGN F/F                                                                 TABLE ENTRY
070A   CA1207 JZ REG15           ;IF 0,REG. IS 8 BITS                        0721 7E   RGA05     MOV A, M      ;GET REG.
070D   1B    DCX D               ;ELSE 16 BIT REGISTER SO                                                      IDENTIFIER
                                 MORE TO DISPLAY                             0722 B7   ORA A     ;CHECK FOR TABLE END
070E   1A    LDAX D              ;GET LOWER 8 BITS                                               (IDENTIFIER IS 0)
070F   CDC706 CALL NMOUT         ;DISPLAY THEM                               0723 CA1106         JZ ERROR      ;IF AT END OF
0712   0E20 REG15 MVI C,' '                                                                                    TABLE,ARG.IS
0714   CDF805 CALL ECHO                                                                                        ILLEGAL
0717   23    INX H               ;POINT TO START OF NEXT                     0726 B9             CMP C         ;ELSE, COMPARE
                                 TABLE ENTRY                                                                   TABLE ENTRY &
0718   C3ED06 JP REG05           ;DO NEXT REGISTER                                                             ARGUMENT
                                                                             0727 CA2E07         JZ RGA10      ;IFEQUAL,WE'VE
       *******************************************************************                                     FOUND WHAT WE'RE
       FUNCTION : RGADR                                                                                        LOOKING FOR
       INPUTS : C - CHARACTER DENOTING REGISTER                              072A 19             DAD D         ;ELSE INCREMENT
       OUTPUTS : BC - ADDRESS OF ENTRY IN RTAB                                                                 TABLE POINTER TO
                         CORROSPONDING TO REG                                                                  NEXT ENTRY
       CALLS : ERROR                                                         072B C32107         JMP RGA05     ;TRY AGAIN
       DESTROYS : A, B, C, D, E, H, L, F/F'S                                 072E 23   RGA10     INX H         ;IF A MATCH INR.
       DESCRIPTION :RGADR TAKES A SINGLE CHARACTER AS                                                          TABLE
                         INPUT.THIS CHARACTER DENOTES A                      072F 44             MOV B, H      ;POINTER TO SAVE
                         REGISTER. RGADR SEARCHES THE TABLE                                                    LOC.ADDR.
                         RTAB FOR A MATCH ON THE I/P                         0730 4D             MOV C, L      ;RETURN THIS VALUE
                         ARGUMENT.IF ONE OCCURS,RGADR                        0731 C9             RET
                         RETURNS THE ADDR OF THE SAVED
                         LOCATION CORRESPONDING TO THE
                         REGISTER. THIS ADDRESS POINTS INTO
D-69                                                                                                                                D-70


       ********************************************************              ********************************************************
       FUNCTION : SRET                                                       FUNCTION : STHLF
       INPUTS : NONE                                                         INPUTS : C - 4 BIT VALUE TO BE STORED IN HALF BYTE
       OUTPUTS : CARRY = 1                                                              DE - 16 BIT ADDR. OF BYTE TO BE STORED INTO
       CALLS : NOTHING                                                       OUTPUTS : NONE
       DESTROYS : CARRY                                                      CALLS : NOTHING
       DESCRIPTION :               SRET IS JUMPED TO BY RIUTINES             DESTROYS : A, B, C, H, L, F/F'S
                                   WISHING TO RETURN                         DESCRIPTION :               STHLF TAKES THE 4 BIT VALUE IN C
                                   SUCCESS.SRET SETS THE CARRY                                           AND STORES IT IN HALF OF THE
                                   TRUE & THEN RETURNS TO THE                                            BYTE ADDRESSED BY REGISTER
                                   CALLER OF THE ROUTINE INVOKING                                        DE. THE HALF BYTE USED(EITHER
                                   SRET.                                                                 UPPER OR LOWER) IS DENOTED BY
                                                                                                         THE VALUE OF THE FLAG IS TEMP.
              SRET                                                                                       STHLF ASSUMES THAT THIS FLAG
0732   37     STC             SET CARRY TRUE                                                             HAS BEEN PREVIOUSLY SET
0733   C9     RET             RETURN APPROPRIATELY                                                       (NORMALLY BY ICMD)

       ********************************************************                    STHLF
       FUNCTION : STHFO                                               073F   D5    PUSH D
       INPUTS : DE - 16BIT ADDRESS OF BYTE TO BE STORED               0740   E1    POP H       ;MOVE ADDR. OF BYTE IN HL
                  INTO                                                0741   79    MOV A, C    ;GET VALUE
       OUTPUTS : NONE                                                 0742   E60F ANI 0FH      ;FORCE TO 4 BIT LENGTH
       CALLS : STHLF                                                  0744   4F    MOV C, A    ;PUT VALUE BACK
       DESTROYS : A, B, C, H, L, F/F'S                                0745   3AFDFF LDA TEMP ;GET HALF BYTE FLAG
       DESCRIPTION :               STHFO CHECKS THE HALF BYTE         0748   B7    ORA A       ;CHECK FOR LOWER HALF
                                   FLAG IN TEMP TO SEE IF IT SET TO   0749   C25207 JNZ STH05  ;BRANCH IF NOT
                                   LOWER. IF SO, STFHO STORES         074C   7E    MOV A, M    ;ELSE GET BYTE
                                   A 0 TO PAD OUT THE LOWER HALF      074D   E6F0 ANI 0F0H     ;CLEAR LOWER 4 BITS
                                   OF THE ADDRESSED BYTE :            074F   B1    ORA C       ;OR IN VALUE
                                   OTHERWISE,THE ROUTINE TAKES        0750   77    MOV M, A    ;PUT BYTE BACK
                                   NO ACTION.                         0751   C9    RET
                                                                      0752   7E    STH05 MOV A, M     ;IF UPPER HALF,GET BYTE
             STHFO                                                    0753   E60F ANI 0FH      ;CLEAR UPPER 4 BITS
0734   3AFDFF      LDA TEMP          ;GET HALF BYTE FLAG              0755   47    MOV B, A    ;SAVE BYTE IN B
0737   B7          ORA A             ;SET F/F'S                       0756   79    MOV A, C    ;GET VALUE
0738   C0          RNZ               ;IF SET TO UPPER DO NOT          0757   0F    RRC
                                     DO ANYTHING                      0758   0F    RRC
0739   0E00           MVI C, 0       ;ELSE WANT TO STORE THE          0759   0F    RRC
                                     VALUE 0                          075A   0F    RRC         ;ALIGN TO UPPER 4 BITS
073B CD3F07           CALL STHLF     ;DO IT                           075B   B0    ORA B       ;OR IN ORIGINAL LOWER 4 BITS
073E C9               RET                                             075C   77    MOV M, A    ;PUT NEW CONFGURATION BACK
                                                                      075D   C9    RET
D-71                                                                                                                                    D-72


       ********************************************************            ********************************************************
       FUNCTION : VALDG                                                    FUNCTION : VALDL
       INPUTS : C - 1 ASCII CHARACTER                                      INPUTS : C - CHARACTER
       OUTPUTS : CARRY - 1 IF CHAR. REPRESENTS VALID HEX                   OUTPUTS : CARRY - 1 IF INPUT ARGUMENT VALID
                                 DIGIT                                                                DELIMITER
                                 0 OTHERWISE                                                       - 0 OTHERWISE
       CALLS : NOTHING                                                     CALLS : NOTHING
       DESTROYS : A, F/F'S                                                 DESTROYS : A, F/F'S
       DESCRIPTION :               VALDG RETURNS SUCCESS IF ITS            DESCRIPTION :               VALDL RETURNS SUCCESS IF ITS
                                   INPUT ARGUMENT IS IN ASCII CHAR.                                    INPUT ARGUMENT IS A VALID
                                   REPRESENTING A VALID HEX                                            DELIMITER CHARACTER (SPACE,
                                   HEX DIGIT (0-9, A-F) AND FAILURE                                    COMMA, CR)AND FAILURE
                                   OTHERWISE.                                                          OTHERWISE.
                                                                                             VALDL
           VALDG                                                      0779 79                MOV A,C
075E 79          MOV A, C                                             077A FE2C               CPI ','           ;CHECK FOR COMMA
075F FE30        CPI 'C'             ;TEST CHAR. AGAINST '0'          077C CA3207            JZ SRET
0761 FA1C06      JM FRET             ;IF ASCII CODE IS                077F FE0D              CPI CR             ;CHECK FOR CARRIAGE
                                     LESS,CANNOT BE VALID                                                       RETURN
                                     DIGIT                            0781 CA3207            JZ SRET
0764   FE39           CPI '9'        ;ELSE SEE IF IN RANGE '0'-'9'    0784 FE20               CPI ' '           ;CHECK FOR SPACE
0766   FA3207         JM SRET        ;CODE BET' '0' - '9'             0786 CA3207            JZ SRET
0769   CA3207         JM SRET        ;CODE EQUAL '9'                  0769 C31C06            JMP FRET           ;ERROR IF NONEOF ABOVE
076C   FE41           CPI 'A'        ;NOT A DIGIT-TRY FOR A
                                     LETTER                                  ********************************************************
076E   FA1C06         JM FRET        ;NO CODE BET' '9'-'A'                                     MONITOR TABLES
0771   FE47           CPI 'G'                                                ********************************************************
0773   F21C06         JP FRET        ;NO CODE THAN 'F'
0776   C33207         JMP SRET       ;OKAY CODE IS 'A' TO 'F'         078C 0D         SGNON             DB CR, LF, 'MICROFRIEND-I' CR, LF
                                                                                                        EOT.
                                                                      078D   0A
                                                                      078E   4D494352
                                                                      0792   4F465249
                                                                      0796   454E442D
                                                                      079A   4920200D
D-73                                                                                                 D-74


079E 0A                                                07C3 46             DB    'F'
079F 00 LSGNON EQU S-SGNON          ;LENGTH OF                     RTAB                 ;TABLE OF REGISTER
                                    SIGNON MESSAGE                                      INFORMATION
             CADR                   ;TABLE OF          07C4 41             DB    'A'    ;REGISTER
                                    ADDRESSES OF                                        IDENTIFIER
                                    COMNMAND           07C5 EE             DB    ASAV AND 0FFH
                                    ROUTINES                                            ;ADDRESS OF
07A0    0000           DW    0                                                          REGISTER SAVE
07A2    1405           DW    XCMD                                                       LOCATION
07A4    F004           DW    SCMD                      07C6 00             DB0          ;LENGTH FLAG 0=8
07A6    D004           DW    MCMD                                                       BITS 1=16 BITS
07A8    8604           DW    ICMD                      0003        RTABS   EQU   $-RTAB ;SIZE OF AN ENTRY
07AA    6804           DW    GCMD                                                       IN THIS TABLE
07AC    3704           DW    DCMD                      07C7   42           DB    'B'
               CTAB                 ;TABLE OF VALID    07C8   EC           DB    BSAV AND 0FFH
                                    COMMAND            07C9   00           DB    0
                                    CHARACTERS         07CA   43           DB    'C'
                                                       07CB   EB           DB    CSAV AND 0FFH
07AE    44             DB    'D'                       07CC   00           DB    0
07AE    47             DB    'G'                       07CD   44           DB    'D'
07AE    49             DB    'I'                       07CE   EA           DBD   SAV AND 0FFH
07AE    4D             DB    'M'                       07CF   00           DB    0
07AE    53             DB    'S'                       07D0   45           DB    'E'
07AE    58             DB    'X'                       07D1   E9           DB    ESAV AND 0FFH
0006           NCMDS   EQU $-CTAB ;NUM. OF VALID       07D2   00           DB    0
                                    COMMANDS           07D3   46           DB    'F'
               DIGTB         ;NUM. OF PRINT VALUE OF   07D4   ED           DB    FSAV AND 0FFH
                             HEX DIGITS                07D5   00           DB    0
07B4    30             DB    '0'                       07D6   49           DB    'I'
07B5    31             DB    '1'                       07D7   F1           DB    ISAV AND 0FFH
07B6    32             DB    '2'                       07D8   00           DB    0
07B7    33             DB    '3'                       07D9   48           DB    'H'
07B8    34             DB    '4'                       07DA   F0           DB    HSAV AND 0FFH
07B9    35             DB    '5'                       07DB   00           DB    0
07BA    36             DB    '6'                       07DC   4C           DB    'L'
07BB    37             DB    '7'                       07DD   EF           DB    LSAV AND 0FFH
07BC    38             DB    '8'                       07DE   00           DB    0
07BD    39             DB    '9'                       07DF   4D           DB    'M'
07BE    41             DB    'A'                       07E0   FD           DB    MSAV AND 0FFH
07BF    42             DB    'B'                       07E1   01           DB    1
07C0    43             DB    'C'                       07E2   53           DB    'S'
07C1    44             DB    'D'                       07E3   F5           DB    SSAV AND 0FFH
07C2    45             DB    'E'                       07E4   01           DB    1
D-75                                                                                             D-76


07E5   50             DB    'P'                        0811   9CFF           U1RAM
07E6   F3             DB    PSAV+1 AND 0FFH            0813   AE0E           LOAD
07E7   01             DB    1                          0815   4108           CODE
07E8   00             DB    0     ;END OF TABLE        0817   B70C           SAVE
                                  MARK                 0819   FD00           STEP
07E9 000B79           DB    0                          081B   5109           REG
07EC BOC2C2           JMP   CO    ;TTY CONSOLE         081D   8B01           SET
                                  OUTPUT               081E   CB00           RUN
07EF   0CC3CA         JMP   CI    ;TTY CONSOLE INPUT   0821   5C08   COD-A   00     MOVE BLOCK
07F2   0C3E95                                          0823   E50B           01     FILL BLOCK
07F5   D305C3                                          0825   DD08           02     INSERT BYTE
07F8   9503                                            0827   2909           03     DELETE BYTE
07FA   C3C405                                          0829   BD08           04     BLOCK SEARCH
07FD   C39005                                          082B   5109           05     HEX TO DECIMAL
07F0   C3CA0C                                          082D   9F09           06     DECIMAL TO HEX
07F3   3E95 CODE0     MVI    A, 95                     082F   F10B           07     PROGRAMMING
07F5   D305           OUT CNTRL                        0831   A70B           08     VERIFY
07F7   C39503         JMP    CODE1                     0833   1502           09     FERR
0395   3EF7 CODE1     MVI A, BLANK DOT                 0835   1502           0A     BLANK CHECK
0397   D305           OUT DATA                         0837   E60A           0B     BLANK CHECK
0399   C9             RET                              0839   650B           0C     CHKSUM
0800   08     CMDTB   GO                               083B   1502           0D     FERR
0801   00             SET                              083D   A608           0E     COMPLEMENT
0802   03             REG                                                           BLOCK
0803   02             STEP                             083F   5B0E           0F     ROLLING DISPLAY
0804   0B             SAVE                             0841   0600 CODE      MVI B, NODOT
0805   01             CODE                             0843   CDD701         CALL CLEAR
0806   0A             LOAD                             0846   CDF307         MVI B, DTFLD
0807   0C             U1                               0849   06             CALL GTHEX
0808   0D             U2                               084A   01
0809   0E             U3                               084B   CD2B02         JNC ERR
080A   0F             U4                               084E   1600           MVI D, 00
080B   A5FF CMDAD     U4RAM                            0850   7B             MOV A, E
080D   A2FF           U3RAM                            0851   FE11           CPI 10
080F   9FFF           U2RAM                            0853   D21502         JNC ERR
D-77                                                                                         D-78


0856   212108      LXI H, CODEA        08AC   7E     CM1           MOV A, M
0859   C3A40C      JMP    RMNCOD       08AD   2F                   CMA
085C   3EFF MOVEBLK MVI A, 0FF         08AE   77                   MOV M, A
085E   32BFFF      STA     COPYTEST    08AF   00                   NOP
0861   CD780A      BLMOV CALL LDAIL    08B0   BE                   CMP M
0864   2AB9FF      LHLD DSSAVE         08B1   C21502               JNZ   ERROR
0867   EB                 XCHG         08B4   23                   INX   H
0868   2ABDFF      LHLD SSAVE          08B5   EB                   XCHG
086B   3ADFFF MB1 LDA     COPYTEST     08B6   CD6F0A               CALL S-E
086E   FE00        CPI     L           08B9   D2AC08               JNC   CM1
0870   CA7708      JZ     MB2          08BC   CF                   RST    1
0873   7E          MOV     A, M        08BD   CD460C               BLOCKSEARCH CALL SRLD
0874   C37A08      JMP    MB3          08C0   2ABDFF               LHLD SSAVE
0877   CDD60B      MB2    CALL READ    08C3   46            BZI    MOV B, M
087A   47          MB3    MOV B, A     08C4   3AB8FF               LDA   SERSAVE
087B   EB          XCHG                08C7   B8                   CMP B
087C   77          MOV     M, A        08C8   CCD408               CZ    DISPLY
087D   7E          MOV     A, M        08CB   23                   INX   H
087E   B8          CMP     B           08CC   EB                   XCHG
087F   C21502      JNZ    ERR          08CD   CD6F0A               CALL S-E
0822   13          IND    X            08D0   D2C308               JNC   BS1
0823   23          INX    H            08D3   CF                   RST   1
0824   E5          PUSH H              08D4   E5     DISPLY        PUSH HL
0825   CD6F0A      CALL                08D5   D5                   PUSH DE
0828   D1          POP     D           08D6   F5                   PUSH PSW
0829   D26B08      JNC     MB1         08D7   CD6203               CALL UPDAD1
088C   CF          RST     1           08DA   C3910D               JMP   DISP1
088D   CD46                            08DD   CDAA0A INSERT        CALL SEDI ;LOAD DE
088F   2ABDFF FILL BLK    LHLD SSAVE   08E0   0601                 MVI   B, 01
0892   3AB8FF      LDA    SRSAVE       08E2   CDD701               CALL CLEAR ;DOT IN ADDR. FIELD
0895   47          MOV    B, A         08E5   0E03                 MVI   A, 03
0896   00          NOP                 08E7   CDC20A               CALL DTDISP
0897   77          MOV     M, A        08EA   00                   NOP
0898   7E          MOV A, M            08EB   0600                 MVI   B, 00
0899   B8          CMP     B           08ED   CD2B02               CALL GTHEX ;IA
089A   C21502      JNZ    ERR          08F0   D21502               JNC   ERROR
089D   23          INX     H           08F3   EB                   XCHG
089E   EB          XCHG                08F4   22B6FF               SHLD IASAVE         ;IA
089F   CD6F08      CALL S-E            08F7   CD490C        INS1   CALL SRL1 ;LOAD SR
08A2   D29208      JNC    FB1          08FA   2ABBFF               LHLD SESAVE
08A5   CF          RST 1               08FD   54                   MOV D, H     ;HL:SS-SE
08A6   CD930A COMPLEMENT CALL LDSSE    08FE   5D                   MOV E, L
08A9   2ABDFF      LHLD SSAVE          08FF   13                   INX   D      ;DE:DS(SE+1)
D-79                                                                                             D-80


0900   7E     INSZ     MOV    A, M    ;DATA AT SS   0939   CD2B02    CALL GTHEX
0901   47              MOV    B, A                  093C   D21502    JNC   ERR
0902   EB              XCHG                         093F   EB        XCHG
0903   77              MOV    M, A                  0940   22B4FF    SHLD DASAVE
0904   7E              MOV    A, M                  0943   000000    NOPS
0905   B8              CMP    B                     0946   E5        PUSH H
0906   C21502          JNZ    ERR                   0947   D1        POP D
0909   1B              DCX    DE                    0948   23        INX   H
090A   2B              DCX    HL                    0949   3EFF      MVI   A, FF
090B   EB              ECHG                         094B   32BFFF    STA   COPYTEST
090C   D5              PUSH   DE                    094E   C36B08    JMP   MB1
090D   E5              PUSH   HL                    0951   0E05      HEX-DEMVI   C, 05
090E   2AB6FF          LHLD   IASAVE                0953   CDC20A    CALL DTDISP
0911   EB              ECHG                         0956   0600      MVI   B, 00
0912   E1              POP    HL                    0958   CD2B02    CALL GTHEX
0913   7D              MOV    A, L                  095B   D21502    JNC   ERROR
0914   93              SUB    E                     095E   EB        XCHG
0915   7C              MOV    A, H                  095F    22B1FF   SHLD HESAVE
0916   9A              SUB    D                     0962   AF        RAA
0917   D1              POP    DE                    0963   32B1FF    STA   CARRY LOC
0918   D20009          JNC    INS2                  0966   010000    LXI   B, 00
091B   2AB6FF          LHLD   TASAVE                0969   7C HD0    MOV A, H    ;SEE HL=HEX
091E   3AB8FF          LDA    SRSAVE                                             COUNT 00
0921   77              MOV    M, A                  096A B5          ORA L
0922   47              MOV    B, A                  096B CA8909      JZ    HD3          ;OVER
0923   7E              MOV    A, M                  DISPLAY BC
0924   B8              CMP    B                     096E 2B          DCX   HL          ;DECIMAL
0925   C2150A CF       JNZ    ERROR                                               CARRY CLEAR
0929   CDAA0A DELETE   CALL   SED1                  096F   AF        XRA   A
092C   0601            MVI    B, 01                 0970   79        MOV   A, C
092E   CDD701          CALL   CLEAR                 0971   3C        INR   A      ;INCREMENT C
0931   0E04            MVI    C, 04                 0972   37        DAA          ;DECIMALLY
0933   CDC20A          CALL   DTDISP                0973   4F        MOV   C, A
0936   00              NOP
0937   0600            MVI    B, 00
D-81                                                                                                             D-82


0974   D26909            JNC    HD0     ;IF NO CARRY        09C1 D5                 PUSH DE         ;SAVE HEX COUNT
0977   AF                XRA    A                           09C2 C3640C             JP DH2          ;DISPLAY HEX
0978   78                MOV    A, B                                                                COUNT
0979   3C                INR    A                           09C5   AF         DH0   XRA A           ;CLEAR CARRY
097A   27                DAA                                09C6   13               INX DE          ;INCREMENT HEX
097B   47                MOV  B, A                          09C7   7D               MOV A, L
097C   D26909            JNC  HD0   ;IF NO CARRY CHECK      09C8   3C               INR A           ;DECIMAL
097F   3AB1FF            LDA  CARRY LOC                                                             ADJUST
0982   3C                INR  A                             09C9   27               DAA             & INCREMENT H1
0983   32B1FF            STA  CARRY LOC ;CARRY              09CA   6F               MOV L, A
                                            AFTER           09CB   D2B709
0986   C36909            JMP  HD0   ;EACH BC                09CE   AF               XRA A
0989   3AB1FF HD3        LDA  CARRY LOC ;DECIMAL            09CF   7C               MOV A, H        ;DECIMALLY
098C   67                MOV H, A                                                                   INCREMENT
098D   68                MOV L, B   ;IN ADDRESS             09D0   3C               INR A           ;H AND
098E   C5                PUSH BC    ;CARRY &                09D1   27               DAA             ;CONTINUE
098F   CD6203            CALL MODI DAD1     ;HIGHER         09D2   67               MOV H, A
                                            BYTE OF         09D3   C3B709           JMP DH1
0992   C1                POP BC     ;BCD COUNTER            09D6   FF
                                    DATES                   09D7   C30F0E SERIAL    JMP SRL1
0993 79                  MOV A, C   ;SHOWN OVER BYTE        09DA   CDE309           CALL BRID
0994 CD6E03              CALL MODIDTA                       09DD   CDFA03           CALL SIGNON
0997 76                  HLT                                09E0   C30804           JMP GETCM
0998 TO 099E IS BLANK.                                      09E3   20     BRI0      RIM
099F 0E06 DEC-HEX        MVI    C, 06 ;DISPLAY DE           09E4   B7               ORA Z
09A1 CDC20A              CALL   DTDISP                      09E5   FAE809           JP BRID
09A4 0600                MVI    B, 00 ;GET IN DE            09E8   20     BRI1      RIM
09A6 CD2B02              CALL   GTHEX                       09E9   B7               ORA Z
09A9 D21502              JNC    ERR ;DECIMAL                09EA   FAE809           JM BRI1
09AC D5                  PUSH   DE      ;NUMBER             09ED   21FAFF           LXI H, -6
09AD C1                  POP    BC      ;BC:NUMBER          09F0   1E04 BRI3        MVI E, 04
09AE 219999              LXI    H, 9999 ;HL:9999            09F2   1D     BRI4      DCR E
09B1 110000              LXI    D, 0000 ;DE:00 HEX          09F3   C2F209           JM BRI1
                                        CNTR                09F6   23               INX H
09B4 AF                  XRA    ;CLEAR CARRY                09F7   20               RIM
09B5 00                  NOP                                09F8   B7               ORA A
09B6 08                  DSUB           ;UNSPECIFIED LODE   09F9   F2F009           JP BRI3
                                        HL-BC INTO HL       09FC   E5               PUSH H
09B7   3E99 DH2          MVI    A, 99   ;9999-NUMBER        09FD   24               INR H
09B9   BD                CMP    L                           09FE   2C               INR L
09BA   C2C509            JNZ    DH0                         09FF   22C0FF           SHLD BIT TIME
09BD   BC                CMP    P       ;IS HL 9999?        0A02   E1               POP H
09BE   C2C509            JNZ    DH0     ;IF NO LOOP         0A03   B7               ORA A
D-83                                                                                               D-84


0A04   7C             MOV    A, H                       0A46   7B             MOV     A, E
0A05   1F             RAR                               0A47   32ACFF         STA     CnSAVE
0A06   67             MOV    H, A                       0A4A   C9             RET
0A07   7D             MOV    A, L                       0A4B   3AACFF SSTCP   LDA     CnSAVE
0A08   1F             RAR                               0A4E   FE00           CPI     00
0A09   6F             MOV    L, A                       0A50   CAFD00         JZ      STEP
0A0A   24             INR    H                          0A53   2AF2FF         LHLD    PCSAVE
0A0B   0606           MVI    B, 06                      0A56   EB             XCHG
0A0D   C3080E         JMP    6PASS                      0A57   2AADFF         LHLD    BrSAVE
0A10   79     CNVBN   MOV    A, C                       0A5A   7D             MOV     A, L
0A11   D630           SUI    '0'                        0A5B   BB             CMP     E
0A13   FE0A           CPI    10                         0A5C   C22601         JNZ     STP20
0A15   F8             RM                                0A5F   7C             MOV     A, H
0A16   D607           SUI    7                          0A60   BA             CMP     D
0A18   C9             RET                               0A61   C22601         JNZ     STP20
0A19   0601           MVI    B, 01                      0A64   3AACFF         LDA     CnSAVE
0A1B   CDD701         CALL                              0A67   3D             DCR     A
0A1E   0E07           MVI    C, 07                      0A68   32ACFF         STA     CnSAVE
0A20   CDC20A         CALL                              0A6B   C3AB0C         JMP     SST0
0A23   000600                                           0A6F   2ABBFF         LHLD    SESAVE
0A26   CD2B02         CALL   GTHEX                      0A72   7D             MOV     A, L
0A29   D21502         INC    ERROR                      0A73   93             SUB     E
0A2C   EB             XCHG                              0A74   7C             MOV     A, H
0A2D   22ADFF         SHLD   BRASAVE                    0A75   9A             SBB     D
0A30   21E20A         LXI    H, CnADR                   0A76   EB             XCHG
0A33   AF             XRA    A                          0A77   C9             RET
0A34   47             MOV    B, A                       0A78   CD930A         LDALL   CALL LDSSE
0A35   CDB702         CALL   OUTOUT                     0A7B   0601           MVI     B, 01
0A38   3E01           MVI    A, 01                      0A7D   CDD701         CALL
0A3A   47             MOV    B, A                       0A80   0E02           MVI     C, 02
0A3B   21310B         LXI    H, 0B31      ;BLANK        0A82   CDC20A         CALL
0A3E   CDB702         CALL   OUTPUT                     0A85   000600
0A41   0601           MVI    B, 01 ;USE ADDRESS FIELD   0A88   CD2B02         CALL GTHEX
                                    OF DISPLAY & DOT    0A8B   D21502         JNC  ERR
0A43 CD2B02           CALL   GTHEX                      0A8E   EB             XCHG
D-85                                                                                       D-86


0A8F   22B9FF       SHLD    DSSAVE      0ADC    0B
0A92   C9           RET                 0ADD    14
0A93   0601         LDSSE   MVI C, 01   0ADE    15       SRADR
0A95   CDD701       CALL    DIDISP      0ADF   15
0A98   0E00         LHLD    SSAVE       0AE0    05
0A9B   CDC20A       CALL    UPDAD1      0AE1   14
0A9D   00           NOP                 0AE2   15        CnADR
0A9E   0600         MVI     B, 0        0AE3   15
0AA0   CD2B02       CALL    GTHEX       0AE4   0C
0AA3   D21502       JNC     ERROR       0AE5   16
0AA6   EB           XCHG                0AE6   CD160B    BLANCKCHK   CALL   PrLOAD
0AA7   22BDFF       SHLD    SSAVE       0AE9   210080                LXI    H, 8000
0AAA   0601         MVI     B, 01       0AEC    000000               NOPs
0AAC   CDD701       CALL                0AEF   06FF      BC1         MVI    B, FF
0AAF   0E01         MCI     C, 01       0AF1   7E0000                MOV    A, M NOP NOP
                                        0AF4   B8                    CMP    B
                                        0AF5   C4D408                CMZ    DISPLAY
0AB1   CDD20A       CALL                0AF8   23                    INX    H
0AB4   000600                           0AF9   EB                    XCHG
0AB7   CD2B02       CALL GTHEX          0AFA   CDD60B                CALL   CALC
0ABA   D21502       JNC    ERROR        0AFD   67                    MOV    H, L
0ABD   EB           XCHG                0AFE   2EFF                  MVI    L, FF
0ABE   22BBFF       SHLD SESAVE         0B00   000000                NOP
0AC1   C9           RET                 0B03   000000                NOP
0AC2   0600         DIDISP MVI B, 00    0B06   000000                NOP
0AC4   21CE0A       LXI    H, SSADR     0B09   0000
0AC7   09           DTDO DAD BC         0B0B   7D        BC3         MOV    A, L
0AC8   09           DAD BC              0B0C   93                    SUB    E
0AC9   3E01         MVI    01           0B0D   7C                    MOV    A, H
0ACB   C3B702       JMP    OUTPUT       0B0E   9A                    SBB    D
0ACE   0505 SSADR   DCR B               0B0F   EB                    XCHG
0AD0   05           DCR B               0B10   D2EF0A                JNC    BC1
0AD1   0E                               0B13   CF
0AD2   0D                               0B14   EF
0AD3   05                               0B15   FF
0AD4   13                               0B16   21310B    PrLOAD      LXI    H, PrADR
0AD5   0A                               0B19   AF                    XRA    A
0AD6   0D                               0B1A   47                    MOV    B, A
0AD7   0A                               0B1B   CDB702                CALL   OUTPUT
0AD8   10                               0B1E   3E01                  MVI    A, 01
0AD9   0E                               0B20   47                    MOV    B, A
0ADA   0D                               0B21   21310B                LXI    H, 0B ;BLANK OF
0ADB   0E                                                                          DISPLAY DOT
D-87                                                                                               D-88


0B24 CDB702            CALL   OUTPUT                     0B6E   0E00             MOV    C, 00
0B27 0601              MVI    B, 01                      0B70   210080           LXI    H, 8000
0B29 CD2B02            CALL   GTHEX        ;GET HEX IN   0B73   7E         CH0   MOV    A, M
                                           ADDR.         0B74   81               POP    D
0B2C   7B              MOV    A, E                       0B75   4F               ADD    C
0B2D   32A7FF          STA    PrSAVE                     0B76   23               INX    H
0B30   C9              RET                               0B77   7B               MOV    A, E
0B31   15     PRADR    b                                 0B78   95               SUB    L
0B32   15              b                                 0B79   7A               MOV    A, D
0B33   12              p                                 0B7A   9C               SBB    H
0B34   14              R                                 0B7B   D2730B           JNC    CH0
0B35   CD900C DUPL     CALL   DDISP                      0B7E   69               MOV    L, C
0B38   3AA9FF          LDA    PRSAVE                     0B7F   2600             MVI    H, 00
0B3B   FE01            CPI    01                         0B81   CD620B           LXI    H, CHADR
0B3D   CA460B          JZ     DUP1                       0B84   3E01             MVI    A,01
0B40   21FF07          LXI    H, 07FF                    0B86   0600             MVI    B,00
0B43   C3490B          JMP    DUP2                       0B88   21A50B           LXI    H, CHADR
0B46   21FF0F DUP1     LXI    H, 0FFF                    0B8B   CDB702           CALL   OUTPUT
0B49   110030 DUP2     LXI    D, 3000                    0B8E   76               HALT
0B4C   19              DAD    DE                         0B8F   0000             NOPs
0B4D   22BBFF          SHLD   SESAVE                     0B91   7B         CH2   MOV    A, E
0B50   EB              XCHG                              0B92   95               SUB    L
0B51   22BDFF          SHLD   SSAVE                      0B93   7A               MOV    A, D
0B54   2600            MVI    H, 00                      0B94   9C               SBB    H
0B56   C3B10C          JMP    DUP3                       0B95   E1               POP    H
0B59   F7                                                0B96   D2710B           JNC    CH0
0B5A   0B                                                0B99   CD6203           CALL   UPDAD1
0B5B   CD880C          COPY   CALL CDISP                 0B9C   3E01             MVI    A, 01
0B5E   AF              XRA    A                          0B9E   21A50B           LXI    H, CHADR
0B5F   32BFFF CHKSUM   STA    COPYTEST                   0BA1   CDB702           CALL   GTHEX
0B62   C36108          JMP    BLMOV                      0BA4   76               HALT
0B65   CD160B          CALL   PrLOAD                     0BA5   0C     CHADR     INR    C
0B68   CDD60B          CALL   CALC                       0BA6   00               NOP
0B6B   57              MOV    D, A                       0BA7   0000 VERIFY      NOP
0B6C   1EFF            MOV    E, FF                      0BA9   CD800C           CALL   VDISP
D-89                                                                     D-90


0BAC   2AB9FF           LHLD   DSSAVE   0BF4   2AB9FF   LHLD   FF89
0BAF   EB               XCHG            0BF7   EB       XCHG
0BB0   2ABDFF           LHLD   SSAVE    0BF8   2ABDFF   LHLD   FFBD
0BB3   EB               XCHG            0BFB   7E       MOV    A, M
0BB4   46        VFY1   MOV    B, M     0BFC   47       MOV    B, A
0BB5   EB               XCHG            0BFD   EB       XCHG
0BB6   7E               MOV    A, M     0BFE   77       MOV    M, A
0BB7   EB               XCHG            0BFF   E5       PUSH   H
0BB8   B8               MOV    A, M     0C00   C5       PUSH   B
0BB9   78               XCHG            0C01   F5       PUSH   PSW
0BBA   C4D408           CMP    B        0C02   D5       PUSH   D
0BBD   23               INX    H        0C03   0600     MVI    B, 00
0BBE   13               INX    D        0C05   CD6203   CALL   0362
0BBF   E5               PUSH   HL       0C08   D1       POP    D
0BC0   2ABBFF           LHLD   SESAVE   0C09   D5       PUSH   D
0BC3   7D               MOV    A, L     0C0A   EB       XCHG
0BC4   93               SUB    E        0C0B   0600     MVI    B, 00
0BC5   7C               MOV    A, H     0C0D   7E       MOV    A, M
0BC6   9A               SBB    D        0C0E   CD6E03   CALL   036E
0BC7   E1               POP    H        0C11   D1       POP    D
0BC8   00               NOP             0C12   F1       POP    PSW
0BC9   D2B40B           JNC    VFY1     0C13   C1       POP    B
0BCC   CF               RST    1        0C14   E1       POP    H
0BCD   E5                               0C15   7E       MOV    A, M
0BCE   CD6E03                           0C16   B8       CMP    B
0BD1   F1                               0C17   C21502   JNZ    0215
0BD2   CD6E06                           0C1A   13       LDAX   D
0BD5   76                               0C1B   23       INX    H
0BD6   3AA9FF    CALC   LDA    $20A9    0C1C   E5       XCHG
0BD9   47               MOV    B, A     0C1D   CD6F0A   CALL   0A6F
0BDA   3E03             MVI    A, 03    0C20   D1       POP    E
0BDC   37               STC             0C21   D2FB0B   JNC    0BFB
0BDD   17               RAL             0C24   CF       RST    7.5
0BDE   05               DCR    B        0C25   00       NOP
0BDF   F2DC0B           JP     0BDC     0C26   D5       PUSH   DE
0BE2   C680             ADI    80       0C27   11FF19   LXI    D, 19FF
0BE4   C9               RET             0C2A   CDF105   CALL   DELAY
0BE5   CD460C           CALL   SRKD     0C2D   D1       POP    DE
0BE8   CD8F08           JMP    088F     0C2E   7A       MOV    A, D
0BEB   000000           NOPs            0C2F   F660     ORI    60
0BEE   0000             NOPs            0C31   D302     OUT    02
0BF0   00   PROGRAM     NOP             0C33   13       INX    D
0BF1   CD780A           CALL   0A78     0C34   23       INX    H
D-91                                                                                   D-92


0C35   EB             XCHG              0C7B       0E00                MVI    C, 00
0C36   E5             PUSH   H          0C7D       C36B0C              JMP    MESG
0C37   2ABBFF         LHLD   SESAVE     0C80       CD780A      VDISP   CALL   LDALL
0C3A   7D             MOV    A, L       0C83       0E01                MVI    C, 01
0C3B   93             SUB    E          0C85       C36B0C              JMP    MESG
0C3C   7C             MOV    A, H       0C88       CD160B      CDISP   CALL   PRLOAD
0C3D   9A             SBB    D          0C8B       0E02                MVI    C, 02
0C3E   E1             POP    H          0C8D       C36B0C              JMP    MESG
0C3F   EB             XCHG              0C90       CD160B      DDISP   CALL   PRLOAD
0C40   D20E0C         JNX    PRO        0C93       0E03                MVI    C, 03
0C43   C3360E         JMP    PR1        0C95       C36B0C
0C46   CD830A   SRKD CALL    LDSSE      0C98   b   15          BLANK
0C49   21DE0A         LXI    H, SRADR   0C99   p   12          P
0C4C   AF             XRA    A          0C9A   b   15          BLANK
0C4D   47             MOV    B, A       0C9B   V   17          U
0C4E   CDB702         CALL   OUTPUT     0C9C   h   15          BLANK
0C51   3E01           MVI    A, 01      0C9D   r   OR 0C C
0C53   47             MOV    B, A       0C9E   b   15          BLANK
0C54   CDB702         CALL   OUTPUT     0C9F   D   0D          D
0C57   0601           MVI    B, 01      0CA0   B   15          BLANK
0C59   CD2B02         CALL   GTHEX      0CA1   S   05          S
0C5C   D21502         INC    ERR        0CA2   b   15          BLANK
0C5F   7B             MOV    A, E       0CA3   L   11          L
0C60   32B8FF         STA    SRSAVE     0CA4       19    RMNC0D        DAD    D
0C63   C9             RET               0CA5       19                  DAD    D
0C64   CDD701   DH2   CALL   CLEAR      0CA6       7E                  MOV    A, M
0C67   E1             POP    HL         0CA7       23                  INX    H
0C68   C38D0D         JMP    DH3        0CA8       66                  MOV    A, M
0C6B   C5       MESG PUSH    BC         0CA9       6F                  MOV    L, A
0C6C   CDD701         CALL   CLEAR      0CAA       E9                  PCHL
0C6F   C1             POP    BC         0CAB       C22601 SST0         JNZ    STP20
0C70   0600           MVI    B, 00      0CAE       C3FD00              JMP    STEP
0C72   21980C         LXI    H, PADR    0CB1       22B9FF DUP3         SHLD   SSAVE
0C75   C3C70A         JMP    DIDO       0CB4       C3F70B              JMP    PROG
0C78   CD780A   PDISP CALL   LDALL
D-93                                                                                                         D-94


0CB7 CD930A SAVE CALL LDSSE            ;GET SS AND          0D0A   57             MOV    D, A
                                              SE BLOCK      0D0B   23             INX    HL
                                              LIMIT         0D0C   0B             DCX    BC
0CBA   21550D      LXI    H, FnSAVE    ;DISPLAY Fn          0D0D   78             MOV    A, B
0CBD   CD190B      CALL   PrLOAD                            0D0E   B1             ORA    C
0CC0   32BAFF      STA    FnSAVE                            0D0F   7A             MOV    A, D
0CC3   0E04        MVI    C, 04                             0D10   C2090D         JNZ    SUM0
0CC5   CD6B0C      CALL   MESG                              0D13   B7             ORA    A
0CC8   CD040D      CALL   CHKSUM1      ;SAME FILE NAME      0D14   C9             RET
0CCB   32BFFF      STA    (CHSAVE)     ;SAVE CHECKSUM       0D15   5E   TAPEOUT   MOV    E, M ;OUTPUT A MEMORY
0CCE   21A00F      LXI    H, 4000D                                                            BLOCK TO
0CD1   DA1502      JC     ERROR        ;MISMATCH ERROR      0D16 CD210D           CALL   OUTBYTE    ;TAPE
0CD4   CD590D      CALL   1KOUT        ;1KHz LEADER FOR 4   0D19 23               INX    HL
                                       SEC.                 0D1A 0B               DCX    BC
0CD7 21BAFF        LXI    H, BUSTADR   ;BUFFER START        0D1B 78               MOV    A, B
                                       ADDRESS              0D1C B1               ORA    C
0CDA 010600        LXI    B, 0006      ;6 PARAMETER OIP     0D1D C2150D           JNZ    TAPEOUT
0CDD CD150D        CALL   TAPEOUT      ;SEND Fn,SE,SS &     0D20 C9               RET
                                       CHECKSUM             0D21 1608 OUTBYTE     MVI    D, 08
0CE0 21A00F        LXI  H, 4000                             0D23 B7               ORA    A
0CE3 CD5E0D        CALL 2KOUT ;O/P 2KHz MIDSYNC.            0D24 CD350D           CALL   OUTBIT
0CE6 CDF50C        CALL GETPARA       ;SET SS AND BLOCK     0D27 7B               MOV    A, E
                                      COUNT                 0D28 0F               RRC
0CE9   CD150D      CALL TAPEOUT                             0D29 CD690F           CALL   OUTBIT
0CEC   21A00F      LXI  H, 4000D                            0D2C 15               DCR    D     ;8 BIT DATA
0CEF   CD5E0D      CALL 2KOUT         ;2KHz END SYNC.       0D2D C2270D           JNZ    0B
0CF2   C34E00      JMP  SIGNON        ;FrIEnd               0D30 37               STC
0CF5   2ABBFF      GETPARA            LHLD SESAVE           0D31 CD350D           CALL   OUTBIT ;STOP BIT
0CF8   EB          XCHG                                     0D34 C9               RET
0CF9   2ABDFF      LHLD SSAVE         ;THIS RETURN SS IN    0D35 E5   OUTBIT      PUSH   H
                                      HL                    0D36 D5               PUSH   D
0CFC   7B          MOV A, E     ;AND BYTE COUNT IN BC       0D37 C5               PUSH   B
0CFD   95          SUB  L                                   0D38 2600             MVI    H, 00
0CFE   4F          MOV C, A                                 0D3A DA470D           JC     OUT1
0CFF   7A          MOV A, D     ;BC=DE-HL=SE-SS             0D3D 2E08             MVI    L, 08
0D00   9C          SBB  H                                   0D3F CD5E0D           CALL   2KOYT
0D01   47          MOV B, A                                 0D42 2E02             MVI    L, 02
0D02   03          INX  B       ;BC=BYTE COUNT HL:SS        0D44 C34E0D           JMP    OUT2
0D03   C9          RET                                      0D47 2E04             MVI    L, 04
0D04   CDF50 CHKSUM CALL GETPARA      ;GET PARAMETER        0D49 CD5E0D           CALL   2KOUT
0D07   D8          RET                                      0D4C 2E04             MVI    L, 04
0D08   AF          XRA  A                                   0D4E CD590D           CALL   1KOUT
0D09   86     SUM0 ADD A, HL                                0D51C1                POP    B
D-95                                                                                                      D-96


0D52   D1           POP     D                                 0D8A   20                   RIM
0D53   E1           POP     H                                 0D8B   17                   RAL
0D54   C9           RET                                       0D8C   C9                   RET
0D55   15     FnADR BLANK                                     0D8D   CD6203       DH3     CALL   UPDAD1
0D56   15           BLANK                                     0D90   76                   HLT
0D57   0F           F                                         0D91   F1           DISP1   POP    PSW
0D58   16           n                                         0D92   CD6E03               CALL   UPDAD1
0D59   0E61 1KOUT MVI       C, F1K                            0D95   CDE702       DISP2   CALL   RDKBD
0D5B   C3600D       JMP     TONE                              0D98   FE10                 CPI    11
0D5E   0E2E 2KOUT MVI       C, F2K                            0D9A   C2950D               INZ    DISP2
0D60   29     TONE DAD      HL                                0D9D   D1                   POP    DE
0D61   3EC0         MVI     A, C0                             0D9E   E1                   POP    HL
0D63   C5     SQW PUSH      B                                 0D9F   C9                   RET
0D64   30           SIM                                       0DA0   C2490D LOAD3         INZ    LOAD2
0D65   0D     TP    DCR     C                                 0DA3   C34500               JMP    CMMND
0D66   C2650D       JNZ     TP                                0DA6   FE12
0D69   EF80         XRI     80                                0DA8   C21502
0D6B   47           MOV     B, A                              0DAB   3AFDFF PRVRG         LDA    RGPTR
0D6C   2B           DCX     H                                 0DAE   FE00                 CPI    00
0D6D   7C           MOV     A, H                              0DB0   CAF702               JZ     RETF
0D6E   B5           ORA     L                                 0DB3   3D                   DCR    A
0D6F   78           MOV     A, B                              0DB4   32FDFF               STA    RGPTR
0D70   C3640F       JMP     EXT                               0DB7   C3FA02               JMP    RETT
0D73   CD170F GETBYTE       CALL GETBIT ;OIP DATA IN E        0DBA   FE10     CHK         CPI    INR
0D76   1608         MVI     D, 08                             0DBC   C8                   RZ
0D78   CD170F       GET0    CALL GETBIT                       0DBD   FE12                 CPI    DCR
0D7B   7B           MOV     A, E                              0DBF   C2CF01               JNZ    SUB15
0D7C   1F           RAR                                       0DC2   C9                   RET
0D7D   5F           MOV     E, A                              0DC3   F1     INRDCR        POP    PSW
0D7E   15           DCR     D                                 0DC4   2AF6FF               LHLD   CURAD
0D7F   C2780D       JNZ     GET0                              0DC7   FE10                 CPI    INR
0D82   CD170F       CALL    GETBIT       ;STOP BIT BYPASSED   0DC9   C2D00D               JNZ    DCR
0D85   C9           RET                                       0DCC   23                   INX    H
0D86   1D     BT1   DCR     E                                 0DCD   C3C701               JMP    SUB 20
0D87   C2860D       JNZ     BT1                               0DD0   FE12         DCR     CPI    DCR
D-97                                                                                    D-98


0DD2 C2CF01           JNZ    SUB15        0E2B   3E82     CLD0      MVI   A, 82
0DD5 2B               DCX    H            0E2D   0000               OUT   03
0DD6 C3C701           JMP    SUB20        0E2F   3EF0               MVI   A, F0
0DD9 FE10 VALCH       CPI    INR          0E31   D302               OUT   02
0DDB CA6702           JZ     GTH25        0E33   C30800             JMP   CLDBK
0DDE FE12             CPI    DCR          0E36   3E82     PR1       MVI   A, 82
0DE0 CA6702           JZ     GTH25        0E38   D303               OUT   03
0DE3 C3C500           JMP    GTH30        0E3A   3EF0               MVI   A, F0
0DE6 FE12 PRRG        CPI    DCR          0E3C   D302               OUT   02
0DE8 C21502           JNZ    ERR          0E3E   C3AD0B             JMP   VFY0
0DEB CDAB0D           CALL   PRVRG        0E41   3AA9FF   READ1     LDA   PrLOAD
0DEE C3C500           JMP    00C5         0E44   FEFF               CPI   FF
0DF1 0603 3PASS       MVI    B, 03        0E46   CA4C0E             JZ    READ2
0DF3 C3F80D           JMP    BITSPAS      0E49   C3D60B             JMP   READ
0DF6 0606                                 0E4C   7E       READ2     MOV   A, M
0DF8 2AC0FF BITSPAS   LHLD   BITTIME      0E4D   C9                 RET
0DFB 2D     BP        DCR    L            0E4E   FFFF
0DFC C2FB0D           JNZ    BP           0E50   3E08     COMPARE   MVI   A, 08
0DFF 25               DCR    H            0E52   30                 SIM
0E00 C2FB0D           JNZ    BP           0E53   3EFF               MVI   A, FF
0E03 05               DCR    B            0E55   32A9FF             STA   PrLOAD
0E04 C2F80D           JNZ    BITSPAS      0E5B   217C0E   ROLLING   LXI   H, STRING
0E07 C9               RET                                                        ;HL:STRING
0E08 2C 6PASS         INR    L                                                   ADDRESS
0E09 229AFF           SHLD   HALFBIT      0E5E E5         DISP      PUSH HL      ;HL:SAVE
0E0C C3F80D           JMP    BITSPAS                                             ADDRESS
0E0F 21250E SRL1      LXI    H, SERIADR   0E5F AF         ROLL1     XRA   A      ;A=0
0E12 AF               XRA    A                                                   ADDRESS
0E13 47               MOV    B, A         0E60 47                   MOV B, A     ;NO DOT
0E14 CDB702           CALL   OUTPT        0E61 CDB702               CALL OUTPT
0E17 21290E           LXI    H, ALADR     0E64 3E01                 MVI   A, 01 ;USE DATA
0E1A 3E01             MVI    A, 01                                               FIELD
0E1C CDB702           CALL   OUTPT        0E66 0600                 MVI   B, 00 ;NO DOT
0E1F 3E0C             MVI    A, 0C        0E68 CDB702               CALL OUTPT
0E21 30               SIM                 0E6B 11FFFF               LXI   H, FFFF ;FULL
0E22 C2DA09           JMP    SRL2                                                  DELAY
0E25 S 05                                 0E6E CDF105               CALL DELAY
0E26 E 0E                                 0E71 7E                   MOV   A, M ;FF IS END OF
0E27 r 14                                                                        STRING
0E28 I 13                                 0E72 FEFF                 CPI   EOS ;GET BACK
0E29 A 0A                                                                        START
0E2A L 11                                 0E74 E1                   POP H        ;ADDRESS
                                                                                 INCREMENT
D-99                                                                                                 D-100

0E75 23               INX   H         ;IF NOT AT EOS
0E76 C25E0E           JNZ   ROLL1     ;IF NOT AT EOS   0E9B    13    I
0E79 C35B0E           JMP   ROLLING                    0E9C    16    n
                                                       0E9D    19    G
THE STRING:                                            0E9E    15    BLANK
0E7C 15       BLANK                                    0E9F    17    U
0E7D 15       BLANK                                    0EA0    12    P
0E7E 15       BLANK                                    0EA1    FF    EOS
0E7F 15       BLANK
0E80 15       BLANK                                    MEMORY LOACTION USED :
0E81 0D       d
0E82 1B       y                                        2080    15
0E83 16       n                                        2081    15
0E84 0A       A                                        2082    X
0E85 11       L                                        2083    Y
0E86 1C       o                                        2084    CD(GENERATED)
0E87 19       G                                        2085    AB(GUESSED)
0E88 15       BLANK                                    2086    0D
0E89 18       h                                        2087    D0
0E8A 0E       E                                        2088    C0
0E8B 11       L                                        2089    0C
0E8C 12       P                                        208A    A0
0E8D 05       S                                        208B    B0
0E8E 15       BLANK                                    208C
0E8F 1B       y                                        208D
0E90 1C       o                                        208E
0E91 17       U                                        208F    CMTR
0E92 15       BLANK                                    2090    (RANDOM IN BETWEEN)
0E93 13       I
0E94 16       n                                        0EA2   CD730D PAPEIN     CALL GETBYTE   ;MEMORY
0E95 15       BLANK                                                                            BLOCK FROM
0E96 11       L                                                                                HL
0E97 0E       E                                        0EA5    73            MOV   M, E        ;COUNT IN BC
0E98 0A       A                                        0EA6    23            INX   HL
0E99 14       r                                        0EA7    0B            DCX   BC
0E9A 16       n                                        0EA8    78            MOV   A, B
D-101                                                                                                          D-102


0EA9    B1       ORA    C                                   0F06 CD6203           CALL   MODIAD1       ;DISPLAY
0EAA    C3490F   JMP    TAPEIN                                                                         START
0EAD    FF                                                                                             ADDRESS ON
0EAE    21550D   LXI    HL, (FnADR)   ;GET Fn               0F09 76               HALT                 ;ADDRESS
0EB1    CD190B   CALL   PrLOAD                                                                         FIELD FOR
0EB4    0E05     MVI    C, 05                                                                          YOUR REF.
0EB6    CD6B0C   CALL   MESG          ;L DISPLAY            0F0A 0603 1.5 SEC     MVI    B, 03
0EB9    21E803   LXI    HL, 1000D                           0F0C 11FFFF LOOP0     LXI    D, FFFF
0EBC    CD410F   CALL   PERIOD        ;NC:1KHz              0F0F CDF105           CALL   DELAY         ;5 X 3 = 1.5
0EBF    DAB90E   JC     LOAD0         ;LOOP UNTIL SYNC                                                 SEC. DELAY
                                      1KHz DOT              0F12   05             DCR    B
0EC2 2B          DCX    HL                                  0F13   C20C0F         JNZ    LOOP0
0EC3 7C          MOV    A, H          ;LEADING SYNC         0F16   C9             RET
                                      1000?                 0F17   C5 GETBIT      PUSH   B
0EC4    B5       ORA    L                                   0F18   D5             PUSH   D
0EC5    C2BC0E   JNZ    LOAD1                               0F19   E5             PUSH   H
0EC8    CD510E   CALL   PERIOD                              0F1A   AF             XRA    A
0ECB    D2C80E   JNC    LOAD2                               0FAB   32FFFF         STA    CARRY TEMP.
0ECE    21BAFF   LXI    HL, BUFFST                          0F1E   210000         LXI    H, 0000
0ED1    010600   LXI    B, 0006                             0F21   CD510F   GB0   CALL   PERIOD
0ED4    CDA20E   CALL   TAPEIN        ;GET Fn SE SS & CHK   0F24   14             INR    D           ;NON
0ED7    DAB90E   JC     LOAD0                                                                        DESTRUCTIV
0EDA    3ABAFF   LDA    (TAPEF n)                                                                    E TESTING
0EDD    F5       PUSH   PSW                                 0F25 15               DCR    D
0EDE    CD6E03   CALL   MODIDT1       ;Fn IS DATA FIELD     0F26 C2400F           JNZ    TOOMUCH     ;D 0 LONG
0EE1    CD0A0F   CALL   1.5 SEC       ;PASS OUT 2KHz                                                 PERIOD
                                      SYNC.                 0F29 DA330F           JC     2KP
0EE4    F1       POP    PSW                                 0F2C 2D               DCR    L           ;FOR 1KHz
0EE5    47       MOV    B, A                                                                         DECREMENT
0EE6    DA1502   LDA    Fn                                                                           BY 2
0EE9    B8       CMP    A, B                                0F2D 2D               DCR    L
0EED    CDF50C   CALL   GETPARA       ;FILE NOT FOUND       0F2E 26FF             MVI    H, FF       ;1KHz END OF
0EF0    DA1502   JC     ERROR                                                                        THIS BIT
0EF3    CDA20E   CALL   TAPEIN                              0F30   C3210F         JMP    GB0
0EF6    DA1502   JC     ERROR         ;ILLEGAL              0F33   2C             INR    L
                                      PARAMETER             0F34   7C             MOV    A, H
0EF9 CD040D      CALL CHKSUM1                               0F35   FE00           CPI    00          ;H=00 2KHz IS
0EFC 21BFFF      LXI H, CHSAVE                                                                       FIRST
0EFF FE          CMP A, M             ;COMPARE DATA         0F37   CA210F         JZ     GB0
                                      SUMWITHTAPE SUM       0F3A   7D             MOV    A, L
0F00    C21502   JNZ    ERROR                               0F3B   17             RAL
0F03    2ABDF    LHLD   SSAVE                               0F3C   E1             POP    H
                                                            0F3D   D1             POP    D       ;L=(=/2KHz PERIOD)-2
D-103                                                                                                          D-104


0F3E C1                    POP   B     ;(=/ 1KHz PERIOD)       0F68     C9         RET      1KHz = 114
0F3F C9                    RET         ;L+CARRY=0              0F69     5F         NOB      MOV C, A
                                       8(2K),2(1K)             0F6A     C3350D     JMP      OUTBIT
0F40 3EFF        TOOMUCH   MVI   A, FF ;L-CARRY=1              0F6D     3E60 BYTER MVI      A, 60
                                       4(2K),4(2K)             0F6F     D302       OUT      02
0F42    32FFFF             STA   CARRY TEMP ;ERROR             0F71     60         NOP
                                       WHILE READING           0F72     3E30       MVI      A, 30
0F45    E1                 POP   H                             0F74     D302       OUT      02
0F46    D1                 POP   D                             0F76     11FF68     LXI      D, 200ms     ;PREPARE
0F47    C1                 POP   B                                                                       FOR 200ms
0F48    C9                 RET                                                                           PHASE
0E49    C2A20E TAPEINO     JNZ   TAPEIN        ;CARRY = 1 IF   0F79     CDF105       CALL   DELAY
                                               ERROR           0F7C     3E60         MVI    A, 60
0F4C    32FFFF             LDA CARRY TEMP      0 NO ERROR      0F7E     D302         OUT    02
0F4F    17                 RAL                                 0F80     0000         NOPs
0F50    C9                 RET                                 0F82     3EF0         MVI    A, 60
0F51    110000 PERIOD      LXI   D, 0000                       0F84     D302         OUT    02
0F54    20                 RIM           ;GET IN SID BIT       0F86     3E00         MVI    A, 00
0F55    13                 INX   D                             0F88     32A7FF       STA    PrSAVE
0F56    17                 RAL           ;CARRY = BIT          0F8B     C3E900       JMP    BC0
0F57    DA540F             JC    PH      ;10+7 IF CARRY PASS   0F8F     FF
                                            HIGH BIT
0F5A 20                    RIM                                 0F90 TO 0FFF IS UNUSED ROM. IT IS AVAILABLE FOR THE
0F5B 13                    INX   D                             USER.
0F5C 17                    RAL           ;IF NO BIT 0 PASS
                                         LOW BIT               1000 TO 11FF IS USED FOR UPLOADING & DOWNLOADING
0F5D D25A0F                JNC   OF5A                          MON SOFTWARE (APPENDIX F)
0F60 7B                    MOV A, E
0F61 FE55                  CMP A, THRSn          ;IF E         1200 TO 1FFF IS UNUSED ROM & IS AVAILABLE FOR THE
                                         TRESHOLD 1 KHz        USER
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-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.
D-106                                                                                                                                     D-107


            i.   Press enter.                                               6.    For Downloading (from PC to kit)
                 Data to be transmitted to the file is displayed on the          a. Type G1000.
                 screen while transmitting .                                     b. Press Enter.
                                                                                 c. Specify SS on prompt “source start” and press enter.
                 After complete data tranmission “.” Prompt appears on
                                                                                 d. Press F9.
                 the screen.
                                                                                 e. Press m to transmit file.
            j.   Press F9.                                                       f. Enter file name.
            k.   Press L to end capture. Then on prompt “Verify (y/n)            g. Press Enter.
                 press “y” key and then enter.                                   h. Press F9.
                                                                                 i. After transmitting a file fully,”.” Prompt is displayed in the
Uploading ends here.                                                                  screen .
Downloading Operating Instructions                                          Downloading ends here.
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.

Dyna85

  • 1.
    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
  • 2.
    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
  • 3.
    PAGE NO. PAGE NO. CHAPTER 3 CHAPTER 5 OPERATING INSTRUCTION-KEYBOARD…………. 3-1 MACHINE LANGUAGE PROGRAMMING…………. 5-1 3.1 KEYBOARD OPERATION…………………………………. 3-1 5.1 MONITOR SUBROUTINES………………………………… 5-1 3.2 SET , INR , DCR KEYS…………………………………….. 3-2 1. MODIAD…………………………………………… 5-3 3.3 REG………………………………………………………….. 3-3 2. MODIDT…………………………………………… 5-4 3.4 GO / EXEC………………………………………………….. 3-6 3. RDKBD …………………………………………….. 5-4 4. DELAY…………………………………………….. 5-4 3.5 STEP………………………………………………………… 3-7 5. CLEAR ……………………………………………. 5-5 3.6 VI : VECTOR INTERRUPT……………………………….. 3-10 6. GTHEX……………………………………………….5-5 3.7 RES : RESET………………………………………………. 3-10 7. OUTPUT…………………………………………….. 5-5 3.8 CODE………………………………………………………. 3-10 5.2 SERIAL ROUTINES…………………………………………..5-7 3.9 USER KEYS U1 , U2 , U3 , U4……………………………. 3-11 1. CIN………………………………………………….. 5-8 3.10 SAVE……………………………………………………….. 3-12 2. COUT………………………………………………. 5-8 3.11 LOAD………………………………………………………. 3-12 3. CROUT……………………………………………… 5-8 4. NMOUT…………………………………………….. 5-8 CHAPTER 4 5. GETHX …………………………………………….. 5-8 CODES………………………………………………….. 4-1 5.3 PROGRAMMING EXAMPLES…………………………….. 5-9 4.1 CODE 00 : MOVE BLOCK…………………………………. 4-1 EXAMPLE 1 : FAMILIARIZATION……………………….. 5-9 4.2 CODE 01 : FILL BLOCK…………………………………… 4-3 EXAMPLE 2 : RDKBD……………………………………… 5-11 4.3 CODE 02 : INSERT BLOCK………………………………. 4-3 EXAMPLE 3 : MODIDT……………………………………... 5-12 EXAMPLE 4 : RDKBD + MODIDT………………………… 5-12 4.4 CODE 03 : DELETE BLOCK………………………………. 4-3 EXAMPLE 5 : HEX ADDITION…………………………….. 5-12 4.5 CODE 04 : SEARCH BLOCK……………………………… 4-5 EXAMPLE 6 : 4 DIGIT HEX COUNTER…………………… 5-13 4.6 CODE 04 : HEX TO DECIMAL……………………………. 4-6 EXAMPLE 7 : 2 DIGIT DECIMAL COUNTER…………….. 5-14 4.7 CODE 06 : DECIMAL TO HEX……………………………. 4-7 EXAMPLE 8 : FLASHING DISPLAY………………………. 5-15 4.8 CODE 0E : COMPLEMENT BLOCK………………………. 4-7 EXAMPLE 9 : ROLLING DISPLAY………………………… 5-16 4.9 CODE OF : ROLLING DISPLAY…………………………… 4-8 TABLE 5.1 SCRATCH PAD LOCATION……………….. 5-2 ii TABLE 5.2 CHARACTER CODES………………………. 5-6 iii
  • 4.
    PAGE NO. CHAPTER 6 PAGE NO. APPENDIX SERIAL I/O OPERATION 6-1 A CONNECTOR AND STRAPPING DETAILS A-1 6.1 USE OF MONITOR 6-2 CONNECTOR J1 : DYNA BUS INTERFACE A-1 6.2 COMMAND STRUCTURE 6-2 CONNECTOR J2 : 8155 CONNECTOR A-2 6.2.1 D – DISPLAY MEMORY COMMAND 6-3 CONNECTOR J3 : 8255 CONNECTOR A-3 6.2.2 G – PROGRAM EXECUTE COMMAND 6-3 CONNECTOR J4 : 8279 CONNECTOR A-4 6.2.3 I – INSERT INSTRUCTIONS INTO RAM-1 6-3 CONNECTOR J5 : POWER SUPPLY CONNECTOR A-4 6.2.4 M – MOVE MEMORY COMMAND 6-4 CONNECTOR J6 : SERIAL CONNECTOR A-4 6.2.5 S – SUBSTITUTE MEMORY 6-4 CONNECTOR J7 : 8253 CONNECTOR A-4 6.2.6 X – EXAMINE / MODIFY CPU 6-5 STRAPPING DETAILS A-5 REGISTER COMMAND 6.3 PROGRAM DEBUGGING 6-7 B ADD-ON CARDS FOR MICROFRIEND B-1 DYNA-85 SYSTEM 6.4 ERROR CONDITIONS 6-8 6.5 ADDRESS VALUE ERRORS 6-8 C CIRCUIT DIAGRAM C-1 6.6 COMMAND EXAMPLES 6-9 D MICROFRIEND DYNA-85 MONITOR LISTING D-1 6.7 AUDIO CASSETTE INTERFACE 6-9 TABLE 6.1 BAUD RATE SELECTION 6-11 E PROCEDURE FOR UPLOADING AND E-1 DOWNLOADING CHAPTER 7 FOR THE MICROFRIEND ILC USER 7-1 iv v
  • 5.
    INTRODUCTION INTRODUCTION TOMICROFRIEND 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
  • 6.
    1-1 CHAPTER 1 CONFIGURATION OFMICROFRIEND DYNA-85 1.1 SYSTEM OVERVIEW 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 .
  • 7.
    1-2 1-3 HEX KEYPAD / DISPLAY INTERFACE a 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. f b g Simultanous Keyboard & Display operation. Scanned Keyboard Model sensor Mode. 2 Key locked / N Key roll over. Contact Debounce. e c 16 Displays Programmable scan timing. d The hex keypad has the standard hexadecimal keys and many other function and Code keys. 4 “User Definable” function keys are also Writing a 1 in the desired bit lights that particular segment. provided which can be defined by the user . All scan, return, shift and PARALLEL I/O INTERFACE control lines of 8279 are brought on to connected J4. 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). 8279 DATA FORMAT : SERIAL I/O AUDIO CASSETTE INTERFACE The data format for the character being displayed by the 8279 is one bit Serial I/O is available through RS232C compatible port. The SID & SOD corresponding to each segment of the seven segment display plus one lines are used under software control for serial operation . Baud rate is bit for the decimal point. The display bits are store in the 8279 in the adjustable. form of one byte digit of the display from RAM location 0 to 5 . Onboard Audio Cassette I / F is provided with file management , for The byte format is as follows : storage and retrieval of data using a cassette recorder. A3 A2 A1 A0 B3 B2 B1 B0 TIMER c d b a e g f dp 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.
  • 8.
    1-4 1-5 EXPANSION SLOT STEP : Allows the user to execute the program on single step All Address, Data, Control and Hardware Interrupt lines are brought on mode or break point mode. to a 50 pin FRC connector for system interfacing and expansion. These SAVE : Used for saving the contents of memory onto an audio lines are unbuffered so user has to take care while expanding their cassette. system. LOAD : Used for loading the program from audio cassette back 1.1.2 SYSTEM COMMANDS OVERVIEW to the memory in RAM area. The HEX KEYPAD mode supports the following commands : U1..U4 : These keys are user definable functin keys. The function of these keys can be defined by the user , by loading the RESET : Provides hardware reset . Display shows “FrlEND” on appropriate memory locations with vectors pointing to pressing this key. user subroutines. VI : Vector interrupt key.Activate RST 7.5 vectored interrupt. 1.1.3 SYSTEM FIRMWARE OVERVIEW SET : Allows the user to examine & modify the contents of RAM and only examination of contents is possible in case of EPROM. The MICROFRIEND DYNA-85 has very powerful and user friendly FIRMWARE in the EPROM. INR : Increments memory address presently displayed un the address field of display. Complete listing of the Monitor FIRMWARE is given at the end of User can borrow any subroutine from the listing for his own DCR : Decrements memory address presently displayed in the program development. address field od display. Various commands available through the keyboard and the coded REG : Allows the user to examine contents of CPU registers & subroutines are accessible through the CODE key and is already been modify them if necessary. listed in chapter. GO : Allows the user to load the program counter by the A point worth mentioning here about the FIRMWARE is the options of desired memory address which is the starting address of entry point to the Monitor. the program to be executed. There are two options available , one is the COLD START , other is EXEC : Used to start the execution of GO or CODE command. WARM START . In COLD START entry the system is completely CODE : Used for selecting one of the coded subroutines in the reinitialized and no user program status is saved from the previous monitor. program executed. This is equivalent to the hardware reset.
  • 9.
    1-6 1-7 COLD START entry can be performed through software by using the The areas of application on MICROFRIEND DYNA-85 are as follows :- RST 0 instruction. 1. Analog to Digital Converter Interface. In WARM START entry, the start of previously executed user program is 2. Digital to Analog Converter interface. fully saved before entering the monitor. WARM START entry is possible 3. Interfacing Hexadecimal Keyboad. through software by using th RST 1 instruction. 4. Simulation of an Elevator. In both cases, the sign on display is ‘FrlEND’ as in case of hardware 5. Temparature Controller Interface. reset through RESET Key. 6. Stepper motor Controller. CODE COMMANDS : 7. Traffic Light Control System. 8. DC Motor Controller. CODE 00 : Move a block of memory. 9. Thumbwheel Interface. CODE 01 : Fill a block with a data byte. CODE 02 : Insert a byte in a block. And many more experiment and application can be thought and CODE 03 : Delete a byte from a block. successfully developed on MICROFRIEND DYNA-85 system. 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.
  • 10.
    2-1 CHAPTER 2 SYSTEM MEMORY& INPUT / OUTPUT MAPPING 2.1 MEMORY 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 USER RAM IC 6116 C000 BFFF EXPANSION EPROM/RAM 4000 3FFF MONITOR 0000 EPROM
  • 11.
    2-2 2-3 0000H TO 3FFFH : IC ADDRESS MODE I/O FUNCTION Monitor EPROM socket.Monitor 2732 is located at 000H to 0FFFH and is mapped at 1000H-1FFFH,2000H-2FFFH and 3000-3FFFh also. 8255 10 R/W PORT A 11 R/W PORT B It 2764 / 27128 are used , 1000H - 3FFFH can be used for further 12 R/W PORT C expansion. 13 WRITE CONTROL REGISTER 4000H to BFFFH : 8253 18 R/W COUNTER 0 19 R/W COUNTER 1 This Socket is used for user expansion of EPROM and RAM. 1A R/W COUNTER 2 EPROMs like 2716 / 2732 / 2732 / 2764 / 27128 / 27256 or RAMs 1B WRITE CNTROL REGISTER 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- 2.3 POWER SUPPLY FFFFH.This 2K memory is folded after every 2K bytes from C000H to FFFFH.In this socket 6264 can also be used. 2.2 INPUT/ OUTPUT MAPPING Recommanded Power Supply for DYNA-85 kit DMS SMPS – 01 IC ADDRESS MODE I/O FUNCTION Having following specification : 8279 04 READ READ KEYBOARD FIFO WRITE WRITE DATA TO DISPLAY 05 READ READ STATUS WORD Voltage Current Rating WRITE WRITE COMMAND WORD +5V 1A 8155 08 WRITE COMMAND/STATUS + 12 V 500 mA REGISTER 09 R/W PORT A - 12 V 250 mA 0A R/W PORT B + 30 V 100 mA 0B R/W PORT C 0C R/W TIMER LOW BYTE 0D R/W TIMER HIGH BYTE
  • 12.
    2-4 3-1 CHAPTER 3 OPERATING INSTRUCTION- KEYBOARD KEYPAD LAYOUT : 3.1 KEYBOARD OPERATION RESET VI C D E F MICROFRIEND DYNA-85 has a built in keyboard ( KEYPAD).The layout U1 U2 U3 U4 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 DCR 8 9 A B number system . There are 16 keys for entering Hex numbers from 0 GO/H LOAD SAVE to F. These are all dual meaning keys and the key designated depends L 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 EXEC 4 5 6 7 ’F r l E n d’. This indicates that the system is reset and the monitor SPH SPL PCH PCL 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 INR 0 1 2 3 and then press a valid command key. SET CODE STEP REG/I The various command and function keys are explained below :
  • 13.
    3-2 3-3 3.2 SET,INR,DCR KEYS EXAMPLE 1 : Key Pressed Address Field Data Field 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 RES F r I E n d 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 SET data field .The dot in the address field indicates that your next key will be F 0 0 0 F treated as an address entry (entry is from Right to Left and last 4 entries 0 0 0 F 0 are retained). 0 0 F 0 0 0 F 0 0 0 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 INR F 0 0 0 X X that memory location as the two digits in the data field. 3 F 0 0 0 0 3 E F 0 0 0 3 E Now you can modify or retain the contents of the location. INR F 0 0 1 X X DCR F 0 0 0 3 E 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 EXEC F address by 1 location and dispalys the contents of that new locaton with required data. Pressing EXEC key terminate the loading of memory and the monitor DCR key also works in a similar way but it decrements the address by 1 waits for next command. and points to the previous location. Trying to load data into a Monitor EPROM location using SET key 3.3 REG results in ‘FErr’(error). This key allows you to examine and optionally modify the contents of SET, INR, DCR, keys can also be used to verify the data loaded in RAM all 8085 internal registers. by displaying one location after another. 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 )
  • 14.
    3-4 3-5 6 : PCH ( Program Counter High Format of the F register ( Flag Register ) is as follows : 7 : PCL ( Program Counter Low ) 8 : H ( H Register ) 9 : L ( L Register ) S Z X AC X P X C A : A ( A Register ) B : B ( B Register ) X : Don’t care. C : C ( C Register ) C : Carry D : D ( D Register ) P : Parity E : E ( E Register ) X : Don’t Care F : F ( Flag register ) AC : Auxillary Carry Z : Zero Pressing any one of these keys after pressing REG key will display the S : Sign particular register name in the address field and the contents of that register will be displayed in the data field. EXAMPLE 2 : Pressing INR key after this , will point to the next register and DCR will point to the previous register. Key Pressed Address Field Data Field Contents of the register can be modified at this point similar to loading any other memory location. REG . Pressing INR and DCR keys after modifying the contents of that register A A X X and ENTER terminates the command. Address field shows F in the left 0 A 0 0 most digit , the monitor indicates as usual that the it is waiting for the 5 A 0 5 next command. 0 0 5 0 Format for the I register (Interrupt mask) is as follows : INR B X X I M M M DCR A 5 0 EXEC F 0 0 0 A E 7.5 6.5 5.5 I Interrupt enable Flag [ 1 is enabled, 0 is disabled ] M Interrupt Mask [1 is masked , 0 is unmasked ] NOTE : ONLY LAST TWO ENTRIES ARE RETAINED.
  • 15.
    3-6 3-7 3.4 GO/EXEC 3.5 STEP This pairs of keys is used to execute a program from a desired location We have seen how a program can be executed by using GO and onwards. If the GO key is pressed, It displays the present address in the EXEC pair of keys.This method is useful only when the program is program counter and the contents of the memory location at address. A finalized, or when we have a ready program. dot appears in the address field indicating that you can enter a new In case a program is being developed , it is essential that we have address in the address field. You can now modify the contents of the 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. program counter . After loading the desired starting address in the address field , press EXEC key to execute the program starting at the This can be achieved in two ways . One way is to insert the RST 1 address .During execution of the program , the address field shows ‘E’ instruction ( CFH ) at every point where a break is desired to check indicating that the user program or subroutine is being executed. status or result , which is possible only in case of short programs being run from the RAM. The Monitor Regains control either after pressing the RESET key Another way is to use the STEP key and step through the program. ( Hardware Reset ) or after executing RST 0, RST 1, JMP 0000H or JMP Pressing the STEP key displays the contents of the program 0008H instruction (Software Reset). counter , Which can be modified to set the starting address of the EXAMPLE 3 : program. Now press INR and the monitor will prompt for other parameters : Key Pressed Address Field Data Field br : Break Address GO P P P P X X Cn : N +1 , where N is the number of times the break should F 0 0 0 F occur. 0 0 0 F 0 0 0 F 0 0 In case ‘br’ and ‘Cn’ both are given a value of zero,the system goes into 0 F 0 0 0 single stepping mode. In single stepping mode, the program os executed EXEC F single instruction at a time . Execution stops after every instruction and a status check is possible. EXAMPLE 4 : NOTE : P P P P IS THE PRESENT CONTENTS OF PROGRAM Let us take a simple program to see how the STEP command COUNTER WHEN GO KEY WAS PRESSED. XX IS THE DATA IN works.Load MEMORY LOCATION P P P P. the following program starting at location F000H.
  • 16.
    3-8 3-9 Address Data Mnemonic Key Address Data Comments F000 3E 05 MVI A, 05h Pressed Field Field F002 3D DCR A F003 C202F0 JNZ F002h STEP PPPP XX PRESENT PC F006 76 HALT CONTENTS This program first loads register A ( Accumulator ) with 05 , then F000 F000 STARTING ADDRESS decrements the accumulator contents by 1 till the contents become zero INR . br BREAK POINT ? 0 0000 br IGNORE br. and halts at that point. INR Cn . Cn ? The JNZ loop will make use of ‘br’ and ‘Cn’. First let us execute the 0 0000 00 IGNORE Cn. program with STEP key and using ‘br’ and ‘Cn’ parameters. INR F002 3D FIRST INSTRUCTION EXECUTED PC POINTS Key Address Data Comments TO NEXT INSTR . Pressed Field Field EXEC F PROGRAM STOPS FOR REG . STATUS CHECK . STEP PPPP XX PRESENT PC CONTENTS A A 05 REG . A (Acc) F000 F000 STARTING ADDRESS CONTENS 05 INR . br BREAK ADDRESS ? EXEC F NEXT COMMAND ? F002 F002 br BREAK AT F002 STEP F002 3D STEP INR Cn . Cn ? INR F003 C2 SECOND INSTR. 04 Cn 04 Cn 4 N + 1 EXECUTED INR F002 3D PROGRAM STOPS AFTER EXEC F PROGRAM STOP FOR BREAKPOINT OCCURRED 3 STATUS CHECK EXEC F TIMES REG . REGISTER A (Acc) REG . EXAMINE REG.A CONTENTS 04 A A 02 A A 04 AFTER DECREMENTING As the program stopped after the breakpoint occurs 3 times, the original ONCE contents of register A which were 05 have been decremented three times. The register A should now contain 02, which is displayed in the After counting this sequence till the contents of A become 00, the data field. program comes out from the JNZ loop and the address field shows the The same program can be executed in a single stepping mode. 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.
  • 17.
    3-10 3-11 3.6 VI : VECTOR INTERRUPT 3.9 USER KEYS U1,U2,U3,U4 This key is used to interrupt the program execution and transfe r the There are 4 user definable keys on the MICROFRIEND DYNA-85. Each control to location 003CH in the monitor.This location has a jump to of these keys has a vector in the scratchpad RAM area . By loading location FFCEH in the user RAM.By inserting another jump instruction at an appropriate jump instruction at these location, you can define the functon of keys U1, U2, U3, U4. FFCEH , we can transfer the control to an interrupt service routine located to another area in the memory. The vector location are as follows : 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 Key Memory Location using the SIM instruction. The exmple of a decimal counter included in the chapter on U1 FF9CH, FF9DH, FF9EH programming, will make the application of key will make it more clear. U2 FF9FH, FFA0H, FFA1H U3 FFA2H, FFA3H, FFA4H 3.7 RES : RESET U4 FFA5H, FFA6H, FFA7H Pressing RES key causes a hardware RESET operation.The control is An example will illustrate how these keys can be used . There is a transferred to location 0000H in the monitor. The monitor program is subroutine in the monitor for a “ROLLING DISPLAY” at location 0E5BH. executed from 0000H onwards without saving the status resulting from Using the SET key load a jump instruction C3 5B 0E at location FF9CH, any user program executed before the ‘RESET’. The display shows FF9DH and FF9EH which are the U1 key vector location.Mow reset the ‘F r l E N D’ as the sign-on message and the monitor waits for a valid system and then press U1 key, the display immediately blanks for a command. moment and then a rolling message appears 3.8 CODE 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 The code key allows you to access one of the coded subroutines in the By using the U1 key vector, ypu have efficiently transferred the control to monitor firmware. All the user accessible coded subroutines are the rolling display subroutine. explained in Chapter 4.
  • 18.
    3-12 3-13 3.10 SAVE 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. This command is used for saving your program on an audio cassette. The procedure for saving is as follows : 4. Immediately press EXED Key. L appears in the data field, indicating that the CPU is searching for the file with file number Fn. 1. Command the MIC socket (on the top) of the MICROFRIEND DYNA – 85 to the MIC socket of the CTR. 5. Whenever the CPU comes across any File Number , it is displayed in the data field. Loading starts only when the specified File 2. Press SAVE key, enter the following parameters number is found and displayed. SS : Source Start 6. The SS parameter of your program is already saved on the cassette SE : Source End tape, and when the program is being loaded back into RAM , it Fn : File Number – any hex number from 00 to FF. automatically gets loaded at the same address. 3. Turn CTR ON and keep it in RECORD mode. 7. On completion of loading the program with File number Fn , SS parameter is displayed in the address field. 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 NOTE : There shouldn’t be a gap of more than 10 sec. Between display. turning CTR ON and pressing EXEC key. 6. Turn CTR OFF. 3.11 LOAD 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)
  • 19.
    4-1 CHAPTER 4 CODES As wehave 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. 4.1 CODE 00 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.
  • 20.
    4-2 4-3 Example : 1 4.2 CODE 01 Key Pressed Address Field Data Field Fill Block with a Data Byte CODE This code requires the following parameters : 0 0 0. INR . SS SS : Starting address of the block. 0 0 0 0 0. SS SE : End address of the block. INR . SE Sr. : Data byte to be filled in all the location from SS to SE 5 0 0 0 5. SE Sr. can be any hex number from 00 to FF must be within the RAM area. INR . dS F000 F 0 0 0. dS 4.3 CODE 02 EXEC FrIE nd Insert Byte in a Block ( SE, Sr,IA ) This example program moves a block of memory between 0000H and In a given block of RAM it is sometimes necessary to insert a byte of data 0005H to the RAM address F000H. 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 This can be verified by using the SET key as follows : SE. No address relocation for jumps are done. Key Pressed Address Field Data Field 4.4 CODE 03 SET F 0 0 0. INR F000 3E Delete a Byte at a Given Address ( SE,DA ) INR F001 0 0. In a given block at a given address DA, a byte is deleted. The remaining INR F002 d 3. block till SE shifts up by one position. The above two INSERT and INR F003 0 5. DELETE commands are very useful in inserting or deleting a display INR F004 00 character in the VIDEO RAM at the given cursor position. INR F005 C3
  • 21.
    4-4 4-5 Ex : INSERT BYTE You can insert anything else. With the SET command verify that 3E,00,D3,05,32,FF,20,19,76 is Load the RAM location 1000H-1007H with the help of SET command. the data from location 1000H-1008H. The block has shifted down by 1 byte. 1000 3E After loading we notice that the instruction to 1 00 store accumulator STA 200FFH is incorrect.The The opposite of INSERT is DELETE and it works as follows : 2 D3 ‘OPCODE’ 32 is missing. It has to be inserted 3 05 before FF , 20 Key Pressed Address Field Data Field 4 FF 5 20 CODE 6 19 03 0 3. 7 76 EXEC . SE 8 XX 1008 1 0 0 8. SE If the block is small you an manually make 1004 as 32 and reload INR . DA theremaining by shifting one down. But if the block is very tedious. To 1004 1 0 0 4. DA Do this use INSERT byte command.IA (Insert Address ) is 1004. SE EXEC FriE N D. ( Block End ) is 1007 and Sr ( Insert byte ) is 32. With the SET command verify that 1000-1007 contents are same as Key Pressed Address Field Data Field before the INSERT command (i.e 1004 ; FF etc.) CODE 4.5 CODE 04 02 02 EXEC SE 1007 1 0 0 7. SE Search a Given Block for Given Pattern ( SS,SE,Sr ) INR IA The given block of memory (RAM or ROM ) between SS and SE is 1004 1 0 0 4. IA searched for a pattern o f byte given in Sr. Whenever the first match INR Sr is found, the address and bytes are displayed. Remaining mismatches 32 Sr 32 can be scanned with INR. EXEC FriE N D. LOAD the data in Ex.4.3 from 1000H.
  • 22.
    4-6 4-7 Ex : BLOCK SEARCH 4.7 CODE : 06 Key Pressed Address Field Data Field Decimal to Hex Conversion This code is useful for converting any Decimal number from 0000 to CODE 9999 into a Hex number equivalent. 04 0 4. EXEC . SS The parameter to be entered is dE, which is the decimal number we 1000 1 0 0 0. SS desire to convert into Hex format. INR SE Pressing EXEC after entering the decimal number displays the Hex 1008 1 0 0 8. SE equivalent. An important precaution to be taken is that , when you are INR Sr . entering the decimal number to be converted to Hex, do not press any 19 Sr 1 9. keys from A to F. There is no provision for detecting this error and the EXEC 1006 19 results of converting that number are unpredictable. INR FriE nd CODE 05 and CODE 06 are very useful in address conversions,relative jumps and total space calculations. 4.6 CODE : 05 4.8 CODE : 0E Hex to Decimal Conversion Complement a block of memory This code complements all the data contained within a memory block : CODE 05 is a utility code for converting any Hex number from 0000 to The required parameters are : FFFF into a Decimal number. SS : Starting address of the block. The parameter to be entered is prompted in the data field as HE, and the SE : End address of the block. Hex number to be converted can now the directly entered in the Address field. Pressing EXEC displays the Decimal equivalent of the Hex number On executing this code, all the ‘0’ are replaced by ‘1’ by ‘0’ within the entered. specified block of memory. SS and SE must be in RAM area.
  • 23.
    4-8 5-1 CHAPTER 5 4.9 CODE : 0F MACHINE LANGUAGE PROGRAMMING Rolling Display 5.1 MONITOR SUBROUTINES This is not a utility code but it is a demonstration code to illustration code illustrate the powerof the display control. This section will cover the applications from the software point of view of MICROFRIEND DYNA - 85 . You are advised to get familiar with the On executing 0F, the display starts rolling the message : assembly language of INTEL 8085 Microprocessor.You should get familiar 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. with the various mnemonics and their power. CODES REFERANCE CHART 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 Code Function Parameters LIFO ( Last In First Out ) type for storage during subroutine calls. User is advised to initialize the Stack Pointer with his stack area.The 00 Block Move SS,SE,dS suggested stack pointer location is FEFFH. Location beyond this should 01 Fill Block SS,SE,Sr not be utilized by the user as the monitor uses this area as the scratch-pad 02 Insert Byte SE,IA,Sr RAM. 03 Delete Byte SE,dA 04 Block Search SS,SE,Sr You may borrow several monitor routines to simplify your task of 05 Hex to Dec HE programming and to minimize RAM used. From the Firmware listing 06 Dec to Hex dE provided, take care of noting the parameters required by these routines, 0E Complement Block SS,SE as some of the routines destroy the contents of the Registers. 0F Rolling Display Also go through the manuals for the detailed operation of 8155, 8255 and SS : Statrting Address 8279 supporting chips. SE : End Address dS : Destination The following is a list of scratch-pad RAM allocation to the Monitor IA : Insert Address program. DA : Delete Address Sr : Data Byte
  • 24.
    5-2 5-3 TABLE 5.1 Location (Hex) Used for Location (Hex) Used for FF9 A, B HALF BIT FFED Flags FF9 C, D, E U1 Key Jump FFEE A Register FF9 F, 0, 1 U2 Key Jump FFEF L Register FFA2, 3, 4 U3 Key Jump FFF0 H Register FFA5, 6, 7 U4 Key Jump FFF1 Interrupt Mask FFA8 P DATA FFF2 Prog. Cntr – Low Byte FFAA, B Unused FFF3 Prog. Cntr – Hi Byte FFAC, CnSave FFF4 Stack Ptr – Low Byte FFAD, E BrSave FFF5 Stack Ptr – Hi Byte FFA, F, 0 DESAVE FFF6 Current Address FB1 CARRYLOC FFF8 Current Data FFB2, 3 HESAVE FFF9-FFFC Output buffer & Temp Loc FFB4, 5 DASAVE FFFD Register Pointer FBB6, 7 IA SAVE FFFE Input Buffer FFBB, C SE SAVE FFFF 8155 command/status Register Image FFB9, A DS SAVE FFBD, E SS SAVE FFBF COPY TEST Important subroutines which can be borrowed from the Monitor FFC0, 1 BIT TIME FIRMWARE are listed below.These subroutines can be called in your FFB8 SR SAVE own programs by using the CALL Instruction and specifying the FFC2 User may place a JMP instr. to a RST 5 starting address of that particular subroutine.The starting addreses of routine in locs FFFC2H-FFFC4H all these subroutines are given in brackets along with their names. FFC5 JMP to RST 6 routine FFC8 JMP to RST 6.5 routine 1. Modiad (0362) – Modify address field of display (Hardwored user interrupt) FFCB JMP to RST 7 routine Inputs FFCE JMP to ‘VECT INTR’Key routine FFDI-FFE8 Monitor Stack B : Dot Flag- (temporary storage Used by Monitor 1 Put dot at right edge of the field. FFE9 E Register 0 No dot. FFEA D Register FFEB C Register HL : The character to be displayed.
  • 25.
    5-4 5-5 The contents of HL Register pair are displayed in the address field.The 5. CLEAR (01D7) contents of all the CPU registers are affected Inputs : B : Dot falg – 2. MODIDT ( 036E ) 1 – Dot in address field 0 – No Dot Inputs B : Dot Flag- 1 : Put Dot at the right edge of the field This routines sends blank characters to both the address field and data 0 : No dot field of the display. If the dot flag is set then a Dot appears at the right edge The contents of the A register are displayed in hex notation in the data field of the address field. of display the contents of all the CPU registers and flags are affected. 6. GTHEX (022B) – Get Hex Digits 3. RDKBD (02E7) Inputs : B : Display Flag – Input : Nothing 0 – Use address field of display. 1 – Use data field of display. Output : A : character read from the keyboard Outputs : A : Last character read from keyboard. DE : Hex Digits from keyboard last four entered. Destroys : A, H, L, F/E’s. Carry : Set : At least one hex digit read, else it is reset. Destroys contents of all registers. 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. 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 For the RDKBD routine to work correctly, the user must unmask RST 5.5 keys, the received hex digits are invalid. hardware interrupt using the SIM instuction in Version 1. 7. OUTPUT (02B7) 4. DELAY (05F1) Inputs : A : Display Flag – 0 – To use address field This routine takes the 16 bit contents of register pair and counts down 1 – Use data field to zero.Then returns to the calling program. The A,D & E register and flags are affected.
  • 26.
    5-6 5-7 B : Dot Flag – Character Hex Code 1 - Dot at right edge 0 - No dot H 10 L 11 HL : Address of characters to be output. P 12 Destroys all I 13 r 14 Outputs two characters to data field or four to address field. The address of Blank 15 the characters is received as an argument. The routines MODIDT and n 16 MODIAD are useful whenever the user wants to display hexadecimal U 17 information like messages. The userhas to use the output routine with the h 18 following code assigned to the characters to be displayed. The display G 19 technique on 7 segment LED is already explained. J 1A y 1B TABLE 5.2 O 1C Character Hex Code 5.2 SERIAL ROUTINES 0 00 1 01 The following are the routines you can borrow from the serial Monitor. 2 02 Whenever the user straps the SID to TTY ( 20 mA loop ) or CRT 3 03 (RS232C) the serial routine is invoked. The serial routine is AUTOBAUD 4 04 type i.e. on power up or RESET, the contents for HALFBIT and BITTIME 5 05 are undefined. After sending ASCII space character (20H) from a serial 6 06 device, and baud rate is calculated . A BRID routine and a sign on 7 07 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 8 08 COUT routines for any other purpose of block transfer on serial link from 9 09 one system to another etc. Please refer to the chapter on serial I/O A 0A operation for details, before using any of the following routines which can b 0B be obtained from the serial monitor. C 0C d 0D E 0E F 0F
  • 27.
    5-8 5-9 1.CIN (07FD) – Console Input The following are the program examples . The user should load and execute these program to get familiar with the keyboard of This routine returns a character in ASCII code received from the serial MICROFRIEND DYNA-85. devices,to the A register. Condition flags are affected. 5.3 PROGRAMMING EXAMPLES 2.COUT (07FA) – Console Output Example 1 : Familiarizaton 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. Let us start with a simple program to understnd exactly what happens inside a microprocessor when a program is run. 3.CROUT (05EB) – Carriage Return Line Feed First, load the following program using ‘SET’ and ‘INR’ keys. CROUT send CR and LF characters to console, A, B, C and F are destroyed. Address Data Mnemonic Comments 4.NMOUT (06C6) – Hex Number printing NMOUT converts the 8 bit unsigned integer in A register to 2 ASCII F000 31 FF FE LXI SP Define Stack Pointer characters representing 2 hex digits and prints the two digits on console. F003 00 NOP Contents of A,B, and C, F are destroyed. F004 00 NOP F005 00 NOP 5.GETHX (0626) F006 00 NOP F007 00 NOP Outputs : BC : 16 Bit Integer F008 00 NOP D : Character which terminated the integer. F009 CD 6E 03 CALL Display contents of A into Carry : 1 – First character is not delimiter Data Field 0 – If first character is delimiter. F00C 76 HALT Stop Executing Destroys : A, B, C, D, E & F. Now to understand exactly how the program works, let us take three GETHX accepts a string of hex digits from the input stream and returns a simple instructions. value, a 10 bit binary integer, taking only last four digits entered. MVI A, D8 MVI B, D8 ADD B RST 1
  • 28.
    5-10 5-11 The RST 1 instruction will be used so that the register status is saved and Execute the program at F000H and examine registers A & B, this we can examine registers after executing the programs , using the ‘REG’ time the contents of register A are not 23 as before, but it is 34. key. This is the result of instruction a. Execute the program that has been entered at location F000H by ADD B, 80 using the ‘GO’ and ‘EXEC’ keys .‘E’ will appear in the address field Which contents of B are added to A, A become 34 (23+11). showing that the program is being executed. Press ‘RES’ to reset e. Now remove the CF from location F008 and replace it by 00 (NOP) and ‘FrlEnd’ will appear. again. Execute the program at F000H and observe the difference. b. Modify the initial contents of location , as follows : This time the data field shows 34.Instruction CALL MODIDT has F003 3E displayed the contents of register A in the data field.Execution of F004 23 program now select different sets of instruction and study the effect F005 CF of executing those instruction in the similar manner. Execute the program at F000H and examine the register A and B. 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 Contents of A should be 23, because the instruction MVI A , 23 the ‘STEP’ key which is already explained. (3E 23 ) will load register A with 23. Example 2 : RDKBD c. Modify the locations again as follows : The following program illustrate the utility of the subroutine RDKBD. F005 06 Execute the following program and then examine register A . Register A F006 11 will contain the value of the key you has pressed. F007 CF Address Data Mnemonic Comments Execute the program at F000H and examine the registers A and B. F000 32 FF FE LXI SP, FEFF Define Stack Pointer F003 00 NOP Register A contain 23, and Register B will contain 11, because the F004 00 NOP instruction MVI B, 11 (06 11) has now loaded the register B with F005 00 NOP 11. F006 CD E7 02 CALL RDKBD Read Keyboard value d. Modify the location again as follows : Into A. F007 80 F009 CF RST 1 Save registers & return F008 CF to monitor
  • 29.
    5-12 5-13 Address Data Mnemonics Comments Example 3 : MODIDT F000 31 FFFE LXI SP,FEFF Define stack pointer This examples loads register A with a value and displays that value in the F003 00 NOP data field of the display. F004 00 NOP Address Data Mnemonic Comments F005 00 NOP F006 CD E702 CALL RDKBD Read Keyboard into A F000 31 FF FE LXI SP, FEFF Define stack F009 47 MOV B, A Transfer A to B Pointer F00A CD E702 CALL RDKBD Read next key F003 3E 96 MVI A, 96 Load A with F00D 80 ADD B Add B to A Value 96 F00E CD 6E03 CALL MODIDT Display result in data F005 CD 6E 03 CALL MODIDT Display contents field F008 76 HLT of A in the data F001 C3 06F0 JMP F006 Wait for Next cycle field Addition Suggestions : Example 4 : RDKBD + MODIDT 1. Modify this program using the DAA instruction to perform decimal This example combines previous two programs and the Data field of display addition. the value of the key pressed. 2. Write a program for 2 digit decimal addition using DAA and RLC instructions. Address Data Mnemonics Comments Example 6 : 4 DIGIT HEX COUNTER F000 31 FFFE LXI, SP FEFF Define stack pointer This example program displays a 4 digit Hex count in the address field of F003 00 NOP Unmak interrupt the display, from 000 to FFFF and again resets to 0000 before continuing F004 00 NOP further count. The HL register pair is used for counting and the MODIDT F005 00 NOP subroutine is used to obtain the display. F006 CD E702 CALL RKBD Read keyboard Into A Address Data Mnemonic Comments F009 CD 6E03 CALL MODIDT Display A into data field F000 31 FFFE LXI SP,FEFF Define stack pointer F00C C3 06F0 JMP F006 Wait for next key F003 21 0000 LXI H, PUSH H Save HL on stack F007 CD 6203 CALL MODIAD Display count in Example 5 : HEX ADDITION address field This program combines the RDKBD and MODIDT subroutines with the ADD F00A 11 0040 LXI D 4000 Set Delay B instruction.The RDLBD subroutine reads two successive key entries and F00D CD F105 CALL DELAY Wait out Delay adds them together in register A. The MODIDT subroutines then displays F010 EI POP H Restore HL the result of this addition in the data field of the display. F011 23 INX H Increment count F012 C3 06F0 JMP F006 Continue in loop
  • 30.
    5-14 5-15 Example 7 : 2 DIGIT DECIMAL COUNTER This program executedas GO F000 EXEC, and it can be stopped by This program displays s decimal counter in the data field of display. The pressing the VI key. 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 The count can be restarted by pressing any key other than Reset key. program is being executed. Address Data Mnemonics Comments 1. Change the speed of counter by modifying the contents of location F011H which decides the delay. F000 31 FFFE LXI SP,FEFF Define stack Pointer 2. Use the CPI instruction to compare the count with 60, & a conditional F003 3E IB MVI A, IB Load A with 1B jump JNZ, converts this program to count only upto 59.Use the XRA F005 30 SIM Set interrupt mask instruction to reset the accumulator to 00 after counting upto 59. F006 FB EI Enable Interrupt F007 06 00 MVI B, 00 Clear B Now set the delay in such a way that count advances by 1 per F009 78 MOV A, B Load A from B second . This program coverts your MICROFRIEND DYNA – 85 into F00A 27 DAA Decimal adjust A digital stop watch. F00B 47 MOV B, A Load B from A 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 F00C C5 PUSH B Save B on stack either have a 12 hour or 24 hour clock. F00D CD 6E03 CALL MODIDT Display count F010 16 18 MVI D, 18 Set Delay Example 8 : FLASHING DISPLAY ‘LErn’ F012 CD F105 CALL DELAY Wait out delay F015 C1 POP B Restore count This program flashes the message ‘Lern’ in the address field of the F016 04 INR B Increment count dispay. F017 C3 09F0 JMP F009 Continue F020 3E 1F MVI A, 1F Load A with 1 F Adderss Data Mnemonic Comments F022 30 SIM Set interrupt mask F023 CD E702 CALL RDKBD Wait for a key to be F000 11 L Pressed F001 0E E F026 3E 1B MVI A, 1B Load a with 1B F002 14 r F028 30 SIM Set interrupt mask F003 16 n F029 FB EI Enable Interrupt F004 15 blank F02A C9 RET Return F005 15 blank FFCE C3 20F0 JMP F020 Jump to interrupt routine F006 15 blank
  • 31.
    5-16 5-17 Address Data Mnemonics Comments Example 9 : ROLLING DISPLAY F010 31 FFFE LXI SP, FEFF Define stack pointer This program is included in the monitor FIRMWARE and it is accessible F013 3E 01 MVI A, 01 Load A with 1 to use through code ‘0F’. On executing this code the display starts showing the Data field. rolling message “dYnALOG hELPS YoU In LEArning UP”. F015 06 00 MVI B, 00 No decimal point F017 21 06F0 LXI, H F006 Get characters starting The rolling display is using the OUTPUT and DELAY subroutines. To at F006H simulate the effect of rolling, characters are taken one from a string of F01A CD B702 CALL OUTPUT Display them in data characters and the position is shifted from right to left. field F01D 3E 00 MVI A, 00 Use address field When the first letter appears in the highermost position, remaining 5 digits F01F 06 00 MVI B, 00 No Decimal point must be blank. F021 21 00F0 LXI H, F000 Get characters starting at F000 This string starts with 5 blank characters. The last character in the string is F024 CD B702 CALL OUTPUT Display them in address FFH, which is not used to display any letter but it is used only to detect the Field end of string , so that the rolling can once again start from the beginning F027 11 FFFF LXI D,FFFF Set Delay using a conditional jump instruction. F02A CD F105 CALL DELAY Wait out delay F02D 3E 00 MVI A, 00 The complete listing of this program is given in the FIRMWARE listing at F02F 06 00 MVI B, 00 address 0E5BH. F031 21 04F0 LXI H F004 Get blank F034 CD B702 CALL OUTPUT Blank display Transfer this program from EPROM to RAM using CODE 00. Then modify F037 11 FFFF LXI D, FFFF all the address locations suitably so that the same program can be F03A CD F105 CALL DELAY executed form RAM. F03D C3 1DF0 JMP F01D Continue Flashing Now you can put any other message in the string and display that Additional Suggestion : message. 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.
  • 32.
    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.
  • 33.
    6-2 6-3 The later paragraphs will explain the operation of various commands 6.2.1 D – Display memory Command supported under the serial section. The commands are in the form of a D single alphabetical character specifying the command, followed by a list of numerical or alphabetical parameters which are entered as hexadecimal Selected area of addressable memory may be accessed and numbers, The monitor recognizes the character 0 through 9 and A through displayed by the D command. The D command produces a formatted F as legal hexadecimal digits . Longer numbers may be entered but only listing of the memory contents between ( Low Address ) , and (High the last four digits will be retained. Address ) , inclusive on the console. Each line of the listing begins with the address of the first memory location displayed on that line, The only command an alphabetical parameter is the ‘X’ command. The represented as 4 hexadecimal digits , followed by up to 16 memory nature of such parameter will be discussed in the section explaining the command. location, each one represented by 2 hexadecimal digits. 6.1 USE OF MONITOR 6.2.2 G – Program Execute Command G ( Entry Point ) The monitor allows you to enter, checkout and execute small programs. It contains facilities for memory display and modification program loading Control of the CPU is transferred from the monitor to the user program from console device and program initiation with a break-point facility. In by means of the program execute command G. The entry point should addition, the key on the keyboard may be used to initiate your own be an address in RAM which contains an instruction in the program. If keyboard interrupt routine. 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. 6.2 COMMAND STRUCTURE G Command Example In the following paragraphs, the Monitor command language is discussed. Each command is described and examples are included for clarity. Error G 2000 conditions that may be encountered while operating the monitor are Control is passed to location 2000. described later. The monitor requires each command to be terminated by a carriage return 6.2.2 I – Insert Instructions into RAM-1 with the exception of the ‘S’ and ‘X’ commands, the command is not acted I ( Address ) ( Data ) upon until the carriage return is sensed. Therefore, you may abort any command , before entering the carriage return, if you have typed an illegal Single instruction , or an entire user program, are entered into RAM character. with the I command. After sensing the carriage return terminating the Except where indicated otherwise, a single space is synonymous with the command line , the monitor waits for the user to enter a string of comma for use as a delimiter. 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 Consecutive spaces or commas or a space or comma immediately following the command letter, are illegal in all commands except the ‘X’ at the starting address specified and continuing with sequential command. memory locations . Two hexadecimal digits are loaded into each byte of memory.
  • 34.
    6-4 6-5 Seperators between digits ( Commas, Spaces, Carriage Returns ) are 1. Type S, followed by the hexadecimal address of the first memory ignored, illegal characters, however will terminate the command with an location which is displayed, followed by a space or comma. error message. (The character ESC or ALTMODE which is echoed on the console as ‘$’ terminates the digit string. 2. The contents of the location are displayed, followed by a dash (-). 6.2.3 M – Move Memory Command 3. To modify the contents of the location displayed, type in the new data, followed by a space, comma or carriage return. M ( Low Address ) ( High Address ) ( Destination ) The M command moves the contents of memory between (Low Address) If you do not wish to modify the location type only space, comma and ( High Address ) inclusive of the area of RAM beginning at or carriage return . The next higher memory location will ( destination ) .The contents of the field remain undistributed, unless the automatically be displayed as in step ( 2 ). receiving field overlaps the source field. 4. Type a carriage return. The S command will be terminated. The move operation is performed on a Byte–by-Byte basis, beginning at (Low Address). Care should taken if ( Destination ) is between ( Low 6.2.5 X – Examine / Modify CPU Register Command Address) and (High Address). For example, if l ocation 2010H contains X ( Register Identifier ) 1A, the command M2010, 201F, 2011 will result in locations 2010H to The displaying and modification of the CPU registers are 2020H containing ‘1A1A1A’ , and the original contents of the memory accomplished via the X command. The X command uses (Register will be lost. Identifier) to select the particular register to be displayed. The register identifier is asingle alphabetic character denoting a register, as defined The monitor will continue to move data until the source field is exhausted in table. 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 X command register identifiers : stop. Identifier code Register 6.2.4 S – Substitute Memory A Register A S ( Address ) ( Data) B Register B C Register C The S command allows you to examine and optionally modify memory D Register D locations individually. The command functions as follows : E Register E F Flags Byte
  • 35.
    6-6 6-7 The bits in the byte (F) and interrupt mask (I) are encoded as follows : Identifier code Register The format of F register : I Interrupt mask S Z X C X P X C H Register H L Register L M Register H & L combined Carry S Stack Pointer Parity P Program Counter Aux.Carry Zero The command operates as follows : 1. Type X, followed by a register identifier or a carriage return. Sign X= Undefined The format of I register : 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) I M M M 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 0 0 0 0 E 7.5 6.5 5.5 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 Interrupt Mask terminated. If a carriage return is entered in step 3, the X command is terminated. Interrupt enable flag 5. If a carriage return is typed in step (1) above, an annotated list of all 6.3 PROGRAM DEBUGGING registers and their contents are displayed. 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.
  • 36.
    6-8 6-9 6.4 ERROR CONDITIONS 2. I COMMAND EXAMPLE : Each character is checked as it is entered from the console. As soon as 1 1 0 0 0 (CR) the monitor determines that the last character entered is illegal, it aborts 0123456789A$ the commands and issues ‘*’ to indicate an error has occurred. This command puts the following into RAM. 6.5 ADDRESS VALUE ERRORS 3. M COMMAND EXAMPLE : Some commands require an address pair in the form of ( Low Address ) M 0 0 0 0, 0 0 1 0, F 0 0 0 (CR) ( 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 Block area from 0H to 0010H (27 Bytes) is moved to RAM from indicated by the command will be performed on the data at low address F000H. User can check it with two commands. only. D0, 10 (CR) and Addresses are evaluated modulo 210 , thus if a hexadecimal address DF000, F020 (CR) 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 4. S COMMAND EXAMPLE : memory in a command which does not exit in the hardware configuration you are using. SF000 3E- 00-05 D3-00 05-07 (CR) 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 The location F000H which contains 3E is unchanged. Location F001H existent portion of memory is given as the distrinct field in a command, contains 00 is replaced with 05 , location F002H contains D3 is the command effect. replaced with 00 and F0003H contains 05, which is replaced by 07. The user can verify it with the D command. 6.6 COMMAND EXAMPLES 6.7 AUDIO CASSETTE I/F 1. D COMMAND EXAMPLE : DC5, D6 (CR) Till now the full discussion was concentrated on CRT (RS232C) type of communication interface . Additional useful interface provided on 00C5 DA 9D 00 C3 E9 01 CD 00 02 CD E7 SID and SOD lines of 8085 Microprocessor is the Audio Cassette I/F. 00D0 02 FE 10 CA EC 00 32
  • 37.
    6-10 6-11 The System RAM is volatile, i.e. whenever the power is OFF, data is If Err is displayed. It indicates : lost.EPROM is nonvolatile storage but it is costly and consumes more time for erasing and reburning. Open area for RAM (SS-SE) Improper formatting Audio Cassette I/F is cheap and fast to use. You can store 30K bytes Checksum mismatch on one side of the C60 cassette. The two commands SAVE and LOAD Noisy Tape recorde/ tape in operating section explain the use of this interface. In this section the background of this interface is discussed . A file management type of BAUD RATE TABLE 6.1 storage is supported . A very reliable , ‘Simple Hardware Complex (At 6,144 MHz Crystal) 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 Baud Rate Bit-Time Half Bit Byte Start Bit ( 0 ) bit 7 to bit 0 1 stop 110 08C6 04E3 Bit 10*6 60ms 150 05B2 03D9 FILE Hexadecimal file. 300 03D7 026C SAVE / LOAD SEQUENCE : 600 0269 01A5 1200 02B2 0159 4800 0157 012C SS LOAD FILE SE SS CHKSUM MIDSYNC DATA TAIL 9600 0129 0115 SYNC NAME SS SYNC 19200 0112 0109 0107 0104 1KHz 1 Byte 2 Bytes 1Byte 1 Byte 2 KHz Variable 2KHz 4 Sec. 2 Sec. Data 2Sec. Please note that only while using the CIN and COUT routines off line. You have to load these HALFBIT and BITTIME. The data rate is 165 bps in 30 min. You can store (165 * 30 * 60) * 10 Bytes 25 K. In all other situations the AUTOBAUD software will adjust to terminal baud rate ( Any nonstandard baud rates also ). While loading The Output could be connected to MIC or AUX IN of CRTs. the locations are FF9AH for HALFBIT and FFCOH for BITTIME The total procedure for SAVING and LOADING is explained in command For 600 Baud, load the following using the SET command : chapter. FFC0 – 69 FFC1 – 02 FF9A – A5 FF9B – 01
  • 38.
    7-1 CHAPTER 7 FOR THEMICROFRIEND 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.
  • 39.
    7-2 A-1 The details of the 56 pin edge connector is given below : APPENDIX A Pin No. Signal Pin No. Signal Name Name CONNECTOR & STRAPPING DETAILS 1 +5V 29 A0 The connectors on MICROFRIEND-DYNA 85 are designated as 2 +5V 30 A8 follows : 3 GND 31 WR 4 GND 32 RD J1 : 50 pin Edge connector with STD compatible signals 5 NC 33 IORQ J2 : 26 pin flat cable connector for 8155 J3 : 26 pin flat cable cinnector 8255 6 NC 34 MEMRQ J4 : 26 pin flat cable connector for 8279 7 AD3 35 IOEXP J5 : 7 pin power supply connector 8 AD7 36 NC J6 : 7 pin connector for serial I/O 9 AD2 37 NC J7 : 10 pin FRC connector for 8253 10 AD6 38 NC 11 AD1 39 S1 12 AD5 40 S0 Connector J1 : DYNA-85 Bus Interface 13 AD0 41 BUSAK (HLDA) Pin No. Signal Name Pin No. Signal Name 14 AD4 42 BUSRQ (HOLD) 15 A7 43 INTA 1 + 5V 26 A10 16 A15 44 INTRQ 2 + 5V 27 A1 17 A6 45 3 GND 28 A9 18 A14 46 NMIRQ 4 GND 29 A0 19 A5 47 SYSRST 5 RDY 30 A8 20 A13 48 PBRESET 6 ALE 31 WR 21 A4 49 CLK 7 AD3 32 RD 22 A12 50 NC 8 AD7 33 IORQ 9 AD2 34 IO/ M 23 A3 51 NC 10 AD6 35 IOEXP 24 A11 52 NC 11 AD1 36 IOEXP1 25 A2 53 NC 12 AD5 37 IOEXP2 26 A10 54 NC 13 AD0 38 IOEXP3 27 A1 55 +12V 14 AD4 39 NMIRQ 28 A9 56 -12V
  • 40.
    A-2 A-3 Connector J3 : 8255 Connector Pin No. Signal Name Pin No. Signal Name Pin No. Signal Name Pin No. Signal Name 15 A7 40 CS2 1 PA3 2 PA2 16 A15 41 HLDA 3 PA1 4 PA0 17 A6 42 HOLD 5 VCC 6 PA7 18 A14 43 INTA 7 PA6 8 PA5 19 A5 44 INTRQ 9 PA4 10 PC7 20 A13 45 CLK 11 PC6 12 PC5 21 A4 46 RST6.5 13 PC4 14 PC0 22 A12 47 SYSRESET 15 PC1 16 PC2 23 A3 48 PBRESET 17 PC3 18 PB0 24 A11 49 RST5.5 19 PB1 20 PB2 25 A2 50 RST7.5 21 PB3 22 PB4 23 PB5 24 PB6 Connector J2 : 8155 Connector 25 PB7 26 GND Pin No. Signal Name Pin No. Signal Name Connector J4 : 8279 Connector Pin No. Signal Name Pin No. Signal Name 1 PA3 2 PA2 1 RL0 2 RL1 3 PA1 4 PA0 3 RL2 4 RL3 5 VCC 6 PA7 5 RL4 6 RL5 7 PA6 8 PA5 7 RL6 8 RL7 9 PA4 10 TIM OUT 9 OUT A3 10 OUT A2 11 TIM IN 12 PC5 11 OUT A1 12 OUT A0 13 PC4 14 PC0 13 OUT B3 14 OUT B2 15 PC1 16 PC2 15 OUT B1 16 OUT B0 17 PC3 18 PB0 17 NC 18 VCC 19 PB1 20 PB2 19 CNTL 20 SHIFT 21 PB3 22 PB4 21 NC 22 GND 23 PB5 24 PB6 23 SL3 24 SL2 25 PB7 26 GND 25 SL1 26 SL0
  • 41.
    A-4 B-1 Connector J5 : Power Supply Connector APPENDIX B Pin No. Signal Name ADD-ON CARDS FOR MICROFRIEND DYNA-85 1 GND 2 GND 3 + 5V The MICROFRIEND DYNA-85 trainer and development system 4 + 5V supports various type of add-on interfacing cards like DYNA study 5 + 12V card, PIO cards. These cards are designed for the novice as well as 6 -12V those who already know about microprocessors, to carry out 7 NC experiments for the purpose of thorough understanding of the peripheral chips and interfacing with external world. Connector J6 : Serial Connector List of add on card supported by DYNA-85 is as follows : Pin No. Signal Name 1 NC 1) DYNA-SERIES PERIPHERAL STUDY CARDS 2 NC 3 NC [A] DYNA-PIO : 8155 STUDY CARD 4 NC [B] DYNA-PIO/1 : 8212 STUDY CARD 5 TXD [C] DYNA-PIO/2 : 8255 STUDY CARD 6 RXD [D] DYNA-TIMER : 8253 STUDY CARD 7 GND [E] DYNA-SERIAL : 8251 STUDY CARD [F] DYNA-LBDR : LATCH, BUFFER, DECODER, RAM Connector J7 : 8253 Connector STUDY CARD [G] DYNA-INTR : 8259 STUDY CARD Pin No. Signal Name Pin No. Signal Name [H] DYNA-KBDISP : 8279 STUDY CARD [I] DYNA-DCM : DC MOTOR CONTROL 1 GATE 0 2 GATE 1 STUDY CARD 3 GATE 2 4 GND [J] DYNA-TWH : THUMBWHEEL STUDY CARD 5 CLK 0 6 OUT 0 7 CLK 1 8 OUT 1 9 CLK 2 10 OUT 2 And many more study cards will be made available in the DYNA- SERIES.
  • 42.
    B-2 D-1 2) DMS-PIO CARDS APPENDIX D [A] HEX KEYPAD CARD. MICROFRIEND DYNA-85 MONITOR LISTING [B] STEPPER MOTOR CONTROLLER CARD. ADDRESS NAME FUNCTION [C] ELEVATOR SIMULATOR CARD. [D] D TO A CONVERTER CARD. 0000 RST 0 COLD START Resets & Reinitializes [E] A TO D CONVERTER CARD. all [F] LOGIC INTERFACE CARD. 0008 RST 1 WARM START Stores all CPU status [G] SERIAL DISPLAY CARD. 004E SIGNONK Friend Message [H] DIGITAL I/O SIMULATOR CARD 0066 CMMND Keyboard command recognizer For further information or demonstration of the above cards with 0092 REG 'REG' Command entry DYNA-85, please contact us or our dealers. 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
  • 43.
    D-2 D-3 ADDRESS NAME FUNCTION ADDRESS NAME FUNCTION 029F * INSDG INSERT hex digit in A into DE 065B ** GETNM Get specified count of 02A8 NXTRG Advance register pointer to next numbers from input reg. stream 02B7 ** OUTPUT Output characters to display 06A0 * HIL0 Compare HL & DE 02E7 ** RDKBD Read characters from KBD in A 06C7 ** NMOUT Outputs two ASCII 02F7 RETF Return False characters for each 02FA RETT Return True number in A 02FC RGLOC Get register save location 06E2 PRVAL Convert hex to ASCII 0309 RGNAM Display register name 06EA REGDS Display contents of 031B RSTOR Restore user registers register save one 0344 SETRG SET Register pointer location 035F MODIAD Update address field of display 071B RGADR From a character from CURAD denoting register gets 0362 ** MODADI Update address field of display the saved location from HL address 036B MODIDT Update address field of display 0732 SRET Success return from WRDT 0734 STHF0 Store to lower half zero 036E ** MODIDT1 Update data field of display 073F STHLF Store into specified half from A byte of DE the 4 bit 03FA SIGNON Print MICROFRIEND-I on TTY value in C 0408 GETCM Get commands from TTY 075E VALDG 0-9 & A-F valid hex 0437 DCMD Display memory block degit check 0468 GCMD Execute user program 0779 VALDL Valid delimiter check 0486 IMCD Insert byte into memory 0841 CODECMD CODE Command 04D0 SCMD Block move during memory 085C MOVE BLOCK Move Block of Memory 04F0 SCMD Examine & Modify memory CODE 00 0514 XCMD Examine & Modify registers 088D FILL BLOCK Fill block of RAM with 0590 ** CIN Gets character in A from TTY variable CODE 01 05BB * CNVBN Converts ASCII hex to Binary 08A6 COMPL CMENT Complement RAM 05C4 ** COUT Outputs ASCII character in C to block CODE 0E TTY 08BD BLOCK Search Search a given block 05EB ** CROUT Outputs CR & CF to console for variable CODE 04 05F1 ** DELAY Returns when count in DE 08D4 * DISPLAY Display become 0 match/mismatch & wait 05F8 ** ECHO Gets character from console & for INR sends it back 08DD INSERT Insert a byte in a block 0611 * ERROR Outputs to console CODE 02 061C FRET 0929 DELETE Delete a byte from a 061F ** GETCH Get a character from input block code 03 stream 0951 HEX-DECIMAL CODE 05 Hexadecimal 0626 ** GETHX Accept a string of hex digits to Decimal from input stream
  • 44.
    D-3 D-4 ADDRESS NAME FUNCTION ADDRESS NAME FUNCTION -- DEC-HEX CODE 06 Decimal to 0D28 LOAD Load from cassette to Hex conversion RAM 09D7 SERIAL Baud Rate id, Sign, 0D5C TAPEIN Input a byte from tape Command 0D84 BITIN Input a bit at a time 09E3 BRID Baud Rate identification from Tape 0A10 CNVBN Convert to Binary 0DAB PRVRG Previous register 0A19 TPO Break point loading 0DBA CHK INR or DCR Check 0A4B SSTEP Break point checking 0DC3 INR DCR 0A78 * LDALL Load SS, SE & DS 0DD9 VALCHI Validity Check 0A93 LDSSE Load SS & SE 0DF8 * BITSPAS Pass Bits in serial 0AC2 * DTDISP Display as per code mode 0AE6 BLANKCHK Check EPROM for 0E0F SRL1 Display Serial erasure code 0B 0E50 * COMPARE Block compare 0B16 Pr LOAD Load Pr (Program)type compares two blocks 0B35 DUPL Duplicate CODE 0A SS, SE & ds 055B COPY Copy PROM into RAM 0E5B CODE OF CODE 09 0EA2 Guess game CODE 0D 0B65 CHKSUM Checksum given PROM CODE 'OC' * These routines are very useful to the user & are re-explained 0BA7 VERIFY Verify RAM VS EPROM in the programming section 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
  • 45.
    D-5 D-6 0028 C3C2FF JMP RST 5.5 ;BRANCH TO RST 5 SOFTWARE LISTING OF MICROFRIEND-DYNA-85 LOCATION IN RAM INPUT INTERRUPT ENTRY POINT (RST 5.5) LOC OBJ SOURCE STATEMENT 002C ORG 2CH "RESET" KEY ENTRY POINT-COLD 002C C397FF JMP ININT ;BRANCH TO USER RAM RST START RST 0 ENTRY POINT 6 ENTRY POINT 0000 3E00 MVI A, KMODE ;GET CONTROL 0030 ORG 30H CHARACTER 0030 C3C5FF JMP RSET6 ;BRANCH TO RST 6 0002 D30500 OUT CTRL ;SET LOCATION IN RAM HARD KEYBOARD/DISPLAY MODE WIRED USER INTERRUPT 0005 C3F101 JMP CLDST ;GO FINISH COLD START ENTRY POINT (RST 6.5) CLDBK ;THEN JUMP BACK HERE 0034 ORG 34H 0008 ORG 8 0034 C3C8FF JMP RESET 6.5 ;BRANCH TO RST 675 SAVE REGISTERS LOCATION IN RAM 0008 22EFFF SHLD LSAV ;SAVE H & L 0038 ORG 38H REGISTERS 0038 C3CBFF JMP RSET7 ;BRANCH TO RST 7 000B E1 POP H ;GET USER PROGRAM LOCATION IN RAM COUNTER "VECTORED INTERRUPT" FROM TOP OF STACK KEY ENTRY POINT(RST 7.5) 000C 22F2FF SHLD PSAV ;/AND SAVE IT 003C ORG 3CH 000F F5 PUSH PSW ; 003C C3CEFF JMP USINT ;BRANCH TO USER 0010 E1 POP H INTERRUPT LOCATION IN 0011 22EdFF SHLD FSAV ;SAVE FLIP/FLOP & RAM. REGISTER A RES10 ; CONTINUE SAVING USER 0014 210000 LXI H, 0 ;CLEAR H & L STATUS 0017 39 DAD SP ;GET USER STACK POINTER ;GET USER INTERRUPT 0018 22F4FF SHLD SSAV ;AND SAVE IT STATUS AND INTERRUPT 001B 21EDFF LXI H, BSAV+1 ;SET STACK POINTER MASK FOR SAVING 003F 20 RIM ;GET USER INTERRUPT 001E F9 SPHL ;REMAINING REGISTERS STATUS AND INTERRUPT 001F C5 PUSHB ;SAVE B& C MASK 0020 D5 PUSHD ;SAVE D & E 0040 E60F ANI 0FH ;KEEP STATUS & MAK BITS 0021 C33F00 JMPRES10 ;LEAVE ROOM FOR 0042 32F1FF STA ISAV ;SAVE INTERRUPT STATUS & VECTORED INTERRUPTS MASK TIMER INTERRUPT (TRAP) ENTRY POINT (RST 4.5)-- 0045 3E0E MVI A, UNMASK ;UNMASK INTERRUPTS 0024 ORG 24H FOR MONITOR USE 0024 C35701 JMP STP 25 ;BACK TO SINGLE STEP 0047 30 STM ;INTERRUPTS DISABLED ROUTINE RST5 ENTRY WHILE MONITOR IS POINT RUNNING (EXCEPT WHEN 0028 ORG 28H WAITING FOR INPUT) 0049 20 RIM ;TTY OR KEYBOARD MONITOR? 004A 07 RLC ;IS TTY CONNECTED?
  • 46.
    D-7 D-8 **************************************** 0048 DAD709 JC SERIAL ;YES - BRANCH TO FUNCTION ; COMMD-COMMAND RECOGNIZER TTY MONITOR INPUTS ; NONE ;NO - ENTER KEYBOARD OUTPUT ; NONE MONITOR CALLS ; RDKBD, ERR, SET, REG, RUN, STEP, CODE, SAVE, LOAD DESTROYS ; A, B, C, D, E, H, L, F/F'S ****************************************** BEGINNING OF KEYBOARD MONITOR CODE 0066 31E9FF LXIH MNSTK ;MONITOR SP INITIALIZED ***************************************************** 0069 3E90 MVI A, ADISP ;USE ADDRESS FIELD OUTPUT SIGN-ON MESSAGE 006B D305 OUT CNTRL ;OUTPUT TO CNTRL 004E AF XRA A ;ARG-USE ADDRESS FIELD 006D 3E1E MVI A, F ;PROMPT OF DISPLAY 006F D304 OUT DATA ;OUTPUT F TO START OF 004F 0600 MVI B, NODOT ;ARG-NO DOT IN ADDRESS ADDRESS FIELD 0071 00 NOP 0051 21A063 LXI H, SGNAD ;ARG-GET ADDRESS OF 0072 CDE702 CALL RDKBD ;READ KEYBOARD ADDRESS FIELD PORTION 0075 010B00 LXI B, NUMC ;COUNTER FOR NUMBER OF OF SIGN-ON MESSAGE COMMANDS IN C 0054 CDB702 CALL OUTPUT ;OUTPUT SIGN ON MESSAGE 0078 210008 CMD10 LXI H, CMDTB ;GET ADDRESS OF TO ADDRESS FIELD COMMAND TABLE 0057 3E01 MVI A, DTFLD ;ARG-USE DATA FIELD OF 0078 BE CMP M ;RECOGNIZE THE COMMAND? DISPLAY 007C CA8700 JZ CMD15 ;YES GO PROCESS IT 0059 0600 MVI B, NODOT ;ARG-NO DOT IN DATA FIELD 007F 23 INX H ;NO-NEXT COMMAND TABLE PORTION OF SIGN-ON ENTRY MESSAGE 0080 0D DCR C ;END OF TABKE? 005B 21AA03 LXI H, SGNOT ;ARG-GET ADDRESS OF 0081 C27800 JNZ CMD10 ;NO-GP CHECK NEXT ENTRY DATA FIELD PORTION OF ;YES - COMMAND UNKNOWN SIGN-ON MESSAGE 0084 C31502 JMP ERR ;DISPLAY ERROR MESSAGE 005E CDB702 CALL OUTPUT ;O/P SIGN-ON MESSAGE TO AND GET ANOTHER DATA FIELD COMMAND 0061 3E80 MVI A, EMPTY CMD15 0063 32FEFF STA IBUFF ;SET INPUT BUFFER EMPTY 0087 210B08 LXI H, CMDAD ;GET ADDRESS OF FLAQ COMMAND ADDRESS TABLE 008A 0D DCR C ;ADJUST COMMAND COUNTER COUNTER ACTS AS POINTER TO COMMAND ADDRESS TABLE
  • 47.
    D-9 D-10 008B 09 DAD B ;ADD POINTER TO TABLE 00A3 7E MOV A, M ;GET REGISTER CONTENTS ADDRESS 00A4 32F8FF STA CURDT ;STORE REGISTER 008C 09 DAD B ; TWICE BECAUSE TABLE HAS CONTENTS AT CURRENT 2 BYTE ENTRIES DATA 008D 7E MOV A, M GET LOW ORDER BYTE OF 00A7 0601 MVI B, DOT ;ARG-DOT IN DATA FIELD COMMAND ADDRESS 00A9 CD6B03 CALL UPDOT ;UPDATE DATA FIELD OF 008E 23 INX H DISPLAY 008F 66 MOV H, M ;GET HIGH ORDER BYTE OF 00AC 0601 MVI A, DTFLD ;ARG-USE DATA FIELD OF COMMAND DISPLAY 0090 6F MOV L, A ;PUT LOW ORDER BYTE IN L 00AE CD2B02 CALL GTHEX ;GET HEX DIGIT-WERE ANY COMMAND ROUTINE DIGIT RECEIVED FALSE ADDRESS IS NOW IN H & L EXM10;NO-DOT UPDATE 0091 E9 PCHL ;BRANCH TO ADDRESS IN H REG.CONTENT &L 00B1 D2B800 JNC EXM10 00B4 CDFC02 CALL RGLOC ;YES GET REGISTER SAVE ************************ LOCATION IN H & L COMMAND ROUTINES 00B7 73 MOV M, E ;UPDATE REGISTER ************************ CONTENTS EXAM10 FUNCTION ; REG EXAMINE AND MODIFY REGISTERS 00B8 FE11 CPI PERIO ;WAS LAST CHARACTER A INPUTS ; NONE PERIOD ? OUTPUTS ; NONE 00BA CAE901 JZ CLDIS ;YES CLEAR DISPLAY AND CALLS ; CLEAR, SETRG, ERR, RGNAM, RGLOC, TERMINATE COMMAND UPDDT, GTHEX, NXTRG 00BD FE10 CPI COMMA ;WAS LAST CHARACTER. ? DESTROYS ; A, B, C, D, E, H, L, F/F'S REG 00BF C2E60D JNZ PRRG ;NO JUMP TO PREVIOUS REG. 0092 0601 MVI B, DOT;ARG-DOT IN ADDRESS 00C2 CDA802 CALL NXTRG ;YES ADVANCE REG. FIELD OF DISPLAY POINTER TO NEXT REG. 0094 CDD701 CALL CLEAR ;CLEAR DISPLAY ANY MORE REGISTER TRUE 0097 CD4403 CALL SETRG ;GET REGISTER EXAM05 ;YES CONTINUE DESIGNATOR FROM PROCESSING WITH NEXT KEYBOARD AND SET REGISTER REGISTER/POINTER 00C5 DA9D00 JC EXAM05 ACCORDINGLY WAS 00C8 C3E901 JMP CLDIS ;NO CLEAR DISPLAY AND CHARACTER A REGISTER TERMINATE COMMAND DESIGNATOR FALSE ERR ;NO-DISPLAY ERROR MSG. ************************************************* AND TERMINATE COMMAND FUNCTION RUN -EXECUTE USER PROGRAM 009A D21502 JNC ERR INPUTS ; NONE EXAM05 OUTPUTS ; NONE 009D CD0903 CALL RGNAM ;OUTPUT REGISTER NAME CALLS ; DISPC, RDKBD, CLEAR, ERR, OUTPT TO ADDRESS FIELD DESTROYS ; A, B, C, D, E, H, L, F/F'S 00A0 CDFC02 CALL RGLOC ;GET REGISTER SAVE LOCATION IN H & L
  • 48.
    D-11 D-12 00FA C31B03 JMP RSTOR ;RESTORE USER RUN REG.INCLUDING PROGRAM 00CB CD0002 CALL DISPC ;DISPLAY USEER PROGRAM COUNTER i.e.BEGIN COUNTER EXECUTION OF USER 00CE CDE702 CALL RDKBD ;READ FROM KEYBOARD PROGRAM 00D1 FE11 CPI PERIO ;IS CHAR. IS PERIOD ? ************************************************************** 00D3 CAEC0 JZ GIO ;YES GO EXECUTE THE FUCTION ; STEP-SINGLE STEP(EXECUTE 1 USER COMMAND INSTRUCTION) ;NO ARG CHARACTER IS IN A INPUTS ; NONE 00D6 32FEFF STA IBUFF ;REPLACE CHARACTER IN OUTPUTS ; NONE INPUT BUFFER CALLS ; DISPC, RDKBD, CLEAR, GTHEX, ERR 00D9 0601 MVI B, DOT ;ARG DOT IN ADDRESS DESTROYS; A, B, C, D, E, H, L, F/F'S FIELD STEP 00DB CDD701 CALL CLEAR ;CLEAR DISPLAY 00FD CD0002 CALL DISPC ;DISPLAY USER 00DE 0600 MVI B, ADFLD ;ARG USE ADDRESS FIELD PROG.COUNTER 00E0 CD2B02 CALL GTHEX ;GET HEX DIGITS 0100 CDE702 CALL RDKBD ;READ FROM KEYBOARD 00E3 FE11 CPI PERIO ;WASLASTCHAR. A PERIOD 0103 FE11 CPI PERIO ;WAS CHARACTER A 00E5 C21902 JNZ ERR ;NO-DISPLAY ERROR MSG. PERIOD? AND TERMINATE COMMAND 0105 CAE901 JZ STP20 ;YES GO TO STP20 00E8 EB ECHG ;PUT HEX VALUE FROM 0108 FE10 CPI COMMA ;WAS LAST CHARATER '.'? GTHEX TO H & L 010A CA2601 JZ CLD1S ;YES-GO SET TIMER 00E9 22F2FF SHLD PSAV ;HEX VALUE IS NEW USER NO-CHARACTER FROM PC KEYBOARD WAS NEITHER 00EC 0600 G10 MVI B, NODOT ;YES-ARG-NO DOT IN PERIOD NOR COMMA ADDRESS FIELD 010D 32FEFF STA IBUFF ;REPLACE THE CHARACTER 00EE CDD701 CALL CLEAR ;CLEAR DISPLAY IN THE INPUT BUFFER 00F1 AF XRA A ;ARG-USE-NO ADDRESS 0110 0601 MVI A, DOT ;ARG-DOT IN ADDRESS FIELD OF DISPLAY FIELD 00F2 0600 MVI B, NODOT ;ARG-NO DOT IN 0112 CDD701 CALL CLEAR ;CLEAR DISPLAY ADDR. FIELD 0115 0600 MVI B, ADFLD ;ARG-USE ADDRESS FIELD 00F4 21A203 LXI H, EXMSG ;GET ADDRESS OF OF DISPLAY EXECUTION MESSAGE 0117 CD2B02 CALL GTHEX ;GET HEX DIGIT-WERE ANY IN H & L DIGITS RECIEVED ? 00F7 CDB702 CALL OUTPT ;DISPLAY EXECUTION FALSE ERR ;NO DISPLAY ERROR MSG. MESSAGE AND TERMINATE COMMAND 011A D21502 JNC ERR
  • 49.
    D-13 D-14 011D EB XCHG ;HEX VALUE FROM GTHEX TO HL 0161 F1 POP PSW ;RETRIEVE PSW 011E 22F2FF SHLDX PSAV ;HEX VALUE IN NEW USER PC 0162 22EFFF SHLD PSAV ;SAVE H & L 0121 FE11 CPI PERIO ;WAS LAST CHAR. FROM GTHEX A 0165 E1 POP H ;GET USER PROGRAM PERIOD ? COUNTER FROM TOP OF 0123 C4190A CNZ STP0 ;NO-GO TO CHECK BREAK THE STACK 0126 3AF1FF STP20 LDA ISAV ;GET USER INTERRUPT MASK 0166 22F2FF SHLD PSAV ;SAVE USER PC 0129 E608 ANI 08H ;KEEP INTERRUPT STATUS 0169 F5 PUSH PSW 012B 32FDFF STA TEMP ;SAVE USER INTERRUPT 016A E1 POP H STATUS 016B 22EDFF SHLD PSAV ;SAVE FLIPFLOP & A REG. 012E 2AF2FF LHLD PSAV ;GET USER PC 016E 210000 LXI H, 0H ;CLEAR H & L 0131 7E MOV A, M ;GET USER INSTRUCTION 0171 39 DAD SP ;GET USER STACK POINTER 0132 FEF3 CPI (DI) ;DI INSTRUCTION ? 0172 22F4FF SHLD SSAV ;SAVE USER STACK 0134 C23B01 JNZ STP21 ;NO POINTER 0137 AF XRA A ;YES-RESET USER INTR. 0175 21EDFF LXI H, BSAV+1 ;SET MONITOR STACK STATUS POINTER 0138 C34201 STP21 JMP STP22 0178 F9 SPHL ;SAVING REMAINING USER 013B FEFB CPI (EI) ;EI INSTRUCTION ? REG 013D C24501 JNZ STP23 ;NO 0179 C5 PUSH B ;SAVE B & C 0140 3E08 MVI A,08H ;YES SET USER INTR. STATUS 017A D5 PUSH D ;SAVE D & C 0142 32FDFF STP22 STA TEMP ;SAVE NEW USER INTR 017B 20 RIM ;GET USER INTERRUPT STATUS MASK 0145 3E40 MVI A,(TIMER SHR8);HIGH ORDER BITS OF 017C E607 ANI 07H ;KEEP MASK BITS TIME OR TMODE VALUE 017E 21FDFF LXI H, TEMP ;GET USER INTERRUPT OR'ED WITH MODE STATUS 0147 D30D OUT TIMHI 0181 B6 ORA M ;OR IT INTO MASK 0149 3EC5 MVI A,TIMER AND 0FFH;LOW ORDER BITS 0182 32F1FF STA ISAV ;SAVE INTR. STATUS& MASK OFTIMER VAL 0185 3E0E MVI A, UNMASK;UNMASK INTERRUPT 014B D30C OUT TIMLO FOR MONITOR USE 014D 3AFFFF LDA USCSR ;GRT USER IMAGE OF WHAT'S 0187 30 SIM IN CSR 0188 C34B0A JMP SSTEP ;GO GET READY FOR 0150 F6C0 ORI TSTRT ;SET TIMER COMMAND BITS ANOTHER INSTR. 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
  • 50.
    D-15 D-16 *************************************************** 01AF CD6B03 CALL UPDDT ;UPDATE DATA FIELD OF FUNCTION : SET-SUBSTITUTE MEMORY DISPLAY INPUTS : NONE 01B2 0601 MVI B, DTFLD ;ARG-USE DATA FIELD OUTPUTS : NONE 01B4 CD2B02 CALL GTHEX ;GET HEX DIGITS-WERE ANY CALLS : CLEAR, GTHEX, UPADD, UPDDT, ERR HEX DIGITS RECIEVED? DESTROYS : A, B, C, D, E, H, L, F/F'S 01B7 F5 PUSH PSW ;SAVE LAST CHARACTER SET FALSE SUB10 ;NO LEAVE DATA UNCHANGED 018B 0601 MVI B, DOT ;ARG-DOT IN ADDR. FIELD 01B8 D2C401 JNC SUB10 ;AT CURRENT ADDRESS 018D CDD701 CALL CLEAR ;CLEAR THE DISPALY 01BB 2AF6FF LHLD CURAD ;YES-GET CURRENT 0190 0600 MVI B, ADFLD ;ARG-USE ADDRESS FIELD ADDRESS IN H & L OF DISPLAY 01BE 73 MOV M, E ;STORE NEW DATA AT 0192 CD2B02 CALL GTHEX ;GET HEX DIGITS-WERE ANY CURRENT ADDRESS DIGIT RECIEVED MAKE SURE DATA WAS ACTUALLY STORED IN CASE FALSE ERR ;NO-DISPLAY ERROR MSG. CURRENT ADDRESS IN ROM OR IS NON-EXISTANT AND 01BF 7B MOV A, E ;DATA FOR A COMPARISON 0195 D21502 JNC ERR ;TERMINATE COMMAND 01C0 BE CMP M ;WAS DATA STORED 0198 EB XCHG ;ASSIGN HEX VALUE CORRECTLY RETURNED BY GTHEX TO 01C1 C21502 JNZ ERR ;NO DISPLAY ERROR MSG. CURRENT ADDR. AND TERMINATE COMMAND 0199 22F6FF SHLD CURAD 01C4 C3C30D SUB10 JMP INRDCR ;INCREMENT 019C CDBA0D SUB05 CALL CHK ;CALL CHK ROUTINE DECREMENT CHECK 019F 000000 NOP 01C7 22F6FF SUB20 SHLD CURAD 01A1 0600 SUB MVI B, NODOT ;ARG-NO DOT IN ADDR. 01CA C3A101 JMP SUB ;RETRIEVE LAST FIELD CHARACTER 01A3 CD5F03 CALL UPDAD ;UPDATE ADDR.FIELD OF 01CF FE11 SUB15 CPI PERIO ;WAS LAST CHARACTER '.'? DISPLAY 01D1 C21502 JNZ ERR ;NO-DISPLAY ERROR MSG. 01A6 2AF6FF LHLD CURAD ;GET CURRENT ADDR. IN H & AND TERMINATE COMMAND L 01D4 C3E901 JMP CLDIS ;YES-CLEAR DISPALY AND 01A9 7E MOV A, M ;GET DATA BYTE POINTED TERMINATE COMMAND TO BY CURRENT ADDRESS 01AA 32F8FF STA CURDT ;STORE DATA BYTE AT CURRENT DATA 01AD 0601 MVI B, DOT ;ARG-DOT IN DATA FIELD
  • 51.
    D-17 D-18 ******************************************************************* ********************************************** FUNCTION : CLDIS-CLEAR DISPLAY AND TERMINATE UTILITY ROUTINES COMMAND ********************************************** INPUTS : NONE FUNCTION : CLEAR-CLEAR THE DISPLAY OUTPUTS : NONE INPUTS : B-DOT FLAG 1 - MEANS DOT IN ADDR. FIELD OF CALLS : CLEAR DISPLAY DESTROYS : A, B, C, D, E, H, L, F/F'S 0 - MEANS NO DOT DESCRIPTION : CLDIS IS JUMPED TO BY COMMAND OUTPUTS : NONE ROUTINES WISHING TO TERMINATE CALLS : OUTPT NORMALLY. CLDIS CLEARS THE DESTROYS : A, B, C, D, E, H, L, FF'S DISPLAY AND BRANCHES TO THE DESCRIPTION : CLEAR SENDS BLANK CHARACTERS COMMAND RECOGNISER. TO BOTH THE ADDRESS & DATA 01E9 0600 CLDIS MVI B, NODOT ;ARG-NO DOT IN ADDR. FIELD OF THE DISPLAY.IF THE FIELD DOT FLAG IS SET THEN A DOT WILL 01EB CDD701 CALL CLEAR ;CLEAR THE DISPLAY APPEAR AT THE RIGHT EDGE OF 01EE C36600 JMP COMMAND ;GO GET ANOTHER THE ADDRESS FIELD. COMMAND CLEAR 01D7 AF XRA A ;ARG-USEADDRESS FIELD OF **************************************************** DISPLAY ARG-FLAG FOR DOT IN FUNCTION : CLDST -COLD START ADDR. FIELD IN B INPUTS : NONE 01D8 219A03 LXI H, BLNKS ;ARG-ADDRESS OF BLANKS OUTPUTS : NONE FOR DISPLAY CALLS : NOTHING 01DB CDB702 CALL OUTPT ;O/P BLANKSTOADDR.FIELD DESTROYS : A 01DE 3E01 MVI A, DTFLD ;ARG-USE DATA FIELD FOR DESCRIPTION : CLDST IS JUMPED BY THE MAIN DISPLAY COLD START 01E0 0600 MVI B, NODOT ;ARG-USE NO DOT IN DATA PROCEDURE,COMPLETES COLD FIELD START INITIALIZATION 01E2 219A03 LXI H, BLNKS ;ARG-ADDRESS OF BLANKS AND JUMPS BACK TO THE MAIN FOR DISPLAY COLD START PROCEDURE. 01E5 CDB702 CALL OUTPT ;OUTPUT BLANKS TO DATA CLDST FIELD 01F1 3EC0 MVI A, KBINT ;GET CONTROL CHAR. 01E8 C9 RET ;RETURN 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
  • 52.
    D-19 D-20 *************************************************************** ********************************************* FUNCTION : DISPC-DISPLAY PROGRAM COUNTER FUNCTION : ERR-DISPLAY ERROR MASSEGE INPUTS : NONE INPUTS : NONE OUTPUTS : NONE OUTPUTS : NONE CALLS : UPDAD,UPDDT CALL : OUTPT DESTYROYS: A, B, C, D, E, H, L, FF'S DESTROYS : A, B, C, D, E, H, L, FF'S DESCRIPTION : DISPC- DISPLAYS THE USER DESCRIPTION : ERR IS JUMPED TO BY COMMAND PROGRAM COUNTER IN ADDRESS ROUTINES WISHING TO TERMINATE FIELD OF THE DISPLAY,WITH A DOT BECAUSE OF AN ERROR ERR AT THE RIGHT EDGE OF THE OUTPUTS AN ERROR MESSEGS TO FIELD.THE BYTE OF DATA THE DISPLAY AND BRANCHES TO ADDRESSED BY THE PROGRAM THE COMMAND RECOGNISER. COUNTER IS DISPLAYED IN THE ERR DATA FIELD OF DISPLAY 0215 AF XRA A ;ARG-USE ADDRESS FIELD DISPC 0216 0600 MVI B, NODOT ;ARG-NO DOT IN ADDRESS 0200 2AF2FF LHLD PSAV ;GET USER PROGRAM FIELD COUNTER 0218 219E03 LXI H, ERMSG ;ARG-ADDRESS OF ERROR 0203 22F6FF SHLD CURAD ;MAKE IT THE CURRENT MESSAGE ADDRESS 021B CDB702 CALL OUTPT ;OUTPUT ERROR MESSAGE 0206 7E MOV A, M ;GET THE INSTRUCTION TO ADDRESS FIELD AT THAT ADDRESS 021E 3E01 MVI A, DTFLD ;ARG-USE DATA FIELD 0207 32F8FF STA CURDT ;MAKE IT THE CURRENT 0220 0600 MVI B, NODOT ;ARG-NO DOT IN DATA FIELD DATA 0222 219A03 LXI H, BLNKS ;ARG-ADDRESS OF BLANKS 020A 0601 MVI B, DOT ;ARG-DOT IN ADDRESS FOR FIELD 0225 CDB702 CALL OUTPT ;OUTPUT BLANKS TO DATA 020C CD5F03 CALL UPDAD ;UPDATE ADDRESS FIELD OF FOR DISPLAY DISPLAY 0228 C36600 JMP CMMND ;GO GET A NEW COMMAND 020F 0600 MVI B, NODOT ;ARG-NO DOT IN DATA FIELD 0211 CD6B03 CALL UPDDT ;UPDATE DATA FIELD OF DISPLAY 0214 C9 RET
  • 53.
    D-21 D-22 ******************************************** 0235 FE10 CPI 10H ;IS CHAR. A HEX DIGIT? FUNCTION : GTHEX-GET HEX DIGITS 0237 D25502 JNC GTH20 ;NO-GO CHECK FOR INPUTS : B - DISPLAY FLAG -0 MEANS USE ADDRESS TERMINATOR. FIELD OF DISPLAY YES-ARG-NEW HEX DIGIT IS 1 - MEANS USE DATA FIELD OF DISPLAY IN A OUTPUTS : A - LAST CHARACTER READ FROM KEYBOARD 023A D1 POP D ;ARG-RETRIEVE HEX VALUE DE - HEX DIGITS FROM KEYBOARD EVALUATED 023B CD9F02 CALL INSDG ;INSERT NEW DIGIT IN HEX MODULO 2**16 VALUE CARRY - SET IF AT LEAST ONE VALID HEX 023E C1 POP B ;RETRIEVE DISPLAY FLAG DIGIT WAS READ RESET OTHERWISE 023F 0301 MVI C, 1 ;SET HEX DIGIT FLAG i.e. CALLS : RDKBD, INSDG, HXDSP, OUTPT HEX DIGIT HAS BEEN READ DESTROYS: A, B, C, D, E, H, L, FF'S 0241 C5 PUSH B ;SAVE DISPLAY AND HEX DESCRIPTION : GTHEX ACCEPTS A STRING OF HEX DIGIT FLAGS DIGITS FROM THE KEYBOARD, 0242 D5 PUSH D ;SAVE HEX VALUE DISPLAYS THEM AS THEY ARE 0243 78 MOV A, B ;TEST DISPLAY FLAG RECIEVED AND RETURNS THEIR 0244 0F RRC ;SHOULD ADDRESS FIELD VALUE AS A 16 BIT INTEGER. IF FIELD OF DISPLAY BE USED MORE TAHN 4 HEX DIGITS ARE 0245 D24902 JNC GTH10 ;YES-USE HEX VALUE AS IS RECIEVED ONLY THE LAST 2 HEX NO-ONLYLOWORDER BYTE DIGITS ARE DISPLAYED IN THE OF HEX VALUE SHOULD BE DATA OF THE DISPLAY. IN EITHER USED FOR DATA FIELD OF CASE,A DOT WILL BE DISPLAYED AT DISPLAY THE RIGHTMOST EDGE OF THE 0248 53 MOV D, E ;PUT LOW ORDER BYTE OF FIELD. A CHARACTER WHICH IS HEX VALUE IN D NOT A HEX DIGIT TERMINATES ARG-HEX VALUE TO BE THE STRING AND IS RETURNED AS EXPANDED IN D & E AN OUTPUT OF THE FUCTION. IF 0249 CD6C02 GTH10 CALL HXDSP ;EXPAND HEX VALUE THE TERMINATORS IS NOT A FOR DISPLAY ARG- PERIOD OR A COMMA THEN ANY ADDRESS OF EXPANDED HEX DIGITS WHICH MAY HAVE HEX VALUE IN H & L RECIEVED ARE CONSIDERED TO BE 024C 78 MOV A, B ;ARG-PUT DISPLAY FLAG IN INVALID. THE FUNCTION RETURNS A A FLAG INDICATING WHETHER 024D 0601 MVI B, DOT ;ARG-DOT IN APPROPRIATE OR NOT ANY VALID HEX DIGITS FIELD WERE RECIEVED. 024F CDB702 CALL OUTPT ;OUTPUT HEX VALUETO DISPLAY 022B 0E00 GTHEX MVI C, 00 ;RESET HEX DIGIT 0252 C33202 JMP GTH05 ;GOGETNEXT CHARACTER FLAG ;LAST CHAR WAS NOT A HEX 022D C5 PUSH B ;SAVE DISPLAY AND HEX DIGIT DIGIT FLAGS 0255 D1 GTH20 POP D ;RETRIEVE A HEX VALUE 022E 110000 LXI D, 0 ;SET HEX VALUE TO ZERO 0256 C1 POP B ;RETRIEVE HEX DIGIT FLAG 0231 D5 PUSH D ;SAVE HEX VALUE IN C 0232 CDE702 GTH05 CALL RDKBD ;READ KEYBOARD 0257 C33202 JMP VALCH ;VALIDITY CHECK
  • 54.
    D-23 D-24 025A 0000 NOP ;YES-READY TO RETURN 026D 0F RRC ;CONVERT 4 HIGH ORDER 025C FE11 CPI PERIO ;NO-WAS LAST CHAR. '.'? BITS TO A SINGLE 025E CA6702 JZ GTH25 ;YES READY TO RETURN CHARACTER `NO-INVALID TERMINATOR- 026E 0F RRC IGNORE ANY HEX DIGIT 026F 0F RRC READ 0270 0F RRC 0261 110000 LXI D, 0 ;SET HEX VALUE TO ZERO 0271 E60F ANI 0FH 0264 C3F702 JMP RETF ;RETURN FALSE 0273 21F9FF LXI H, BUFF ;GET ADDR.OF OUTPUT 0267 47 GTH25 MOV B, A ;SAVE LAST CHARACTER BUFFER 0268 79 MOV A, C ;FHIFT HEX DIGIT FLAG TO 0276 77 MOV M, A ;STORE CHAR.IN O/P 0269 0F RRC ;CARRY BIT BUFFER 026A 78 MOV A, B ;RESTORE LAST 0277 7A MOV A, D ;GET FIRST DATA BYTE AND CHARACTER CONVERT 4 LOW ORDER 026B C9 RET ;RETTURN BITS TO A SINGLE CHARACTER. *************************************************** 0278 E60F ANI 0FH FUNCTION : HXDSP-EXPAND HEX DIGITS FOR DISPLAY 027A 23 INX H ;NEXT BUFFER POSITION INPUTS : DE-4 HEX DIGITS 027B 77 MOV M, A ;STORE CHAR.IN BUFFER OUTPUTS : HL-ADDRESS OF OUTPUT BUFFER 027C 7B MOV A, E ;GET SECOND DATA BYTE CALLS : NOTHING 027D 0F RRC ;CONVERT 4 HIGH ORDER DESTROYS : A, H, L, F/F'S 027E 0F RRC ;BITS TO A SINGLE CHAR. DESCRIPTION : HXDSP EXPANDS EACH INPUT BYTE 027F 0F RRC TO 2 BYTE IN A FORM SUITABLE 0280 0F RRC FOR DISPLAY BY THE OUTPUT 0281 E60F ANI 0FH ROUTINES.EACH HEX DIGIT IS 0283 23 INX H ;NEXT BUFFER POSITION PLACED IN THE LOW ORDER 4 BITS 0284 77 MOV M, A ;STORE CHAR. IN BUFFER OF A BYTE WHOSE HIGH ORDER 4 0285 7B MOV A, E ;GET SECOND DATA BYTE & BITS ARE SET TO ZERO. THE ;CONVERT LOW ORDER 4 RESULTING BYTE IS STORED BIT IN THE OUTPUT BUFFER THE 0286 E60F ANI 0FH ;TO A SINGLE CHARACTER FUNCTION RETURNS THE 0288 23 INX H ;NEXT BUFFER POSITION ADDRESS OF THE OUTPUT BUFFER. 0289 77 MOV M, A ;STORE CHAR. IN BUFFER HXDSP 028A 21F9FF LXI H, OBUFF ;RETURN ADDRESS OF 026C 7A MOV A, D ;GET FIRST DATA BYTE OUTPUT 028D C9 RET ;BUFFER IN H & L
  • 55.
    D-25 D-26 028E DB05 INBYTE IN, STATUS ;GET 8279 FIFO ******************************************************** 0290 E607 ANI,07 ;STATUS & KEEP FUNCTION : NXTRG - ADVANCE REGISTER POINTER TO 0292 FE00 CPI,00 ;COUNT NEXT REG. 0294 CA8E02 JZ,INBYTE ;IF NO ENTRY WAIT INPUTS : NONE 0297 3E40 MVI A,40H ;IF ENTRY OF OUTPUTS : CARRY - 1 IF POINTER IS AADVANNCE KEYBOARD IN SUCCESSFULLY 0299 D305 OUT 05H ;FIFO 0 OTHERWISE 029B DB04 IN,DATA ;THEN GET BYTE IN CALLS : NOTHING ACC. DESTROYS : A, F/F'S 029D C9 RET DESCRIPTION : IF THE REG.POINTER POINTS TO 029E FF ;BLANK THE LAST REG. IN THE EXAMINE REG. SEQUENCE, **************************************************************** THE POINTER FUNCTION : INSDG-INSERT HEX DIGIT IS NOT CHANGED AND THE INPUTS : A - HEX DIGIT TO BE INSERTED FUNCTION RETURNS FALSE. DE - HEX VALUE IF THE REG. POINTER DOES NOT OUTPUTS : DE - HEX VALUE WITH DIGIT INSERTED POINT TO THE LAST CALLS : NOTHING REG. THEN THE POINTER IS DESTROYS : A, F/F'S ADVANCED TO THE NEXT DESCRIPTION : INSDG SHIFTS THE CONTENTS OF D REG. IN THE SEQUENCE & THE & E. LEFT 4 BITS (1 HEX DIGIT) & FUNCTION RETURNS TRUE. INSERTS THE HEX DIGIT INA. THE NXTRG LOW ORDER DIGIT POSITION OF 02A8 3AFDFF LDA RDPTR ;GET REG. POINTER THE RESULT. A IS ASSUMED TO 02AB FE0C CPI NUMRG-1 ;DOES POINTER POINT TO CONTAIN A SINGLE HEX DIGIT IN LAST REGISTER THE LOW ORDER 4 BITS AND 02AD D2F702 JNC RETF ;YES-UNABLE TO ADVANCE ZEROS IN THE HIGH ORDER POINTER RETURN ELSE 4 BITS. 02B0 3C INR A ;NO ADVANCE REG.POINTER ***************************************************************** 02B1 32FDFF STA RGPTR ;SAVE REGISTER POINTER 02B4 C3FA02 JMP RETT ;RETURN TRUE 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
  • 56.
    D-27 D-28 02C4 3E94 MVI A, DDISP ;CONTROL CHARACTER FOR **************************************************** O/P TO DATA FIELD OF FUNCTION : OUTPUT - O/P CHARACTER TO DISPLAY DISPLAY INPUTS : A - DISPLAY FLAG 0=USE ADDRESS FIELD 02CC6 D30500 OUT10 OUT CNTRL 1 = USE DATA FIELD 02C9 7E OUT15 MOV A, M ;GET O/P CHARACTER B - DOT FLAG 1 = O/P DOT AT RIGHT EDGE OF 02CA EB XCHG ;SAVE O/P CHARACTER FIELD ADDRESS IN D & E 0 = NO DOT 02CB 217803 LXI H, DSPTB ;GET DISPLAY FORMAT HL - ADDRESS OF CHARACTER TO BE OUTPUT TABLE ADDRESS CALLS : NOTHING 02CE 85 ADD L ;USE O/P CHARACTER AS A DESTROYS : A, B, C, D, E, H, L, F/F'S POINTER TO DISPLAY DESCRIPTION : OUTPUT SENDS CHARCTERS TO FORMAT TABLE THE DISPLAY. THE ADDRESS 02CF 6F MOV L, A OF THE CHARACTER IS RECIEVED 02D0 7E MOV A, M ;GETDISPLAYFORMAT AS AN ARGUMENT EITHER CHARACTER FROM TABLE 2 CHARACTERS ARE SENT TO THE 02D1 61 MOV H, C ;TEST COUNTER WITHOUT DATA FIELD,OR 4 CHARACTERS CHANGING IT ARE SENT TO THE ADDRESS FIELD 02D2 25 DCR H ;IS THIS THE LAST ? DEPANDING ON THE DISPLAY CHARACTER FLAG ARGUMENT THE DOT FLAG 02D3 C2DC02 JNZ OUT20 ;NO-GO OUTPUT CHAR. ARGUMENT DETERMINES AS IS WHETHER OR NOT A DOT (DECIMAL 02D6 05 DCR B ;YES-IS DOT FLAG SET? POINT) WILL BE SENT ALONGWITH 02D7 C2DC02 JNZ OUT20 ;NO-GO OUTPUT CHAR. THE LAST OUTPUT CHARACTER. AS IS OUTPT 02DA F601 ORI DTMSK ;YES-ORINMASKTO DISPLAY 02B7 0F RRC ;USE DATA FIELD? DOT WITH LAST CHARACTER 02B8 DAC202 JC OUT05;YES-GO SET UP TO USE DATA 02DC 00 OUT20 NOP FIELD 02DD D30400 OUT DSPLY ;SEND CHARACTER TO 02BB 0E04 MVI C, 4 ;NO-COUNT FOR ADDR. DISPLAY FIELD 02E0 EB XCHG ;RETRIEVE O/P 02BD 3E90 MVI A, ADISP ;CONTROL CHARCTER FOR CHAR.ADDRESS OUTPUT TO ADDRESS FIELD 02E1 23 INX H ;NEXT O/P CHARACTER OF DISPLAY 02E2 0D DCR C ;ANY MORE O/P CHARACTER 02BF C3C602 JMP OUT10 02E3 C2C902 JNZ OUT15 ;YES-GO PROCESS 02C2 0E02 OUT05 MVI C, 2;COUNT FOR DATA FIELD ANOTHER CHARACTER 02E6 C9 RET ;NO-RETURN
  • 57.
    D-29 D-30 **************************************************** 02F8 3F CMC ;COMPLEMENT CARRY TO MAKE FUNCTION : RDKBD-READ KEYBOARD 02F9 RET ;IT FALSE INPUTS : NONE OUTPUTS : A - CHARCATER READ FROM KEYBOARD ******************************************************* CALLS : NOTHING FUNCTION : RETT-RETURN TRUE DESTROYS : A, H, L, F/F'S INPUTS : NONE DESCRIPTION : RDKBD DETERMINES WHETHER OR OUTPUTS : CARRY=1 TRUE NOT THERE IS A CHARACTER IN CALLS : NOTHING THE INPUFT BUFFER IF NOT THE DESTROYS : CARRY FUNCTION ENABLES INTERRUPTS DESCRIPTION : RETT IS JUMPED TP BY ROUTINES AND LOOPS UNTIL THE INPUT WISHING TO RETURN TRUE. RETT INTERRUPT ROUTINE STORES A SETS CARRY TO 1 AND RETURNS CHARACTER IN THE BUFFER.WHEN TO THE CALLER OF THE ROUTINE THE BUFFER CONTAINS A INVOKING RETT. CHARACTER,THE FUNCTION FLAGS RETT THE BUFFER AS EMPTY AND 02FA 37 STC ;SET CARRY TRUE RETURNS THE CHARACTER AS 02FB C9 RET OUTPUT. RDKBD ******************************************************** 02E7 21FFFF LXI H,IBUFF FUNCTION : RGLOC-GET REGISTER SAVE LOCATION 02EA 7E MOV A, M INPUTS : NONE 02EB B7 ORA A ;IF HIGHER ORDER BIT OUTPUTS : HL-REGISTER SAVE LOCATION 02EC F2F302 JP RDKIO ;ONE THEN CALLS : NOTHING 02EF F3 DI ;BUFFER EMPTY,DISABLE DESTROYS : B, C, H, L, F/F'S INT. DESCRIPTION : RGLOC RETURNS THE SAVE 02F0 CD8E02 CALL INBYT ;INPUT BYTE LOCATION OF THE REG. 02F3 3680 RDKIO MVI M, EMPTY ;SET B INDICATED BY THE CURRENT 02F5 FB EI REGISTER POINTER VALUE. 02F6 C9 RET RGLOC 02FC 2AFDFF LHLD RGPTR ;GET REG. POINTER ******************************************************* 02FF 2600 MVI H, 0 ;IN H AND L FUNCTION : RETF-RETURN FALSE 0301 01ED03 LXI B, RGTBL ;GET REG.SAVE INPUTS : NONE LOCATION TABLE OUTPUTS : CARRY =0 FALSE ADDRESS CALLS : NOTHING 0304 09 DAD B ;POINTER INDEXES DESTROYS : CARRY TABLE DESCRIPTION : RETF IS JUMPED TO BY FUNCTIONS 0305 6E MOV L, M ;GET LOW ORDER WISHING TO RETURN FALSE.RETF BYTE OF REGISTER RESETS CARRY TO 0 AND RETURNS SAVE LOCATION TO THE CALLER OF THE ROUTINE 0306 26FF MVI H,(RAMST SHR B) ;GET HIGH INVOKING RETF. ORDER BYTE OF RETF 0308 C9 RET ;REGISTER SAVE 02F7 37 STC ;SET CARRY TRUE LOCATION
  • 58.
    D-31 D-32 *********************************************************** ******************************************************** FUNCTION : RGNAM-DISPLAY REGISTER NAME FUNCTION : RSTOR-RESTORE USER REGISTER INPUTS : NONE INPUTS : NONE OUTPUTS : NONE OUTPUTS : NONE CALLS : OUTPT CALLS : NOTHING DESTROYS : A, B, C, D, E, H, L, F/F'S DESTROYS : A, B, C, D, E, H, L, F/F'S DESCRIPTION : RGNAM DISPLAYS IN THE ADDRESS DESCRIPTION : RSTOR RESTORES SALL CPU FIELD OF THE DISPLAY, THE REGISTERS,FLIP/FLOPS, REGISTER NAME CORRESPONDING INTERUPT STATUS, INTERRUPT, TO THE CURRENT REGISTER STACK POINTER AND PROGRAM POINTER VALUE. COUNTER FROM THEIR RGNAM RESPACTIVE SAVE LOCATION IN 0309 2AFDFF LHLD RGPTR ;GET REGISTE POINTER MEMORY,BY RESTORING THE 030C 2600 MVI H, 0 PROGRAM COUNTER,THE 030E 29 DAD H ;MULTIPLY POINTERVALUE BY 4 ROUTINE EFFECTIVELY TRANSFERS 030F 29 DAD H ;REG. NAME TABLE HAS 4 BYTE CONTROL TO THE ADDRESS IN THE ENTRIES) PROGRAM COUNTER SAVE 0310 01B903 LXI B, NMTABL ;GET ADDRESS OF START OF LOCATION.THE TIMING OF THIS REGISTER NAME TABLE ROUTINE IS CRITICAL TO THE 0313 09 DAD B ;ARG-ADD TABLE ADDRESS TO CORRECT OPERATION OF THE POINTER-RESULT IS ADDRESS OF SINGLE STEP ROUTINE. APPROPRIATE REG.NAME IN H & L IF ANY MODIFICATION CHANGES 0314 AF XRA A ;ARG-USE ADDRESS FIELD OF THE NUMBER OF CPU STATUS DISPLAY NEEDED TO EXECUTE THE 0315 0600 MVI B, NODOT ;ARG-NO DOT IN ADDR.FIELD ROUTINE THEN THE TIMER VALUE 0317 CDB702 CALL OUTPT ;OUTPUT REGISTER NAME TO MUST BE ADJUSTED BYTHE SAME 031A C9 RET ADDRES FIELD 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
  • 59.
    D-33 D-34 0320 30 SIM ;RESTORE USER INTERRUPT MASK CONVERTED TO THE RESTORE USER INTERUPT STATUS CORROSPONDING 0321 3AF1FF LDA ISAV ;GET USER INTERRUPT MASK REGISTER POINTER 0324 E608 ANI 08H ;SHOULD USER INTERRUPT BE VALUE, THE POINTER IS ENABLED SAVED, AND THE FUNCTION 0326 CA2D03 JZ RST05 ;NO-LEAVE INTERRUPT DISABLED RETURNS 0329 FB EI ;YES-ENABLE INTERRUPT FOR 'TRUE'.OTHERWISE,THE USER PROGRAM FUNCTION RETURNS'FALSE' 032A C33103 JMP RSR10 SETRG 032D 37 RSR05 STC ;DUMMY INSTRUCTION-WHEN 0344 CDE702 CALL RDKBD ;READ FROM KEYBOARD SINGLE STEP ROUTINE IS BEING 0347 FE11 CPI 10H ;IS CHARACTER A DIGIT? USED,THE 0349 D2F702 JNC RETF ;NO-RETURN FALSE- 032E D23103 LNC RSR10 ;TIMER IS RUNNING AND EXECUTE CHARACTER IS NOT TIME FOR THIS ROUTINE MUST NOT A REGISTER DESIGNATOR VARY 034C D603 SUI 3 ;YES-TRY TO CONVERT 0331 21E9FF RSR10 LXI H, MNSTK ;SET MONITOR STACK REGISTER DESIGNATOR TO POINTER TO START OF STACK INDEX INTO REGISTER 0334 F9 SPHL ;WHICH IS ALSO END OF REGISTER POINTER TABLE WAS SAVE AREA CONVERSION SUCCESSFU? 0335 D1 POP D ;RESTORE REGISTERS 034E DAF702 JC RETF ;NO-RETURN FALSE 0336 C1 POP B 0351 4F MOV C, A ;INDEX TO B & C 0337 F1 POP PSW 0352 0600 MVI B, 0 0338 2AF4FF LHLD SSAV ;RESTORE USER STACK POINTER 0354 21AC03 LXIH, RGPTB ;GET ADDRESS OF 033B F9 SPHL REGISTER POINTER TABLE 033C 2AF2FF LHLD PSAV 0357 09 DAD B ;INDEX POINTS INTO TABLE 033F E5 PUSH H ;PUT USER PROGRAM COUNTER ON 0358 7E MOV A, M ;GET REGISTER POINTER STACK FROM TABLE 0340 2AEFFF LHLD LSAV ;RESTORE H & L REGISTERS 0359 32FDFF STA RGPTR ;SAVE REGISTER POINTER 0343 C9 RET ;JUMP TO USER PROGRAM 035C C3FA02 JMP RETT ;RETURN TRUE COUNTER ******************************************************** ******************************************************** FUNCTION : MODIAD-UPDATE ADDRESS FIELD OF FUNCTION : SETRG-SET REGISTER POINTER DISPLAY INPUTS : NONE INPUTS : B - DOTFLAG - 1 MEANS PUT DOT AT OUTPUTS : CARRY-SET IF CHARACTER FROM KEYBOARD RIGHTEDGEOF FIELD IS A REGISTER DESIGNATOR RESET OUTPUTS : NONE OTHERWISE. CALLS : HXDSP,OUTPT CALLS : RDKBD DESTROYS : A, B, C, D, E, H, L, F/F'S DESTROYS : A, B, C, H, L, F/F'S DESCRIPTION : UPDAD UPDATES THE ADDRESS DESCRIPTION :SETRG - READS A CHARACTER FROM THE FIELD OF THE DISPLAY USING THE KEYBOARD IF THE CHARACTER IS A CURRENT ADDRESS REGISTER DESIGNATOR, IT IS
  • 60.
    D-35 D-36 MODIAD 0379 01 A0 035F 2AF6FF LHLD CURAD ;GET CURRENT ADDRESS 037A 02 7C 0362 EB XCHG ;ARG-PUT CURRENT IN D & E 037B 03 F4 0363 CD6C02 CALL HXDSP ;EXPAND CURRENT ADDRESS FOR 037C 04 A6 DISPALY. ARG-ADDRESS OF 037D 05 D6 EXPANDED ADDRESS IS IN H & L 037E 06 DE 0366 AF XRA A ;ARG-USE ADDRESS FIELD OF 037F 07 B0 DISPLAY 0380 08 FE 0367 CDB702 CALL OUTPT ;OUTPUT CURRENT ADDRESS TO 0381 09 B6 ADDRESS FIELD 0382 0A BE 036A C9 RET 0383 0B CE 0384 0C 5A ******************************************************** 0385 0D EC FUNCTION : MODIDT - UPDATE DATA FIELD OF DISPLAY 0386 0E 5E INPUTS : B - DOT FLAG - 1 MEANS PUT DOT AT RIGHT OF 0387 0F 1E FIELD 0388 H AE 0 MEANS NO DOT 0389 L 4A OUTPUTS : NONE 038A P 3E CALLS : HXDSP,OUTDT 038B I A0 DESTROYS : A, B, C, D, E, H, L, F/F, S 038Cr 0C DESCRIPTION : UPDDT UPDATES THE DATA FIELD 038D BLANK 00 OF THE DISPLAY 038E n 8C USING THE CURRENT DATA BYTE 038F U EA UPDDT: 0391 h 8E 036B 3AF8FF LDA CURDT ;GET CURRENT DATA 0391 G DA 036E 57 MOV D, A ;ARG-PUT CURRENT DATA IN D 0392 J E0 036F CD6C02 CALL HXDSP ;EXPAND CURRENT DATA FOR 0393 y E6 DISPLAY. ARG-ADDRESS OF 0394 O CC EXPANDED DATA IS IN H & L. 0395 3E46 4(19) 0372 3E01 MVI A, DTFLD ;ARG-USE DATA FIELD OF DISPLAY 0397 01FF ARG-DOT FLAG IS IN B 0399 01FF 0374 CDB702 CALL OUTPT ;OUTPUT CURRENT DATA TO DATA FIELD 0377 C9 RET 0378 00 FA
  • 61.
    D-37 D-38 MESSAGES FOR OUTPUT TO DISPLAY 03B0 0C DB 12 :PCL 039A 15 BLANKS DB BLANK, BLANK, BLANK, BLANK 03B1 07 DB 7 :H ;FOR ADDRESS OR DATA FIELD. 03B2 08 DB 8 :L 039B 15 03B3 00 DB 0 :A 039C 15 03B4 01 DB 1 :B 039D 15 03B5 02 DB 2 :C 039E 15 ERMSG DB BLANK, LETRE, LETRR, LETRR 03B6 03 DB 3 :D ;ERROR MESSAGE FOR ADDRESS 03B7 04 DB 4 :E FIELD 03B8 05 DB 5 :FLAGS 039F 0E 03A0 14 ******************************************************** 03A1 14 EXMSG DB LETRE, BLANK, BLANK, BLANK NMTBL : REGISTER NAME TABLE ;EXECUTION MESSAGE : NAMES OF REGISTER IN DISPLAY FORMAT 03A2 0E 03B9 15 DB BLANK, BLANK, BLANK, LETRA 03A3 15 ;A REGISTER 03A4 15 03BA 15 03A5 15 03BB 15 03A6 0F SGNAD DB F r I E 03BC 0A ;SIGN ON MESSAGE 03BD 15 DB BLANK, BLANK, BLANK, LETRB (ADDR. FIELD) ;B REGISTER 03A7 14 03BE 15 03A8 13 03BF 15 03A9 0E 03C0 0B 03AA 16 SGNDT DB n d 03C1 15 DB BLANK, BLANK, BLANK, LETRC ;SIGN ON MESSAGE(DATA FIELD) ;C REGISTER 03C2 15 ******************************************************** 03C3 15 RGPTB REGISTER POINTER TABLE 03C4 0C :THE ENTRIES IN THIS TABLE ARE IN THE SAME 03C5 15 DB BLANK, BLANK, BLANK, LETRD ORDER AS ;D REGISTER THE REGISTER DESIGNATOR KEYS ON THE 03C6 15 KEYBOARD EACH 03C7 15 ENTRY CONTAINS THE REGISTER POINTER VALUE 03C8 0D WHICH CORROSPONDS TO THE REG. 03C9 15 DB BLANK, BLANK, BLANK, LETRE DESIGNATOR. REGISTER POINTER VALUES ARE ;E REGISTER USED TO POINT INTO THE REGISTER NAME TABLE 03CA 15 (NMTBL) AND REGISTER SAVE LOCATION TABLE 03CB 15 (RGTBL). 03CC 0E 03CD 15 DB BLANK, BLANK, BLANK, LETRF 03AC 06 DB 6 :INTERRUPT MASK ;F REGISTER 03AD 09 DB 9 :SPH 03CE 15 03AE 0A DB 10 :SPL 03CF 15 03AF 0B DB 11 :PCH 03D0 0F
  • 62.
    D-39 D-40 03D1 15 DB BLANK, BLANK, BLANK, LETRI ;INTERRUPT MASK ************************************************* 03D2 15 REGISTER SAVE LOCATION TABLE 03D3 15 ADDRESSES OF SAVE LOCATIONS OF REGISTERS IN THE 03D4 13 ORDER IN WHICH THE REGISTERS ARE DISPLAYED BY 03D5 15 DB BLANK, BLANK, BLANK, LETRH THE EXAMINE COMMAND ;H REGISTER 03D6 15 RGTBL 03D7 15 03ED EE DB ASAV AND OFFH ;A REGISTER 03D8 10 03EE EC DB BSAV AND OFFH ;B REGISTER 03D9 15 DB BLAMK, BLANK, BLANK, LETRL 03EF EB DB CSAV AND OFFH ;C REGISTER ;L REGISTER 03F0 EA DB DSAV AND OFFH ;D REGISTER 03DA 15 03F1 E9 DB ESAV AND OFFH ;E REGISTER 03DB 15 03F2 ED DB FSAV AND OFFH ;FLAGS 03DC 11 03F3 F1 DB ISAV AND OFFH ;INTERRUPT MASK 03DD 15 DB BLANK, LETRS, LETRP, LETRH 03F4 F0 DB HSAV AND OFFH ;H REGISTER ;STACK POINTER HIGH ORDER 03F5 EF DB LSAV AND OFFH ;L REGISTER BYTE 03F6 F5 DB SPHSV AND OFFH ;STACK POINTER 03DE 05 HIGH ORDER BYTE 03DF 12 03F7 F4 DB SPLSV AND OFFH ;STACK POINTER 03E0 10 LOW ORDER BYTE 03E1 15 DB BLANK, LETRS, LETRP, LETRL 03F8 F3 DB PCHSV AND OFFH ;PROGRAM ;STACK POINTER LOW ORDER BYTE COUNTER HIGH 03E2 05 ORDER BYTE 03E3 12 03F9 F2 DB OCKSV AND IFFG ;PROGRAM 03E4 11 COUNTER LOW 03E5 15 DB BLANK, LETRP, LETRC, LETRH ORDER BYTE ;PROGRAM COUNTER HIGH BYTE 000D NUMRG EQU ($ - RGTBL) ;/REGISTER SAVE 03E6 12 TABLE LOCATION NUMBER 03E7 0C OF ENTRIES. 03E8 10 03E9 15 DB BLANK, LETRP, LETRC, LETRL ;PROGRAM COUNTER LOW BYTE 03EA 12 03EB 0C 03EC 11
  • 63.
    D-41 D-42 ********************************************* 040C 0E2E MVI C,'.' ;PROMPT CHARCHTER TO C TTY 040E CDF805 CALL ECHO ;SEND PROMPT CHARATER PRINT SIGNON MESSAGE TO USER TERMINAL ********************************************* 0411 C31404 JMP GTC03 ;WANT TO LEAVE ROOM FOR RST BRANCH 03FA 218C07 SIGNON LXIH STRING 0414 CD1F06 GTC03 CALL GETCH ;GET COMMAND D 4E S1 MOVC, M CHARATER TO A E AF XRAA 0417 CDF805 CALL ECHO ;ECHO CHARCTER TO USER F B1 ORAC 041A 79 MOV A, C ;PUT COMMAND CHARCTER INTO ACC. 0400 C8 RZ 041B 010600 LXI B, NCMDS ;C CONTAINS LOOP AND 1 CDC405 CALLC OUT INDEXCOUNT 4 23 INX H 041E 21AE07 LXI H, CTAB ;HL POINTS INTO COMMAND 0405 C3FD03 JUMP S1 TABLE 0421 BE GTC05 CMP M ;COMPARE TABLE ENTRY ************************************************************* AND CHARATER COMMAND RECOGNIZING ROUTINE 0422 CA2D04 JZ GTC10 ;BRANCH IF EQUAL – ************************************************************* COMMAND RECOGNIZED FUNCTION : GETCM 0425 23 INX H ;ELSE,INCREMENT TABLE INPUTS : NONE POINTER OUTPUTS : NONE 0426 0D DCR C ;DECREMENT LOOP COUNT CALLS : GETCH, ECHO, ERROR 0427 C22104 JNZ GTC05 ;BRANCH IF NOT AT TABLE DESTROYS : A, B, C, H, L, F/F'S END DESCRIPTION : GETCM RECEIVES AN INPUT 042A C31106 JMP ERROR ;ELSE COMMAND CHARATER FROM THE USER CHARACTER IS ILLEGAL AND USER AND ATTEMPTS TO LOCATE THIS CHARATER IN ITS 042D 21A007 GTC10 LXI H, CADR ;IF GOOD COMMAND. LOAD COMMAND CHARATER TABLE. IF ADDRESS OR TABLE OF SUCCESSFUL,THE ROUTINE COMMAND ROUTINE CORROSPONDING TO THIS IS ADDRESSES SELECTED FROM A TABLE OF 0430 09 DAD B ;ADD WHAT IS LEFT OF COMMAND ROUTINE ADDRESSES, LOOP COUNT AND CONTROL IS TRANSFERED TO 0431 09 DAD B ;ADD AGAIN -EACH ENTRY IN THIS ROUTINE. IF THE CHARATER CADR IS 2 BYTES LONG DOES NOT MATCH ANY 0432 7E MOV A, M ;GET LSP OF ADDRESS OF ENTRIES,CONTROL IS PASSED TO TABLE ENTRY TO A THE ERROR HANDLER. 0433 23 INX H ;POINT TO NEXT BYTE IN GETCM TABLE 0408 21E9FF LXI H, MNSTK ;ALWAYS WAMT TO RESET 0434 66 MOV H, M ;GET MSP OF ADDRESS OF STACK PTR TO MONITOR TABLE ENTRY TO H 040B F9 SPHL ;STARTING VALUE SO ROUTINE NEED NOT CLEAN UP
  • 64.
    D-43 D-44 0435 6F MOV L, A ;PUT LSP OF ADDRESS OF 044F CDC706 CALL NMOUT ;DISPLAY CONTENTS TABLE ENTRY IMTO L 0452 CDA006 CALL HILO ;SEE IF ADDRESS OF 0436 E9 PCHL ;NEXT INSTRUCTION COMES DISPLAY LOC. FROM COMMAND ROUTINE IS GREATER THAN OR EQUAL TO *************************************************************** ENDING ADDRESS COMMAND IMPLEMENTING ROUTINES FALSE DCM15 ;IF NOT ,MORE TO *************************************************************** DISPLAY FUNCTION : DCMD 0455 D25E04 JNC DCM15 INPUTS : NONE 0458 CDEB05 CALL CROUT ;CARRIGE OUTPUTS : NONE RETURN/LINE FEED CALLS : ECHO, NMOUT, HILO, GETCM,CROUT, GETNM TO END LINE DESTROYS : A, B, C, D, E, H, L, F/F'S 045B C30804 JMP GETCM ;ALL DOME DESCREPTION : DCMD IMPLEMENTS THE DISPLAY 045E 23 DCM15 INX H ;IF MORE TO GO, MEMORY (D) COMMAND POINTS TO THE NEW DISPLAY DCMD 045F 7D MOV A,L GET LOW ORDER 0437 0E02 MVI C, 2 ;GET 2 NUMBERS FROM BITS OF NEW INPUT STREAM ADDRESS 0439 CD5B06 CALL GETNM 0460 E60G ANI NEWLN ;SEE IF LAST HEX 043C D1 POP D ;ENDING ADDRESS TO DE DIGIT OR ADDRESS 043D E1 POP H ;STARTING ADDRESS TO HL DENOTES START OF DCMO5 NEWLINE 043E CDEB05 CALL CROUT ;ECHO CARRIAGE 0462 C24904 JNZ DCM10 ;NO-DOT AT END OF RETURN/LINE FEED LINE 0441 7C MOV A, H ;DISPLAY ADDRESS OF 0465 C33E04 JMP DCM05 ;YES-START NEW FIRST LOCATION IN LINE LINE WITH ADDRESS 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.
  • 65.
    D-45 D-46 ******************************************************************************* ***************************************************** FUNCTION : GCMD FUNCTION : ICMD INPUTS : NONE INPUTS : NONE OUTPUTS : NONE OUTPUTS : NONE CALLS : ERROR, GETHX, RSTTF CALLS : ERROR, ECHO, GETCH, VALDL, VALDG, CNVBN, DESTROYS : A, B, C, D, E, H, L, F/F'S STHLF, GETNM, GROUT DESCRIPTION : GCMD IMPLEMENTS THE BEGIN DESTROYS : A, B, C, D, E, H, L, F/F'S EXECUTION (G) COMMAND DESCRIPTION : ICMD IMPLEMENTS THE INSERT MODE INTO MEMORY 0468 CD2606 GCMD CALL GETHX ;GET ADDRESS(IF PRESENT) (I) COMMAND FROM INPUT STREAM FALSE GCM05 0468 0E01 ICMD MVI C, 1 046B D27D04 JNC GCM05 ;BRANCH IF NO NU. PRESENT 0488 CD5B06 CALL GETNM ;GET SINGLE NU. 046E 7A MOV A, D ;ELSE GET TERMINATOR FROM INPUT 046F FE0D CPI CR ;SEE IF CARRIAGE RETURN STREAM 0471 C21106 JNZ ERROR ;ERROR IF NOT PROPERLY 048B 3EFF MVI A, UPPER TERMINATED 048D 32FDFF STA TEMP ;TEMP WILL HOLD 0474 21F2FF LXI H, PSAV ;WANT NU. TO REPLACE SAVE 1/4 THE UPPER/LOWER PGM COUNTER HALF BYTE FLAG 0477 71 MOV M, C 0490 D1 POP D 0478 23 INX H 0491 CD1F06 ICM05 CALL GETCH ;GET A CHAR. FROM 0479 70 MOV M, B INPUT STREAM 047A C38304 JMP GCM10 0494 4F MOV C, A 047D 7A GCM05 MOV A, D ;IF NO STARTING ADDRESS 0495 CDF805 CALL ECHO ;ECHO IT MAKE SURE THATCR 0498 79 MOV A, C ;PUT CAHR. BACK TERMINATED COMMAND INTO A 047E FE0D CPI CR 0499 FE1B CPI TERM ;SEE IF CHAR.IS A 0480 C21106 JNZ ERROR ;ERROR IF NOT TERMINATING 0483 C31B03 GCM10 JMP RSTOR ;RESTORE REG. AND BEGIN CHARACTER EXECUTION (RSTOR IS IN 049B CAC704 JZ ICM25 ;IF SO ALL DONE KEYBOARD MONITOR) 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
  • 66.
    D-47 D-48 04A7 D2C104 JNC ICM20 MCMD 04AA CD100A CALL CNVBN ;CONVERT DIGIT TO BINARY 04D0 0E03 MVI C, 3 04AD 4F MOV C, A ;MOVE RESULT TO C 04D2 CD5B06 CALL GETNM ;GET 3 NUMBERS FROM 04AE CD3F07 CALL STHLF ;STORE IN APPROPRIATE INPUT STREAM HALF WORD 04D5 C1 POP B ;DESTINATION ADDR. TO BC 04B1 3AFDFF LDA TEMP ;GET HALF BYTE FLAG 04D6 E1 POP H ;ENDING ADDR. TO HL 04B4 B7 ORA A ;SET F/F'S 04D7 D1 POP D ;STARTING ADDR TO DE 04B5 C2B904 JNZ ICM10 ;BRANCH IF FLAG SET FOR 04D8 E5 MCM05 PUSH H ;SAVE ENDING ADDRESS UPPER 04D9 62 MOV H, D 04B8 13 INX D ;IF LOWER ,INC ADDRESS OF 04DA 6B MOV L, E ;SOURCE ADDR. TO HL BYTE TO STORE IN 04DB 7E MOV A, M ;GET SOURCE BYTE 04B9 EEFF ICM10 XRI INVERT ;TOGGLE STATE OF FLAG 04DC 60 MOV H, B 04BB 32FDFF STA TEMP ;PUT NEW VALUE OF FLAG 04DD 69 MOV L, C ;DESTINATION ADDR. TO HL BACK 04DE 77 MOV M, A ;MOVE BYTE TO 04BE C39104 JMP ICM05 ;PROCESS NEXT DIGIT DESTINATION 04C1 CD3407 ICM20 CALL STHFO ;ILLEGAL CHARACTER 04DF 03 INX B ;INR. DESTINATION 04C4 C31106 JMP ERROR ;MAKE SURE ENTIRE BYTE ADDRESS FILLED THEN ERROR 04E0 78 MOV A, B 04C7 CD3407 ICM25 CALL STHF0 ;HERE FOR ESCAPE 04E1 B1 ORA C ;TEST FOR DESTINATION CHARACTER I/P IS DONE ADDR 04CA CDEB05 CALL CROUT ;ADD CARRIAGE RETURN 04E2 CA0804 JZ GETCM ;IF SO CAN TERMINATE CMD. 04CD C30804 JMP GETCM 04E5 13 INX D ;INCREMENT SIURCE ADDRESS **************************************************** 04E6 E1 POP H ;ELSE GET BACKENDING FUNCTION : MCMD ADDR INPUTS : NONE 04E7 CDA006 CALL HILO ;SEE IF ENDING OUTPUTS : NONE ADDR=SOURCE ADDR CALLS : GETCM, HILO, GETNM FALSE GETCM ;IF NOT DESTROYS : A, B, C, D, E, H, L, F/F'S COMMAND IS DONE DECRIPTION : MCMD IMPLEMENTS THE MOVE DATA IN 04EA D20804 JNC GETCM MEMORY(M) COMMAND 04ED C3D804 JMP MCM05 ;MOVE ANOTHER BYTE
  • 67.
    D-49 D-50 **************************************************** ********************************************************* FUNCTION : SCMD FUNCTION : XCMD INPUTS : NONE INPUTS : NONE CALLS : GETHX, GETCM, NMOUT, ECHO OUTPUTS : NONE DESTROYS : A, B, C, D, E, H, L, F/F/'S CALLS : GETCH, ECHO, REGDS, GETCM, ERROR, RGADR, DESCRIPTION : SCMD IMPLEMENTS THE NMOUT, CROUT, GTHEX SUBSTITUTE INTO MEMORY DESTROYS : A, B, C, D, E, H, L, F/F'S (S) COMMAND DESCRIPTION : XCMD IMPLEMENTS THE REGISTER EXAMINE AND CHANGE (X) SCMD COMMAND. 04F0 CD2606 CALL GETHX ;GET A NUMBER IF PRESENT, FROM INPUT 0514 CD1F06 XCMD CALL GETCH ;GET REGISTER 04F3 C5 PUSH B INDENTIFIER 04F4 E1 POP H ;GET NU. TO HL-DENOTES 0517 4F MOV C, A MEMORY LOCATION 0518 CDF805 CALL ECHO ;ECHO IT 04F5 7A SCM05 MOV A, D ;GET TERMINATOR 051B 79 MOV A, C 04F6 FE20 CPI '.' ;SEWE IF SPACE 051C FE0D CPI CP 04F8 CA0005 JZ SCM10 ;YES CONTINUE 051E C22705 JNZ XCM05 ;BRANCH IF PROCESSING NOTCARRIAGE RET 04FB FE2C CPI '.' ;ELSE SEE IF COMMA 0521 CDEA06 CALL REGDS ;ELSE,DISPLAY 04FD C20804 JNZ GWTCM ;NO TERMINATE COMMAND REG.CONTENTS 0500 7E SCM10 MOV A, M ;GET CONTENTS OF 0524 C30804 JMP GETCM ;THEN TERMINATE SPECIFIED LOCATION TO A COMMAND 0501 CDC706 CALL NMOUT ;DISPLAY CONTENTS ON 0527 4F XCM05 MOV C, A ;GET REG.IDENTIFIER CONSOLE TO C 0504 0E2D MVI C,'.' 0528 CD1B07 CALL RGADR ;CONVERT 0506 CDF805 CALL ECHO ;USE DASH FOR SEPARATOR IDENTIFIER INTO 0509 CD2606 CALL GETHX ;USE NEW VALUE FOR RTAB TABLE ADDR MEMORY LOCATION IF ANY 052B C5 PUSH B FALSE SCM15 ;IF NO VALUE PRESENT,BRANCH 052C E1 POP H ;PUT POINTER TO 050C D21005 JNC SCM15 REGISTER ENTRY 050F 71 MOV M, C ;ELSE,STORE LOWER 8BIT OF INTO HL NUMBER ENTERED 052D 0E20 MVI C," 0510 23 SCM15 INX H ;INCREMENT ADDR. OF MEMORY 052F CDF805 CALL ECHO ;ECHO SPACE TO LOCATION TO VIEW USER 0511 C3F504 JMP SCM05 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
  • 68.
    D-51 D-52 0563 7E MOV A, M 0540 C20804 JNZ GETCM ;NO-MUST BE CARRIAGE 0564 CDC706 CALL NMOUT ;DISPLAY THEM RETURN TO AN END 0567 0E2D XCM20 MVI C,'-' COMMAND 0569 CDF805 CALL ECHO ;USE DASH AS 0543 73 XCM15 MOV A, M SEPARATOR 0544 B7 ORA A ;SET F/F'S 056C CD2606 CALL GETHX ;SEE IF THERE IS A 0545 C24E05 JNZ XCM16 ;BRANCH IF NOT AT END OF VALUE TO PUT TABLE INTO REGISTER 0548 CDEB05 CALL CROUT ;ELSE O/P CARIAGE RETURN FALSE XCM30 ;NO GO LINE FEED CHECKFORNEXT 054B C30804 JMP GETCM ;AND EXIT REG. 054E E5 XCM18 PUSH H ;PUT POINTER ON 056F D28705 JNC XCM30 STACK 0572 7A MOV A, D 054F 5E MOV E, M 0573 32FDFF STA TEMP ;ELSE SAVE THE 0550 16FF MOV D, RAMST SHR 8 ;ADDRESS OF SAVE TERMINATOR FOR LOCATION FROM NOW TABLE 0576 F1 POP PSW ;GET BACK LENGTH 0552 23 INX H FLAG 0553 46 MOV B, M ;FETCH LENGTH FLAG EROM 0577 E1 POPH ;PUT ADDR.OFSAVE TABLE LOCATION INTO HL 0554 D5 PUSHD ;SAVE ADDR.OF SAVE 0578 B7 ORA A ;SET F/F'S LOCATION 0579 CA7E05 JZ XCM25 ;IF 8 BIT REG, 0555 D5 PUSH D BRANCH 0556 E1 POP H ;MOVE ADDRESSS TO HL 057C 70 MOV M, B ;SAVE UPPER 8 BITS 0557 C5 PUSH B ;SAVE LENGTH FLAG 057D 2B DCX H ;POINT TO SAVE 0558 7E MOV A, M ;GET 8 BITS OF REG FROM LOCATION FOR SAVED LOCATION LOWER 8 BITS 0559 CDC706 CALL NMOUT ;DISPLAY IT 057E 71 XCM25 MOV M, C ;STORE ALL OF 8 BIT 055C F1 POP PSW ;GET BACK LENGTH FLAG OR LOWER 1/2 OF 16 055D F5 PUSH PSW ;SAVE IT AGAIN BIT REG. 055E B7 ORA A ;SET F/F'S 057F 110300 XCM27 LXI D, RTABS ;SIZE OF ENTRY 055F CA6705 JZ XCM20 ;IF8BIT REG.NOTHING TO INRTAB TABLE DISPLAY 0562 2B DCX H ;ELSE FOR 16 BIT REG.GET 0582 E1 POP H ;POINTER INTO LOWER 8 BITS REG.TABLE RTAB
  • 69.
    D-53 D-54 0583 19 DAD D ;ADD ENTRY SIZE TO POINTER 05B1 05 DCR B 0584 C33605 JMP XCM10 ;DO NEXT REGISTER 05B2 CABC05 JZ CI5 0587 7A XCM30 MOV A, D ;GET TERMINATOR 05B5 79 MOV A, C 0588 32FDFF STA TEMP ;SAVE IN MEMORY 05B6 1F RAR 058B D1 POP D ;CLEAR STACK OF LENGTH FLAG 05B7 4F MOV C, A 058C D1 POP D & ADDR. OF SAVE LOCATION 05B8 00 NOP 058D C37F05 JMP XCM27 ;GO INCREMENT REG. TABLE 05B9 C3A405 JMP CI3 POINTER 05BC E1 CI5 POP H 05BD FB EI ******************************************************** 05BE 79 MOV A, C UTILITY ROUTINE 05BF C9FFFF JMP 3PASS 05C2 FF BLANK ******************************************************** 05C3 FF BLANK FUNCTION : CI INPUTS : NONE **************************************************** OUTPUTS : A - CHARACTER FROM TTY FUNCTION : CO CALLS : DELAY INPUTS : C-CHARACTER TO OUTPUT TO TTY DESTROYS : A, F/F'S OUTPUTS : C-CHARACTER OUTPUT TO TTY DESCRIPTION : CI WAITS UNTIL A CHAR. HAS BEEN CALLS : DELAY ENTERED AT THE TTY AND THEN DESTROYS : A, F/F'S RETURNS THE CHAR. VIA THE A DESCRIPTION : CO-SENDS ITS INPUT ARGUMENT REG. TO THE CALLING ROUTINE. TO THE TTY. THIS ROUTINE IS CALLED BY THE USER VIA A JUMP TABLE IN RAM C0 CI 05C4 F3 DI 0590 F3 DI 05C5 C5 PUSH B 0591 E5 PUSH H 05C6 E5 PUSH H 0592 0609 MVI B, BITS 05C7 060B MVI B, BITS0 0594 20 CI1 RIM 05C9 AF XRA A 0595 B7 ORA A 05CA 3E80 CO1 MVI A, 80H 0596 FA9405 JM CI1 05CC 1F RAR 0599 2A9AFF CHLD HALFBIT 05CD 30 SIM 059C 2D CI2 DCR L 05CE 2AC0FF LHLD BITTIME 059D C29C05 JNZ CI2 05D1 2D CO2 DCR L 05A0 25 DCR H 05D2 C2D105 JNZ CO2 05A1 C29C05 JNZ CI2 05C5 25 DCR H 05A4 2AC0FF CI3 LHLD BITTIMC 05C6 C2D105 JNZ CO2 05A7 2D CI4 DCR L 05C9 37 STC 05A8 C2A705 JNZ CI4 05CA 79 MOV A, C 05AB 25 DCR H 05CB 1F RAR 05AC C2A705 JNZ CI4 05CC 4F MOV C, A 05AF 20 RIM 05CD 05 DCR B 05B0 17 RAL 05CE 2CA05 JNZ CO1
  • 70.
    D-55 D-56 05E1 E1 POP H ******************************************************** 05E2 C1 POP B FUNCTION : DELAY 05E3 FB EI INPUTS : DE - 16BIT INT.DENOTING NUMBER OF TIMES TO 05E4 C9 RET LOOP. 05E5 FF BLANK OUTPUTS : NOTHING 05E6 FF BLANK DESTROYS : A, D, E, F/F'S 05E7 FF BLANK DESCRIPTION : DELAY DOES NOT RETURN TO 05E8 FF BLANK CALLER UNTIL INPUT ARGUMENT IS 05E9 FF BLANK COUNTED DOWN TO 0. 05EA FF BLANK DELAY ******************************************************** 05F1 1B DCX D ;DECREMENT INPUT ARG. FUNCTION : CROUT 05F2 7A MOV A, D INPUTS : NONE 05F3 B3 ORA E OUTPUTS : NONE 05F4 C2F105 JNZ DELAY ;IF ARG NOT 0,KEEP CALLS : ECHO GOING DESTROYS : A, B, C, F/F'S 05F7 C9 RET DESCRIPTION : CROUT SENDS A CARRIAGE RETURN AND HENCE A ******************************************************** LINE FEED TO THE CONSOLE. FUNCTION : ECHO INPUTS : C - CHARACTER TO ECHO TO TERMINAL CROUT OUTPPUTS : C - CHARACTER ECHOED TO TERMINAL 05EB 0E0D MVI C, CR CALLS : CO 05ED CDF805 CALL ECHO DESTROYS : A, B, F/F'S 05F0 C9 RET 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
  • 71.
    D-57 D-58 05FB B8 CMP B ;SEE IF ECHOING AN ******************************************************** ESCAPE CHARACTER FUNCTION : FRET 05FC C20106 JNZ ECHO5 ;NO BRANCH INPUTS : NONE 05FF 0E24 MVI C, '$' ;YES ECHO AS $ OUTPUTS : CARRY-ALWAYS 0 0601 CDC405 ECHO5 CALL CO ;DO OUTPUT THRO' CALLS : NOTHING MONITOR DESTROYS : CARRY 0604 3E0D MVI A, CR DESCRIPTION : FRET IS JUMPED TO BY ANY 0606 B8 CMP B ;SEE IF CHAR. ECHOED WAS ROUTINE THET WISHES TO A CARRIAGE RETURN INDICATE FAILURE ON RETURN. 0607 C20F06 JNZ ECH10 ;NO-NO NEED TO TAKE FRET SETS THE CARRY FALSE SPECIAL ACTION DENOTING FAILURE & THEN 060A 0E0A MVI C, LF ;YES-WANT TO ECHO RETURN TO THE CALLER OF THE LINEFEED ROUTINE INVOKINK FRET. 060C CDC405 CALL CO FRET 060F 48 ECH10 MOV C, B ;RESTORE 061C 37 STC ;SET CARRY TRUE ARGUMENT 061D 3F CMC ;THEN COMPLEMENT TO MAKE IT 0610 C9 RET FALSE 061E C9 RET ;RETURN APPROPRIATLY ******************************************************** FUNCTION : ERROR ******************************************************** INPUTS : NONE FUNCTION : GETCH OUTPUTS : NONE INPUTS : NONE CALLS : ECHO, CROUT, GETCM OUTPUTS : C - NEXT CHAR. IN INPUT STREAM DESTROYS : A, B, C, F/F'S CALLS : CI DESCRIPTION : ERROR PRINTS THE DESTROYS : A, C, F/F'S ERRORCHARACTER (CURRENTLY DESCRIPTION : GETCH RETURNS THE NEXT CHAR. AN ASTERISK) ON THE CONSOLE IN THE INPUT STREAM TO THE FOLLOWED BY A CR LF, AND THEN CALLING PROGRAM. RETURNS CONTROL TO THE GETCH COMMAND RECOGNISER. 061F CD9005 CALL CI ;GET CHAR. FROM ERROR TERMINAL 0611 OE2A MVI C,'*' 0622 E67F ANI PRTY0 ;TURN OFF PARITY 0613 CDF805 CALL ECHO ;SEND '*' TO BIT IN CASE SET BY CONSOLE CONSOLE 0616 CDEB05 CALL CROUT ;SKIP TO BEGINING OR NEXT 0624 4F MOV C, A ;PUT VALUE IN C LINE REG.FOR 0619 C30804 JMP GETCM ;TRY AGAIN FOR ANOTHER 0625 C9 RET ;RETURN COMMAND
  • 72.
    D-59 D-60 ******************************************************** 062A 1E00 MVI E, 0 ;INITIALIZE DIGIT FLAG TO FUNCTION : GETHX FALSE INPUTS : NONE 062C CD1F06 GTH05 CALL GETCH ;GET A CHARACTER OUTPUT : SBC - 16 BIT INTEGER 062F 4F MOV C, A D - CHAR. WHICH TERMINATED THE INTEGER 0630 CDF805 CALL ECHO ;ECHO THE CHARACTER CARRY - 1 IF FIRST CHAR NOT DELIMITER 0633 CD7907 CALL VALDL ;SEE IF DELIMITER - 0 IF FIRST CHAR. IS DELIMITER FALSE GHX10 ;NO BRANCH CALLS : GETCH, ECHO, VALDL, VALDG, CNVBN, ERROR 0636 D24506 JNC GTX10 DESTROYS : A, B, C, D, E, F/F'S 0639 51 MOV D, C ;YES-ALL DONE,BUT WANT DESCRIPTION : GETHX ACCEPTS A STRING OF HEX TO RETURN DELIMITER DIGITS FROM THE INPUT STREAM 063A E5 PUSH H & RETURNS THEIR VALUE AS A 063B C1 POP B ;MOVE RESULT TO BC 16 BIT BINARY INTEGER.IF MORE 063C E1 POP H ;RESTORE HL THAN 4 HEX DIGITS ARE ENTERED, 063D 7B MOV A, E ;GET FLAG ONLY THE LAST 4 ARE USED THE 063E B7 ORA A ;SET F/F'S NUM. TERMINATES WHEN A VALID 063F C23207 JNZ SRET ;IF FLAG NONE-0ANUM.HAS DELIMITER IS ENCOUNTERED. BEEN FOUND THE DELIMITER IS ALSO RETURNED 0642 CA1C06 JZ FRET ;ELSE DELIMITER WAS FIRST AS AN OUTPUT OF THE CHARACTER FUNCTION.ILLEGAL CHAR. (NOT 0645 CD5E07 GHX10 CALL VALDG ;IF NOT DELIMITER SEE IF HEX DIGITS OR DELIMITERS) CAUSE DIGIT AN ERROR INDICATION. IF THE FALSE ERROR ;ERROR, IF NOT A VALID FIRST (VALID)CHARACTER DIGIT ENCOUNTERED IN THE INPUT 0648 D21106 JNC ERROR STREAM IS NOT A DELIMITER, 064B CD100A CALL CNVBN ;CONVERT DIGIT TO ITS GETHX WILL RETURN WITH THE BINARY VALUE CARRY BIT SET TO 1;OTHERWISE 064E 1EFF MVI E, 0FFH ;SET DIGIT FLAG NON-0 THE CARRY BIT IS SET TO 0 AND 0650 29 DAD H ;*2 THE CONTENTS OF BC ARE 0651 29 DAD H ;*4 UNDEFINED. 0652 29 DAD H ;*8 0653 29 DAD H ;*16 GETHX 0654 0600 MVI B, 0 ;CLEAR UPPER 8 BITS OF BC 0626 E5 PUSH H ;SAVE HL PAIR 0627 210000 LXI H, 0 ;INITIALIZE RESULT 0656 4F MOV C, A ;BINARY VALUE OF CHARACTER INTO C
  • 73.
    D-61 D-62 066B CA7706 JZ GNM10 ;BRANCH IF NO MORE 0657 09 DADB ;ADD THIS VALUE TO PARTIAL NUM.WANTED RESULT 066E 7A MOV A, D ;ELSE GET NUM. 0658 C32C06 JMP GHX05 ;GET NEXT CHARACTER TERMINATOR TO A 066F FE0D CPI CR ;SEE IF CARRIAGE RETURN ******************************************************** 0671 CA1106 JZ ERROR ;ERROR IF SO TOO FEW FUNCTION : GETNM NUM. INPUTS : C - COUNT OF NUM. TO FIND IN INPUT STREAM 0674 C36206 JMP GNM ;ELSE PROCESS NEXT NUM. OUTPUTS : TOP OF STACK-NUM.FOUND IN REVERSE 0677 7A GNM10 MOV A, D ;WHEN COUNT 0,CHECK ORDER (LAST ON TOP OF STACK) LAST TERMINATOR CALLS : GETHX, HILO, ERROR 0678 FE0D CPI CR DESTROYS : A, B, C, D, E, H, L, F/F'S 067A C21106 JNZ ERROR ;ERROR IF NOT CR DESCRIPTION : GETNM FINDS A SPECIFIED COUNT 067D 01FFFF LXI B, 0FFFFH ;HL GETS LARGEST NUM. OF NUMBERS, BETWEEN 1 & 3, 0680 7D MOV A, L ;GET WHAT'S LEFT OF MAX. INCLUSIVE, IN THE INPUT STREAM ARG COUNT AND RETURNS THEIR VALUES ON 0681 B7 ORA A ;CHECK FOR 0 THE STACK. IF 2 OR MORE NUM. 0682 CA8A06 JZ GNM20 ;IF YES,3 NUM WERE I/P ARE REQUESTED THEN THE FIRST 0685 C5 GNM15 PUSH B ;IF NOT? FILL REMAINING MUST BE LESS THEN OR EQUEL TO ARG WITH 0FFFFH THE SECOND, OR THE FIRST & 0686 2D DCR L SECOND NUM. WILL BE SET EQUAL. 0687 C28506 JNZ GNM15 THE LAST NUM. REQUESTED MUST 068A C1 GNM20 POP B ;GET THE 3 ARG. OUT BE TERMINATED BY A CARRIAGE 068B D1 POP D RETURN OR AN ERROR INDICATION 068C E1 POP H WILL RESULT. 068D CDA006 CALL HILO ;SEE IF FIRST=SECOND GETNM FALSE GNM25 ;NO BRANCH 065B 2E03 MVI L, 3 ;PUT MAX. ARG.COUNT IN L 0690 D29506 JNC GNM25 065D 79 MOV A, C ;GET THE ACTUAL 0693 54 MOV D, H ARG.COUNT 0694 5D MOV E, L ;YES-MAKE SECOND EQUAL 065E E603 ANI 03 ;FORCE TO MAX.OF 3 TO THE FIRST 0660 C8 RZ ;IF 0,DON'T BOTHER TO ANY 0695 E3 GNM25 XTHL ;PUT FIRST ON STACK GET 0661 67 MOV H, A ;ELSE PUTACTUALCOUNT RETURN ADDR INTO 0696 D5 PUSH D ;PUT SECOND ON STACK 0662 CD2606 GNM05 CALL GETHX ;GET A NUM.FROM I/P 0697 C5 PUSH B ;PUT THIRD ON STACK STREAM 0698 E5 PUSH H ;PUT RETURNADDR.ON FALSE ERROR ;ERROR IF NOT THERE-TOO STACK FEW NUMBERS 0699 3D GNM30 DCR A ;DECREMENT RESDUAL 0665 D21106 JNC ERROR COUNT 0668 C5 PUSH B ;ELSE SAVE NUM.ON STACK 069A F8 RM ;IF NEGATIVE,PROPER 0669 2D DCR L ;DECREMENT RESULT ON STACK MAX.ARG.COUNT 069B E1 POP H ;ELSE GET RETURN ADDR 066A 25 DCR H ;DECREMENT ACTUAL 069C E3 XTHL ;REPLACE TOP RESULT ARG.COUNT WITH RETURN ADDR 069D C39906 JMP GNM30 ;TRY AGAIN
  • 74.
    D-63 D-64 ******************************************************** 06B8 13 INX D ;2'S COMPLEMENT OF DE TO DE FUNCTION : HILO 06B9 7D MOV A, L INPUTS : DE - 16 BIT INTEGER 06BA 83 ADD E ;ADD HL AND DE HL - 16 BIT INTEGER 06BB 7C MOV A, H OUTPUTS : CARRY - 0 IF HL < DE 06BC 8A ADC D ;THIS OPERATION SETS CARRY 1 IF HL => DE PROPERLY CALLS : NOTHING 06BD D1 POP D ;RESTORE ORIGINAL DE CONT. DESTROYS : F/F'S 06BE 78 MOV A, B ;RESTORE ORIGINAL CONT.OF A DESCRIPTION : HILO COMPARES THE 2 16 BIT 06BF C1 POP B ;RESTORE ORIGINALCONT.OF BC INTEGERS IN BL AND DE. THE 06C0 C9 RET ;RETURN WITH CARRY SET AS INTEGERS ARE TREATED AS REQUIRED UNSIGNED NUMBERS.THE CARRY 06C1 E1 HILO5 POP H ;IF HL CONTENTS 0FFFFH,THEN BIT IS SET ACCORDING TO THE 06C2 78 MOV A, B CARRY CAN ONLY BE SET TO 1 RESULT OF THE COMPARISON. 06C3 C1 POP B ;RESTORE ORIGINAL CONTENTS OF HILO REGISTERS 06A0 C5 PUSH B ;SAVE BC 06C4 C33207 JMP SRET ;SET CARRY AND RETURN 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 FUNCTION : NMOUT 06A4 B3 ORA E INPUTS : A - 8 BIT INTEGER 06A5 CAC106 JZ HILO5 ;WE'RE AUTOMATICALLY DONE OUTPUTS : NONE 06A8 23 INX H IF HL IS INCREMENTED BY 1 CALLS : ECHO, PRVAL 06A9 7C MOV A, H ;WANT TO TEST FOR 0 DESTROYS : A, B, C, F/F'S 06AA B5 ORA L RESULT AFTER INCREMENTING DESCRIPTION : NMOUT CONVERTS THE 8 06AB CAC106 JZ HILO5 ;IF SOHL MUST HAVE CONTAINED BIT,UNSIGNED INTEGER 0FFFFH THE A REGISTER INTO 2 ASCII 06AE E1 POP H ;IF NOT RESTORE ORIGINAL HL CHARACTERS. THE ASCII 06AF D5 PUSH D ;SAVE DE CHARACTER ARE THE ONES 06B0 3EFF MVI A, 0FFH ;WANT TO TAKE 2'S COMPLEMENT REPRESENTING THE 8 BITS. THESE OF DE CONTENTS TWO CHARACTERS ARE SENT TO 06B2 AA XRA D THE CONSOLE AT THE CURRENT 06B3 57 MOV D, A PRINT POSITION OF THE CONSOLE. 06B4 3EFF MVI A, 0FFH 06B6 AB XRA E 06B7 5F MOV E, A
  • 75.
    D-65 D-66 NMOUT 06E7 09 DAD B ;ADD DIGIT VALUE TO HL 06C7 E5 PUSH H ;SAVE HL DESTROYS ADDRESS PREVAL 06E8 4E MOV C, M ;GET CHAR.FROM MEMORY 06C8 F5 PUSH PSW ;SAVE ARGUMENT 06E9 C9 RET 06C9 0F RRC 06CA 0F RRC ******************************************************** 06CB 0F RRC FUNCTION : REGDS 06CC 0F RRC ;GET UPPER 4 BITS TO LOW INPUTS : NONE 4 BIT POSITION OUTPUTS : NONE 06CD E60F ANI HCHAR ;MASK OUT UPPER 4 BITS- CALLS : ECHO, NMOUT, ERROR, CROUT WANT 1 HEX CHAR DESTROYS : A, B, C, D, E, H, L, F/F'S 06CF 4F MOV C, A DESCRIPTION : REGDS DISPLAYS THE CONTENTS 06D0 CDE206 CALL PRVAL ;CONVERT LOWER 4 BITSTO OF THE REGISTER SAVE ASCII LOCATIONS,IN FORMATTED 06D3 CDF805 CALL ECHO ;SEND TO TERMINAL FORM,ON THE CONSOLE. 06D6 F1 POP PSW ;GET BACK ARGUMENT THE DISPLAY IS DRIVAN FROM A 06D7 E60F ANI HCHAR ;MASK OUT UPPER 4 BITS- TABLE, RTAB,WHICH WANT 1 HEX CHAR CONTAINS THE REGISTERS'S PRINT 06D9 4F MOV C, A SYMBOL, SAVE LOCATION 06DA CDE206 CALL PRVAL ADDRESS,AND LENGTH (8 OR 16 06DD CDF805 CALL ECHO BITS). 06E0 E1 POP H ;RESTORE SAVED VALUE OF HL REGDS 06E1 C9 RET 06EA 21C407 LXI H, RTAB;LOAD HL WITH ADDRESS OF START OF TABLE ******************************************************** 06ED 4E REG05 MOV C, M ;GET PRINT SYMBOL FUNCTION : PRVAL OF REG. INPUTS : C - INTEGER RANGE 0 TO F 06EE 79 MOV A, C OUTPUTS : C - ASCII CHARACTER 06EF B7 ORA A ;TEST FOR 0 END OF TABLE CALLS : NOTHING 06F0 C2F706 JNZ REG10 ;IF NOT END,BRANCH DESTROYS : B, C, H, L, F/F'S 06F3 CDEB05 CALL CROUT ;ELSE CARRIAGE DESCRIPTION : PRVAL CONVERTS A NUM. IN THE RETURN/LINE FEED TO END RANGE 0 TO F DISPLAY HEX TO THE CORROSPONDING 06F6 C9 RET ASCII CHARACTER,0-9, 06F7 CDF805 REG10 CALL ECHO ;ECHO CHARACTER A-F.PRVAL DOES NOT CHECK THE 06FA 0E3D MVI C,'=' VALIDITY OF ITS INPUT ARGUMENT. 06FC CDF805 CALL ECHO ;O/P EQUAL SIGN i.e. A = 06FF 23 INX H ;POINT TO START OF SAVE PRVAL LOCATION ADDRESS 06E2 21B407 LXI H, DIGTB ;ADDRESS OF TABLE 0700 5E MOV E, M ;GET LSP OF SAVE 06E5 0600 MVI B, 0 ;CLEAR HIGH ORDER BITS LOCATION ADDRESS OF BC TO E
  • 76.
    D-67 D-68 0701 16FF MVI D, RAMST SHR 8 ;PUT MSO OF SAVE LOC RTAB. IF NO MATCH OCCURS, THEN ADDRESS TO E CONTROL IS PASSED TO THE 0703 23 INX H ;POINT TO LENGTH FLAG ERROR ROUTINE. 0704 1A LDAX D ;GET CONTENTS OF SAVE LOC. 071B 21C407 RGADR LXI H, RTAB ;HL GETS ADDR. OF 0705 CDC706 CALL NMOUT ;DISPLAY ON CONSOLE TABLE START 0708 7E MOV A, M ;GET LENGTH FLAG 071E 110300 LXI D, RTAB5 ;DE GET SIZE OF A 0709 B7 ORA A ;SET SIGN F/F TABLE ENTRY 070A CA1207 JZ REG15 ;IF 0,REG. IS 8 BITS 0721 7E RGA05 MOV A, M ;GET REG. 070D 1B DCX D ;ELSE 16 BIT REGISTER SO IDENTIFIER MORE TO DISPLAY 0722 B7 ORA A ;CHECK FOR TABLE END 070E 1A LDAX D ;GET LOWER 8 BITS (IDENTIFIER IS 0) 070F CDC706 CALL NMOUT ;DISPLAY THEM 0723 CA1106 JZ ERROR ;IF AT END OF 0712 0E20 REG15 MVI C,' ' TABLE,ARG.IS 0714 CDF805 CALL ECHO ILLEGAL 0717 23 INX H ;POINT TO START OF NEXT 0726 B9 CMP C ;ELSE, COMPARE TABLE ENTRY TABLE ENTRY & 0718 C3ED06 JP REG05 ;DO NEXT REGISTER ARGUMENT 0727 CA2E07 JZ RGA10 ;IFEQUAL,WE'VE ******************************************************************* FOUND WHAT WE'RE FUNCTION : RGADR LOOKING FOR INPUTS : C - CHARACTER DENOTING REGISTER 072A 19 DAD D ;ELSE INCREMENT OUTPUTS : BC - ADDRESS OF ENTRY IN RTAB TABLE POINTER TO CORROSPONDING TO REG NEXT ENTRY CALLS : ERROR 072B C32107 JMP RGA05 ;TRY AGAIN DESTROYS : A, B, C, D, E, H, L, F/F'S 072E 23 RGA10 INX H ;IF A MATCH INR. DESCRIPTION :RGADR TAKES A SINGLE CHARACTER AS TABLE INPUT.THIS CHARACTER DENOTES A 072F 44 MOV B, H ;POINTER TO SAVE REGISTER. RGADR SEARCHES THE TABLE LOC.ADDR. RTAB FOR A MATCH ON THE I/P 0730 4D MOV C, L ;RETURN THIS VALUE ARGUMENT.IF ONE OCCURS,RGADR 0731 C9 RET RETURNS THE ADDR OF THE SAVED LOCATION CORRESPONDING TO THE REGISTER. THIS ADDRESS POINTS INTO
  • 77.
    D-69 D-70 ******************************************************** ******************************************************** FUNCTION : SRET FUNCTION : STHLF INPUTS : NONE INPUTS : C - 4 BIT VALUE TO BE STORED IN HALF BYTE OUTPUTS : CARRY = 1 DE - 16 BIT ADDR. OF BYTE TO BE STORED INTO CALLS : NOTHING OUTPUTS : NONE DESTROYS : CARRY CALLS : NOTHING DESCRIPTION : SRET IS JUMPED TO BY RIUTINES DESTROYS : A, B, C, H, L, F/F'S WISHING TO RETURN DESCRIPTION : STHLF TAKES THE 4 BIT VALUE IN C SUCCESS.SRET SETS THE CARRY AND STORES IT IN HALF OF THE TRUE & THEN RETURNS TO THE BYTE ADDRESSED BY REGISTER CALLER OF THE ROUTINE INVOKING DE. THE HALF BYTE USED(EITHER SRET. UPPER OR LOWER) IS DENOTED BY THE VALUE OF THE FLAG IS TEMP. SRET STHLF ASSUMES THAT THIS FLAG 0732 37 STC SET CARRY TRUE HAS BEEN PREVIOUSLY SET 0733 C9 RET RETURN APPROPRIATELY (NORMALLY BY ICMD) ******************************************************** STHLF FUNCTION : STHFO 073F D5 PUSH D INPUTS : DE - 16BIT ADDRESS OF BYTE TO BE STORED 0740 E1 POP H ;MOVE ADDR. OF BYTE IN HL INTO 0741 79 MOV A, C ;GET VALUE OUTPUTS : NONE 0742 E60F ANI 0FH ;FORCE TO 4 BIT LENGTH CALLS : STHLF 0744 4F MOV C, A ;PUT VALUE BACK DESTROYS : A, B, C, H, L, F/F'S 0745 3AFDFF LDA TEMP ;GET HALF BYTE FLAG DESCRIPTION : STHFO CHECKS THE HALF BYTE 0748 B7 ORA A ;CHECK FOR LOWER HALF FLAG IN TEMP TO SEE IF IT SET TO 0749 C25207 JNZ STH05 ;BRANCH IF NOT LOWER. IF SO, STFHO STORES 074C 7E MOV A, M ;ELSE GET BYTE A 0 TO PAD OUT THE LOWER HALF 074D E6F0 ANI 0F0H ;CLEAR LOWER 4 BITS OF THE ADDRESSED BYTE : 074F B1 ORA C ;OR IN VALUE OTHERWISE,THE ROUTINE TAKES 0750 77 MOV M, A ;PUT BYTE BACK NO ACTION. 0751 C9 RET 0752 7E STH05 MOV A, M ;IF UPPER HALF,GET BYTE STHFO 0753 E60F ANI 0FH ;CLEAR UPPER 4 BITS 0734 3AFDFF LDA TEMP ;GET HALF BYTE FLAG 0755 47 MOV B, A ;SAVE BYTE IN B 0737 B7 ORA A ;SET F/F'S 0756 79 MOV A, C ;GET VALUE 0738 C0 RNZ ;IF SET TO UPPER DO NOT 0757 0F RRC DO ANYTHING 0758 0F RRC 0739 0E00 MVI C, 0 ;ELSE WANT TO STORE THE 0759 0F RRC VALUE 0 075A 0F RRC ;ALIGN TO UPPER 4 BITS 073B CD3F07 CALL STHLF ;DO IT 075B B0 ORA B ;OR IN ORIGINAL LOWER 4 BITS 073E C9 RET 075C 77 MOV M, A ;PUT NEW CONFGURATION BACK 075D C9 RET
  • 78.
    D-71 D-72 ******************************************************** ******************************************************** FUNCTION : VALDG FUNCTION : VALDL INPUTS : C - 1 ASCII CHARACTER INPUTS : C - CHARACTER OUTPUTS : CARRY - 1 IF CHAR. REPRESENTS VALID HEX OUTPUTS : CARRY - 1 IF INPUT ARGUMENT VALID DIGIT DELIMITER 0 OTHERWISE - 0 OTHERWISE CALLS : NOTHING CALLS : NOTHING DESTROYS : A, F/F'S DESTROYS : A, F/F'S DESCRIPTION : VALDG RETURNS SUCCESS IF ITS DESCRIPTION : VALDL RETURNS SUCCESS IF ITS INPUT ARGUMENT IS IN ASCII CHAR. INPUT ARGUMENT IS A VALID REPRESENTING A VALID HEX DELIMITER CHARACTER (SPACE, HEX DIGIT (0-9, A-F) AND FAILURE COMMA, CR)AND FAILURE OTHERWISE. OTHERWISE. VALDL VALDG 0779 79 MOV A,C 075E 79 MOV A, C 077A FE2C CPI ',' ;CHECK FOR COMMA 075F FE30 CPI 'C' ;TEST CHAR. AGAINST '0' 077C CA3207 JZ SRET 0761 FA1C06 JM FRET ;IF ASCII CODE IS 077F FE0D CPI CR ;CHECK FOR CARRIAGE LESS,CANNOT BE VALID RETURN DIGIT 0781 CA3207 JZ SRET 0764 FE39 CPI '9' ;ELSE SEE IF IN RANGE '0'-'9' 0784 FE20 CPI ' ' ;CHECK FOR SPACE 0766 FA3207 JM SRET ;CODE BET' '0' - '9' 0786 CA3207 JZ SRET 0769 CA3207 JM SRET ;CODE EQUAL '9' 0769 C31C06 JMP FRET ;ERROR IF NONEOF ABOVE 076C FE41 CPI 'A' ;NOT A DIGIT-TRY FOR A LETTER ******************************************************** 076E FA1C06 JM FRET ;NO CODE BET' '9'-'A' MONITOR TABLES 0771 FE47 CPI 'G' ******************************************************** 0773 F21C06 JP FRET ;NO CODE THAN 'F' 0776 C33207 JMP SRET ;OKAY CODE IS 'A' TO 'F' 078C 0D SGNON DB CR, LF, 'MICROFRIEND-I' CR, LF EOT. 078D 0A 078E 4D494352 0792 4F465249 0796 454E442D 079A 4920200D
  • 79.
    D-73 D-74 079E 0A 07C3 46 DB 'F' 079F 00 LSGNON EQU S-SGNON ;LENGTH OF RTAB ;TABLE OF REGISTER SIGNON MESSAGE INFORMATION CADR ;TABLE OF 07C4 41 DB 'A' ;REGISTER ADDRESSES OF IDENTIFIER COMNMAND 07C5 EE DB ASAV AND 0FFH ROUTINES ;ADDRESS OF 07A0 0000 DW 0 REGISTER SAVE 07A2 1405 DW XCMD LOCATION 07A4 F004 DW SCMD 07C6 00 DB0 ;LENGTH FLAG 0=8 07A6 D004 DW MCMD BITS 1=16 BITS 07A8 8604 DW ICMD 0003 RTABS EQU $-RTAB ;SIZE OF AN ENTRY 07AA 6804 DW GCMD IN THIS TABLE 07AC 3704 DW DCMD 07C7 42 DB 'B' CTAB ;TABLE OF VALID 07C8 EC DB BSAV AND 0FFH COMMAND 07C9 00 DB 0 CHARACTERS 07CA 43 DB 'C' 07CB EB DB CSAV AND 0FFH 07AE 44 DB 'D' 07CC 00 DB 0 07AE 47 DB 'G' 07CD 44 DB 'D' 07AE 49 DB 'I' 07CE EA DBD SAV AND 0FFH 07AE 4D DB 'M' 07CF 00 DB 0 07AE 53 DB 'S' 07D0 45 DB 'E' 07AE 58 DB 'X' 07D1 E9 DB ESAV AND 0FFH 0006 NCMDS EQU $-CTAB ;NUM. OF VALID 07D2 00 DB 0 COMMANDS 07D3 46 DB 'F' DIGTB ;NUM. OF PRINT VALUE OF 07D4 ED DB FSAV AND 0FFH HEX DIGITS 07D5 00 DB 0 07B4 30 DB '0' 07D6 49 DB 'I' 07B5 31 DB '1' 07D7 F1 DB ISAV AND 0FFH 07B6 32 DB '2' 07D8 00 DB 0 07B7 33 DB '3' 07D9 48 DB 'H' 07B8 34 DB '4' 07DA F0 DB HSAV AND 0FFH 07B9 35 DB '5' 07DB 00 DB 0 07BA 36 DB '6' 07DC 4C DB 'L' 07BB 37 DB '7' 07DD EF DB LSAV AND 0FFH 07BC 38 DB '8' 07DE 00 DB 0 07BD 39 DB '9' 07DF 4D DB 'M' 07BE 41 DB 'A' 07E0 FD DB MSAV AND 0FFH 07BF 42 DB 'B' 07E1 01 DB 1 07C0 43 DB 'C' 07E2 53 DB 'S' 07C1 44 DB 'D' 07E3 F5 DB SSAV AND 0FFH 07C2 45 DB 'E' 07E4 01 DB 1
  • 80.
    D-75 D-76 07E5 50 DB 'P' 0811 9CFF U1RAM 07E6 F3 DB PSAV+1 AND 0FFH 0813 AE0E LOAD 07E7 01 DB 1 0815 4108 CODE 07E8 00 DB 0 ;END OF TABLE 0817 B70C SAVE MARK 0819 FD00 STEP 07E9 000B79 DB 0 081B 5109 REG 07EC BOC2C2 JMP CO ;TTY CONSOLE 081D 8B01 SET OUTPUT 081E CB00 RUN 07EF 0CC3CA JMP CI ;TTY CONSOLE INPUT 0821 5C08 COD-A 00 MOVE BLOCK 07F2 0C3E95 0823 E50B 01 FILL BLOCK 07F5 D305C3 0825 DD08 02 INSERT BYTE 07F8 9503 0827 2909 03 DELETE BYTE 07FA C3C405 0829 BD08 04 BLOCK SEARCH 07FD C39005 082B 5109 05 HEX TO DECIMAL 07F0 C3CA0C 082D 9F09 06 DECIMAL TO HEX 07F3 3E95 CODE0 MVI A, 95 082F F10B 07 PROGRAMMING 07F5 D305 OUT CNTRL 0831 A70B 08 VERIFY 07F7 C39503 JMP CODE1 0833 1502 09 FERR 0395 3EF7 CODE1 MVI A, BLANK DOT 0835 1502 0A BLANK CHECK 0397 D305 OUT DATA 0837 E60A 0B BLANK CHECK 0399 C9 RET 0839 650B 0C CHKSUM 0800 08 CMDTB GO 083B 1502 0D FERR 0801 00 SET 083D A608 0E COMPLEMENT 0802 03 REG BLOCK 0803 02 STEP 083F 5B0E 0F ROLLING DISPLAY 0804 0B SAVE 0841 0600 CODE MVI B, NODOT 0805 01 CODE 0843 CDD701 CALL CLEAR 0806 0A LOAD 0846 CDF307 MVI B, DTFLD 0807 0C U1 0849 06 CALL GTHEX 0808 0D U2 084A 01 0809 0E U3 084B CD2B02 JNC ERR 080A 0F U4 084E 1600 MVI D, 00 080B A5FF CMDAD U4RAM 0850 7B MOV A, E 080D A2FF U3RAM 0851 FE11 CPI 10 080F 9FFF U2RAM 0853 D21502 JNC ERR
  • 81.
    D-77 D-78 0856 212108 LXI H, CODEA 08AC 7E CM1 MOV A, M 0859 C3A40C JMP RMNCOD 08AD 2F CMA 085C 3EFF MOVEBLK MVI A, 0FF 08AE 77 MOV M, A 085E 32BFFF STA COPYTEST 08AF 00 NOP 0861 CD780A BLMOV CALL LDAIL 08B0 BE CMP M 0864 2AB9FF LHLD DSSAVE 08B1 C21502 JNZ ERROR 0867 EB XCHG 08B4 23 INX H 0868 2ABDFF LHLD SSAVE 08B5 EB XCHG 086B 3ADFFF MB1 LDA COPYTEST 08B6 CD6F0A CALL S-E 086E FE00 CPI L 08B9 D2AC08 JNC CM1 0870 CA7708 JZ MB2 08BC CF RST 1 0873 7E MOV A, M 08BD CD460C BLOCKSEARCH CALL SRLD 0874 C37A08 JMP MB3 08C0 2ABDFF LHLD SSAVE 0877 CDD60B MB2 CALL READ 08C3 46 BZI MOV B, M 087A 47 MB3 MOV B, A 08C4 3AB8FF LDA SERSAVE 087B EB XCHG 08C7 B8 CMP B 087C 77 MOV M, A 08C8 CCD408 CZ DISPLY 087D 7E MOV A, M 08CB 23 INX H 087E B8 CMP B 08CC EB XCHG 087F C21502 JNZ ERR 08CD CD6F0A CALL S-E 0822 13 IND X 08D0 D2C308 JNC BS1 0823 23 INX H 08D3 CF RST 1 0824 E5 PUSH H 08D4 E5 DISPLY PUSH HL 0825 CD6F0A CALL 08D5 D5 PUSH DE 0828 D1 POP D 08D6 F5 PUSH PSW 0829 D26B08 JNC MB1 08D7 CD6203 CALL UPDAD1 088C CF RST 1 08DA C3910D JMP DISP1 088D CD46 08DD CDAA0A INSERT CALL SEDI ;LOAD DE 088F 2ABDFF FILL BLK LHLD SSAVE 08E0 0601 MVI B, 01 0892 3AB8FF LDA SRSAVE 08E2 CDD701 CALL CLEAR ;DOT IN ADDR. FIELD 0895 47 MOV B, A 08E5 0E03 MVI A, 03 0896 00 NOP 08E7 CDC20A CALL DTDISP 0897 77 MOV M, A 08EA 00 NOP 0898 7E MOV A, M 08EB 0600 MVI B, 00 0899 B8 CMP B 08ED CD2B02 CALL GTHEX ;IA 089A C21502 JNZ ERR 08F0 D21502 JNC ERROR 089D 23 INX H 08F3 EB XCHG 089E EB XCHG 08F4 22B6FF SHLD IASAVE ;IA 089F CD6F08 CALL S-E 08F7 CD490C INS1 CALL SRL1 ;LOAD SR 08A2 D29208 JNC FB1 08FA 2ABBFF LHLD SESAVE 08A5 CF RST 1 08FD 54 MOV D, H ;HL:SS-SE 08A6 CD930A COMPLEMENT CALL LDSSE 08FE 5D MOV E, L 08A9 2ABDFF LHLD SSAVE 08FF 13 INX D ;DE:DS(SE+1)
  • 82.
    D-79 D-80 0900 7E INSZ MOV A, M ;DATA AT SS 0939 CD2B02 CALL GTHEX 0901 47 MOV B, A 093C D21502 JNC ERR 0902 EB XCHG 093F EB XCHG 0903 77 MOV M, A 0940 22B4FF SHLD DASAVE 0904 7E MOV A, M 0943 000000 NOPS 0905 B8 CMP B 0946 E5 PUSH H 0906 C21502 JNZ ERR 0947 D1 POP D 0909 1B DCX DE 0948 23 INX H 090A 2B DCX HL 0949 3EFF MVI A, FF 090B EB ECHG 094B 32BFFF STA COPYTEST 090C D5 PUSH DE 094E C36B08 JMP MB1 090D E5 PUSH HL 0951 0E05 HEX-DEMVI C, 05 090E 2AB6FF LHLD IASAVE 0953 CDC20A CALL DTDISP 0911 EB ECHG 0956 0600 MVI B, 00 0912 E1 POP HL 0958 CD2B02 CALL GTHEX 0913 7D MOV A, L 095B D21502 JNC ERROR 0914 93 SUB E 095E EB XCHG 0915 7C MOV A, H 095F 22B1FF SHLD HESAVE 0916 9A SUB D 0962 AF RAA 0917 D1 POP DE 0963 32B1FF STA CARRY LOC 0918 D20009 JNC INS2 0966 010000 LXI B, 00 091B 2AB6FF LHLD TASAVE 0969 7C HD0 MOV A, H ;SEE HL=HEX 091E 3AB8FF LDA SRSAVE COUNT 00 0921 77 MOV M, A 096A B5 ORA L 0922 47 MOV B, A 096B CA8909 JZ HD3 ;OVER 0923 7E MOV A, M DISPLAY BC 0924 B8 CMP B 096E 2B DCX HL ;DECIMAL 0925 C2150A CF JNZ ERROR CARRY CLEAR 0929 CDAA0A DELETE CALL SED1 096F AF XRA A 092C 0601 MVI B, 01 0970 79 MOV A, C 092E CDD701 CALL CLEAR 0971 3C INR A ;INCREMENT C 0931 0E04 MVI C, 04 0972 37 DAA ;DECIMALLY 0933 CDC20A CALL DTDISP 0973 4F MOV C, A 0936 00 NOP 0937 0600 MVI B, 00
  • 83.
    D-81 D-82 0974 D26909 JNC HD0 ;IF NO CARRY 09C1 D5 PUSH DE ;SAVE HEX COUNT 0977 AF XRA A 09C2 C3640C JP DH2 ;DISPLAY HEX 0978 78 MOV A, B COUNT 0979 3C INR A 09C5 AF DH0 XRA A ;CLEAR CARRY 097A 27 DAA 09C6 13 INX DE ;INCREMENT HEX 097B 47 MOV B, A 09C7 7D MOV A, L 097C D26909 JNC HD0 ;IF NO CARRY CHECK 09C8 3C INR A ;DECIMAL 097F 3AB1FF LDA CARRY LOC ADJUST 0982 3C INR A 09C9 27 DAA & INCREMENT H1 0983 32B1FF STA CARRY LOC ;CARRY 09CA 6F MOV L, A AFTER 09CB D2B709 0986 C36909 JMP HD0 ;EACH BC 09CE AF XRA A 0989 3AB1FF HD3 LDA CARRY LOC ;DECIMAL 09CF 7C MOV A, H ;DECIMALLY 098C 67 MOV H, A INCREMENT 098D 68 MOV L, B ;IN ADDRESS 09D0 3C INR A ;H AND 098E C5 PUSH BC ;CARRY & 09D1 27 DAA ;CONTINUE 098F CD6203 CALL MODI DAD1 ;HIGHER 09D2 67 MOV H, A BYTE OF 09D3 C3B709 JMP DH1 0992 C1 POP BC ;BCD COUNTER 09D6 FF DATES 09D7 C30F0E SERIAL JMP SRL1 0993 79 MOV A, C ;SHOWN OVER BYTE 09DA CDE309 CALL BRID 0994 CD6E03 CALL MODIDTA 09DD CDFA03 CALL SIGNON 0997 76 HLT 09E0 C30804 JMP GETCM 0998 TO 099E IS BLANK. 09E3 20 BRI0 RIM 099F 0E06 DEC-HEX MVI C, 06 ;DISPLAY DE 09E4 B7 ORA Z 09A1 CDC20A CALL DTDISP 09E5 FAE809 JP BRID 09A4 0600 MVI B, 00 ;GET IN DE 09E8 20 BRI1 RIM 09A6 CD2B02 CALL GTHEX 09E9 B7 ORA Z 09A9 D21502 JNC ERR ;DECIMAL 09EA FAE809 JM BRI1 09AC D5 PUSH DE ;NUMBER 09ED 21FAFF LXI H, -6 09AD C1 POP BC ;BC:NUMBER 09F0 1E04 BRI3 MVI E, 04 09AE 219999 LXI H, 9999 ;HL:9999 09F2 1D BRI4 DCR E 09B1 110000 LXI D, 0000 ;DE:00 HEX 09F3 C2F209 JM BRI1 CNTR 09F6 23 INX H 09B4 AF XRA ;CLEAR CARRY 09F7 20 RIM 09B5 00 NOP 09F8 B7 ORA A 09B6 08 DSUB ;UNSPECIFIED LODE 09F9 F2F009 JP BRI3 HL-BC INTO HL 09FC E5 PUSH H 09B7 3E99 DH2 MVI A, 99 ;9999-NUMBER 09FD 24 INR H 09B9 BD CMP L 09FE 2C INR L 09BA C2C509 JNZ DH0 09FF 22C0FF SHLD BIT TIME 09BD BC CMP P ;IS HL 9999? 0A02 E1 POP H 09BE C2C509 JNZ DH0 ;IF NO LOOP 0A03 B7 ORA A
  • 84.
    D-83 D-84 0A04 7C MOV A, H 0A46 7B MOV A, E 0A05 1F RAR 0A47 32ACFF STA CnSAVE 0A06 67 MOV H, A 0A4A C9 RET 0A07 7D MOV A, L 0A4B 3AACFF SSTCP LDA CnSAVE 0A08 1F RAR 0A4E FE00 CPI 00 0A09 6F MOV L, A 0A50 CAFD00 JZ STEP 0A0A 24 INR H 0A53 2AF2FF LHLD PCSAVE 0A0B 0606 MVI B, 06 0A56 EB XCHG 0A0D C3080E JMP 6PASS 0A57 2AADFF LHLD BrSAVE 0A10 79 CNVBN MOV A, C 0A5A 7D MOV A, L 0A11 D630 SUI '0' 0A5B BB CMP E 0A13 FE0A CPI 10 0A5C C22601 JNZ STP20 0A15 F8 RM 0A5F 7C MOV A, H 0A16 D607 SUI 7 0A60 BA CMP D 0A18 C9 RET 0A61 C22601 JNZ STP20 0A19 0601 MVI B, 01 0A64 3AACFF LDA CnSAVE 0A1B CDD701 CALL 0A67 3D DCR A 0A1E 0E07 MVI C, 07 0A68 32ACFF STA CnSAVE 0A20 CDC20A CALL 0A6B C3AB0C JMP SST0 0A23 000600 0A6F 2ABBFF LHLD SESAVE 0A26 CD2B02 CALL GTHEX 0A72 7D MOV A, L 0A29 D21502 INC ERROR 0A73 93 SUB E 0A2C EB XCHG 0A74 7C MOV A, H 0A2D 22ADFF SHLD BRASAVE 0A75 9A SBB D 0A30 21E20A LXI H, CnADR 0A76 EB XCHG 0A33 AF XRA A 0A77 C9 RET 0A34 47 MOV B, A 0A78 CD930A LDALL CALL LDSSE 0A35 CDB702 CALL OUTOUT 0A7B 0601 MVI B, 01 0A38 3E01 MVI A, 01 0A7D CDD701 CALL 0A3A 47 MOV B, A 0A80 0E02 MVI C, 02 0A3B 21310B LXI H, 0B31 ;BLANK 0A82 CDC20A CALL 0A3E CDB702 CALL OUTPUT 0A85 000600 0A41 0601 MVI B, 01 ;USE ADDRESS FIELD 0A88 CD2B02 CALL GTHEX OF DISPLAY & DOT 0A8B D21502 JNC ERR 0A43 CD2B02 CALL GTHEX 0A8E EB XCHG
  • 85.
    D-85 D-86 0A8F 22B9FF SHLD DSSAVE 0ADC 0B 0A92 C9 RET 0ADD 14 0A93 0601 LDSSE MVI C, 01 0ADE 15 SRADR 0A95 CDD701 CALL DIDISP 0ADF 15 0A98 0E00 LHLD SSAVE 0AE0 05 0A9B CDC20A CALL UPDAD1 0AE1 14 0A9D 00 NOP 0AE2 15 CnADR 0A9E 0600 MVI B, 0 0AE3 15 0AA0 CD2B02 CALL GTHEX 0AE4 0C 0AA3 D21502 JNC ERROR 0AE5 16 0AA6 EB XCHG 0AE6 CD160B BLANCKCHK CALL PrLOAD 0AA7 22BDFF SHLD SSAVE 0AE9 210080 LXI H, 8000 0AAA 0601 MVI B, 01 0AEC 000000 NOPs 0AAC CDD701 CALL 0AEF 06FF BC1 MVI B, FF 0AAF 0E01 MCI C, 01 0AF1 7E0000 MOV A, M NOP NOP 0AF4 B8 CMP B 0AF5 C4D408 CMZ DISPLAY 0AB1 CDD20A CALL 0AF8 23 INX H 0AB4 000600 0AF9 EB XCHG 0AB7 CD2B02 CALL GTHEX 0AFA CDD60B CALL CALC 0ABA D21502 JNC ERROR 0AFD 67 MOV H, L 0ABD EB XCHG 0AFE 2EFF MVI L, FF 0ABE 22BBFF SHLD SESAVE 0B00 000000 NOP 0AC1 C9 RET 0B03 000000 NOP 0AC2 0600 DIDISP MVI B, 00 0B06 000000 NOP 0AC4 21CE0A LXI H, SSADR 0B09 0000 0AC7 09 DTDO DAD BC 0B0B 7D BC3 MOV A, L 0AC8 09 DAD BC 0B0C 93 SUB E 0AC9 3E01 MVI 01 0B0D 7C MOV A, H 0ACB C3B702 JMP OUTPUT 0B0E 9A SBB D 0ACE 0505 SSADR DCR B 0B0F EB XCHG 0AD0 05 DCR B 0B10 D2EF0A JNC BC1 0AD1 0E 0B13 CF 0AD2 0D 0B14 EF 0AD3 05 0B15 FF 0AD4 13 0B16 21310B PrLOAD LXI H, PrADR 0AD5 0A 0B19 AF XRA A 0AD6 0D 0B1A 47 MOV B, A 0AD7 0A 0B1B CDB702 CALL OUTPUT 0AD8 10 0B1E 3E01 MVI A, 01 0AD9 0E 0B20 47 MOV B, A 0ADA 0D 0B21 21310B LXI H, 0B ;BLANK OF 0ADB 0E DISPLAY DOT
  • 86.
    D-87 D-88 0B24 CDB702 CALL OUTPUT 0B6E 0E00 MOV C, 00 0B27 0601 MVI B, 01 0B70 210080 LXI H, 8000 0B29 CD2B02 CALL GTHEX ;GET HEX IN 0B73 7E CH0 MOV A, M ADDR. 0B74 81 POP D 0B2C 7B MOV A, E 0B75 4F ADD C 0B2D 32A7FF STA PrSAVE 0B76 23 INX H 0B30 C9 RET 0B77 7B MOV A, E 0B31 15 PRADR b 0B78 95 SUB L 0B32 15 b 0B79 7A MOV A, D 0B33 12 p 0B7A 9C SBB H 0B34 14 R 0B7B D2730B JNC CH0 0B35 CD900C DUPL CALL DDISP 0B7E 69 MOV L, C 0B38 3AA9FF LDA PRSAVE 0B7F 2600 MVI H, 00 0B3B FE01 CPI 01 0B81 CD620B LXI H, CHADR 0B3D CA460B JZ DUP1 0B84 3E01 MVI A,01 0B40 21FF07 LXI H, 07FF 0B86 0600 MVI B,00 0B43 C3490B JMP DUP2 0B88 21A50B LXI H, CHADR 0B46 21FF0F DUP1 LXI H, 0FFF 0B8B CDB702 CALL OUTPUT 0B49 110030 DUP2 LXI D, 3000 0B8E 76 HALT 0B4C 19 DAD DE 0B8F 0000 NOPs 0B4D 22BBFF SHLD SESAVE 0B91 7B CH2 MOV A, E 0B50 EB XCHG 0B92 95 SUB L 0B51 22BDFF SHLD SSAVE 0B93 7A MOV A, D 0B54 2600 MVI H, 00 0B94 9C SBB H 0B56 C3B10C JMP DUP3 0B95 E1 POP H 0B59 F7 0B96 D2710B JNC CH0 0B5A 0B 0B99 CD6203 CALL UPDAD1 0B5B CD880C COPY CALL CDISP 0B9C 3E01 MVI A, 01 0B5E AF XRA A 0B9E 21A50B LXI H, CHADR 0B5F 32BFFF CHKSUM STA COPYTEST 0BA1 CDB702 CALL GTHEX 0B62 C36108 JMP BLMOV 0BA4 76 HALT 0B65 CD160B CALL PrLOAD 0BA5 0C CHADR INR C 0B68 CDD60B CALL CALC 0BA6 00 NOP 0B6B 57 MOV D, A 0BA7 0000 VERIFY NOP 0B6C 1EFF MOV E, FF 0BA9 CD800C CALL VDISP
  • 87.
    D-89 D-90 0BAC 2AB9FF LHLD DSSAVE 0BF4 2AB9FF LHLD FF89 0BAF EB XCHG 0BF7 EB XCHG 0BB0 2ABDFF LHLD SSAVE 0BF8 2ABDFF LHLD FFBD 0BB3 EB XCHG 0BFB 7E MOV A, M 0BB4 46 VFY1 MOV B, M 0BFC 47 MOV B, A 0BB5 EB XCHG 0BFD EB XCHG 0BB6 7E MOV A, M 0BFE 77 MOV M, A 0BB7 EB XCHG 0BFF E5 PUSH H 0BB8 B8 MOV A, M 0C00 C5 PUSH B 0BB9 78 XCHG 0C01 F5 PUSH PSW 0BBA C4D408 CMP B 0C02 D5 PUSH D 0BBD 23 INX H 0C03 0600 MVI B, 00 0BBE 13 INX D 0C05 CD6203 CALL 0362 0BBF E5 PUSH HL 0C08 D1 POP D 0BC0 2ABBFF LHLD SESAVE 0C09 D5 PUSH D 0BC3 7D MOV A, L 0C0A EB XCHG 0BC4 93 SUB E 0C0B 0600 MVI B, 00 0BC5 7C MOV A, H 0C0D 7E MOV A, M 0BC6 9A SBB D 0C0E CD6E03 CALL 036E 0BC7 E1 POP H 0C11 D1 POP D 0BC8 00 NOP 0C12 F1 POP PSW 0BC9 D2B40B JNC VFY1 0C13 C1 POP B 0BCC CF RST 1 0C14 E1 POP H 0BCD E5 0C15 7E MOV A, M 0BCE CD6E03 0C16 B8 CMP B 0BD1 F1 0C17 C21502 JNZ 0215 0BD2 CD6E06 0C1A 13 LDAX D 0BD5 76 0C1B 23 INX H 0BD6 3AA9FF CALC LDA $20A9 0C1C E5 XCHG 0BD9 47 MOV B, A 0C1D CD6F0A CALL 0A6F 0BDA 3E03 MVI A, 03 0C20 D1 POP E 0BDC 37 STC 0C21 D2FB0B JNC 0BFB 0BDD 17 RAL 0C24 CF RST 7.5 0BDE 05 DCR B 0C25 00 NOP 0BDF F2DC0B JP 0BDC 0C26 D5 PUSH DE 0BE2 C680 ADI 80 0C27 11FF19 LXI D, 19FF 0BE4 C9 RET 0C2A CDF105 CALL DELAY 0BE5 CD460C CALL SRKD 0C2D D1 POP DE 0BE8 CD8F08 JMP 088F 0C2E 7A MOV A, D 0BEB 000000 NOPs 0C2F F660 ORI 60 0BEE 0000 NOPs 0C31 D302 OUT 02 0BF0 00 PROGRAM NOP 0C33 13 INX D 0BF1 CD780A CALL 0A78 0C34 23 INX H
  • 88.
    D-91 D-92 0C35 EB XCHG 0C7B 0E00 MVI C, 00 0C36 E5 PUSH H 0C7D C36B0C JMP MESG 0C37 2ABBFF LHLD SESAVE 0C80 CD780A VDISP CALL LDALL 0C3A 7D MOV A, L 0C83 0E01 MVI C, 01 0C3B 93 SUB E 0C85 C36B0C JMP MESG 0C3C 7C MOV A, H 0C88 CD160B CDISP CALL PRLOAD 0C3D 9A SBB D 0C8B 0E02 MVI C, 02 0C3E E1 POP H 0C8D C36B0C JMP MESG 0C3F EB XCHG 0C90 CD160B DDISP CALL PRLOAD 0C40 D20E0C JNX PRO 0C93 0E03 MVI C, 03 0C43 C3360E JMP PR1 0C95 C36B0C 0C46 CD830A SRKD CALL LDSSE 0C98 b 15 BLANK 0C49 21DE0A LXI H, SRADR 0C99 p 12 P 0C4C AF XRA A 0C9A b 15 BLANK 0C4D 47 MOV B, A 0C9B V 17 U 0C4E CDB702 CALL OUTPUT 0C9C h 15 BLANK 0C51 3E01 MVI A, 01 0C9D r OR 0C C 0C53 47 MOV B, A 0C9E b 15 BLANK 0C54 CDB702 CALL OUTPUT 0C9F D 0D D 0C57 0601 MVI B, 01 0CA0 B 15 BLANK 0C59 CD2B02 CALL GTHEX 0CA1 S 05 S 0C5C D21502 INC ERR 0CA2 b 15 BLANK 0C5F 7B MOV A, E 0CA3 L 11 L 0C60 32B8FF STA SRSAVE 0CA4 19 RMNC0D DAD D 0C63 C9 RET 0CA5 19 DAD D 0C64 CDD701 DH2 CALL CLEAR 0CA6 7E MOV A, M 0C67 E1 POP HL 0CA7 23 INX H 0C68 C38D0D JMP DH3 0CA8 66 MOV A, M 0C6B C5 MESG PUSH BC 0CA9 6F MOV L, A 0C6C CDD701 CALL CLEAR 0CAA E9 PCHL 0C6F C1 POP BC 0CAB C22601 SST0 JNZ STP20 0C70 0600 MVI B, 00 0CAE C3FD00 JMP STEP 0C72 21980C LXI H, PADR 0CB1 22B9FF DUP3 SHLD SSAVE 0C75 C3C70A JMP DIDO 0CB4 C3F70B JMP PROG 0C78 CD780A PDISP CALL LDALL
  • 89.
    D-93 D-94 0CB7 CD930A SAVE CALL LDSSE ;GET SS AND 0D0A 57 MOV D, A SE BLOCK 0D0B 23 INX HL LIMIT 0D0C 0B DCX BC 0CBA 21550D LXI H, FnSAVE ;DISPLAY Fn 0D0D 78 MOV A, B 0CBD CD190B CALL PrLOAD 0D0E B1 ORA C 0CC0 32BAFF STA FnSAVE 0D0F 7A MOV A, D 0CC3 0E04 MVI C, 04 0D10 C2090D JNZ SUM0 0CC5 CD6B0C CALL MESG 0D13 B7 ORA A 0CC8 CD040D CALL CHKSUM1 ;SAME FILE NAME 0D14 C9 RET 0CCB 32BFFF STA (CHSAVE) ;SAVE CHECKSUM 0D15 5E TAPEOUT MOV E, M ;OUTPUT A MEMORY 0CCE 21A00F LXI H, 4000D BLOCK TO 0CD1 DA1502 JC ERROR ;MISMATCH ERROR 0D16 CD210D CALL OUTBYTE ;TAPE 0CD4 CD590D CALL 1KOUT ;1KHz LEADER FOR 4 0D19 23 INX HL SEC. 0D1A 0B DCX BC 0CD7 21BAFF LXI H, BUSTADR ;BUFFER START 0D1B 78 MOV A, B ADDRESS 0D1C B1 ORA C 0CDA 010600 LXI B, 0006 ;6 PARAMETER OIP 0D1D C2150D JNZ TAPEOUT 0CDD CD150D CALL TAPEOUT ;SEND Fn,SE,SS & 0D20 C9 RET CHECKSUM 0D21 1608 OUTBYTE MVI D, 08 0CE0 21A00F LXI H, 4000 0D23 B7 ORA A 0CE3 CD5E0D CALL 2KOUT ;O/P 2KHz MIDSYNC. 0D24 CD350D CALL OUTBIT 0CE6 CDF50C CALL GETPARA ;SET SS AND BLOCK 0D27 7B MOV A, E COUNT 0D28 0F RRC 0CE9 CD150D CALL TAPEOUT 0D29 CD690F CALL OUTBIT 0CEC 21A00F LXI H, 4000D 0D2C 15 DCR D ;8 BIT DATA 0CEF CD5E0D CALL 2KOUT ;2KHz END SYNC. 0D2D C2270D JNZ 0B 0CF2 C34E00 JMP SIGNON ;FrIEnd 0D30 37 STC 0CF5 2ABBFF GETPARA LHLD SESAVE 0D31 CD350D CALL OUTBIT ;STOP BIT 0CF8 EB XCHG 0D34 C9 RET 0CF9 2ABDFF LHLD SSAVE ;THIS RETURN SS IN 0D35 E5 OUTBIT PUSH H HL 0D36 D5 PUSH D 0CFC 7B MOV A, E ;AND BYTE COUNT IN BC 0D37 C5 PUSH B 0CFD 95 SUB L 0D38 2600 MVI H, 00 0CFE 4F MOV C, A 0D3A DA470D JC OUT1 0CFF 7A MOV A, D ;BC=DE-HL=SE-SS 0D3D 2E08 MVI L, 08 0D00 9C SBB H 0D3F CD5E0D CALL 2KOYT 0D01 47 MOV B, A 0D42 2E02 MVI L, 02 0D02 03 INX B ;BC=BYTE COUNT HL:SS 0D44 C34E0D JMP OUT2 0D03 C9 RET 0D47 2E04 MVI L, 04 0D04 CDF50 CHKSUM CALL GETPARA ;GET PARAMETER 0D49 CD5E0D CALL 2KOUT 0D07 D8 RET 0D4C 2E04 MVI L, 04 0D08 AF XRA A 0D4E CD590D CALL 1KOUT 0D09 86 SUM0 ADD A, HL 0D51C1 POP B
  • 90.
    D-95 D-96 0D52 D1 POP D 0D8A 20 RIM 0D53 E1 POP H 0D8B 17 RAL 0D54 C9 RET 0D8C C9 RET 0D55 15 FnADR BLANK 0D8D CD6203 DH3 CALL UPDAD1 0D56 15 BLANK 0D90 76 HLT 0D57 0F F 0D91 F1 DISP1 POP PSW 0D58 16 n 0D92 CD6E03 CALL UPDAD1 0D59 0E61 1KOUT MVI C, F1K 0D95 CDE702 DISP2 CALL RDKBD 0D5B C3600D JMP TONE 0D98 FE10 CPI 11 0D5E 0E2E 2KOUT MVI C, F2K 0D9A C2950D INZ DISP2 0D60 29 TONE DAD HL 0D9D D1 POP DE 0D61 3EC0 MVI A, C0 0D9E E1 POP HL 0D63 C5 SQW PUSH B 0D9F C9 RET 0D64 30 SIM 0DA0 C2490D LOAD3 INZ LOAD2 0D65 0D TP DCR C 0DA3 C34500 JMP CMMND 0D66 C2650D JNZ TP 0DA6 FE12 0D69 EF80 XRI 80 0DA8 C21502 0D6B 47 MOV B, A 0DAB 3AFDFF PRVRG LDA RGPTR 0D6C 2B DCX H 0DAE FE00 CPI 00 0D6D 7C MOV A, H 0DB0 CAF702 JZ RETF 0D6E B5 ORA L 0DB3 3D DCR A 0D6F 78 MOV A, B 0DB4 32FDFF STA RGPTR 0D70 C3640F JMP EXT 0DB7 C3FA02 JMP RETT 0D73 CD170F GETBYTE CALL GETBIT ;OIP DATA IN E 0DBA FE10 CHK CPI INR 0D76 1608 MVI D, 08 0DBC C8 RZ 0D78 CD170F GET0 CALL GETBIT 0DBD FE12 CPI DCR 0D7B 7B MOV A, E 0DBF C2CF01 JNZ SUB15 0D7C 1F RAR 0DC2 C9 RET 0D7D 5F MOV E, A 0DC3 F1 INRDCR POP PSW 0D7E 15 DCR D 0DC4 2AF6FF LHLD CURAD 0D7F C2780D JNZ GET0 0DC7 FE10 CPI INR 0D82 CD170F CALL GETBIT ;STOP BIT BYPASSED 0DC9 C2D00D JNZ DCR 0D85 C9 RET 0DCC 23 INX H 0D86 1D BT1 DCR E 0DCD C3C701 JMP SUB 20 0D87 C2860D JNZ BT1 0DD0 FE12 DCR CPI DCR
  • 91.
    D-97 D-98 0DD2 C2CF01 JNZ SUB15 0E2B 3E82 CLD0 MVI A, 82 0DD5 2B DCX H 0E2D 0000 OUT 03 0DD6 C3C701 JMP SUB20 0E2F 3EF0 MVI A, F0 0DD9 FE10 VALCH CPI INR 0E31 D302 OUT 02 0DDB CA6702 JZ GTH25 0E33 C30800 JMP CLDBK 0DDE FE12 CPI DCR 0E36 3E82 PR1 MVI A, 82 0DE0 CA6702 JZ GTH25 0E38 D303 OUT 03 0DE3 C3C500 JMP GTH30 0E3A 3EF0 MVI A, F0 0DE6 FE12 PRRG CPI DCR 0E3C D302 OUT 02 0DE8 C21502 JNZ ERR 0E3E C3AD0B JMP VFY0 0DEB CDAB0D CALL PRVRG 0E41 3AA9FF READ1 LDA PrLOAD 0DEE C3C500 JMP 00C5 0E44 FEFF CPI FF 0DF1 0603 3PASS MVI B, 03 0E46 CA4C0E JZ READ2 0DF3 C3F80D JMP BITSPAS 0E49 C3D60B JMP READ 0DF6 0606 0E4C 7E READ2 MOV A, M 0DF8 2AC0FF BITSPAS LHLD BITTIME 0E4D C9 RET 0DFB 2D BP DCR L 0E4E FFFF 0DFC C2FB0D JNZ BP 0E50 3E08 COMPARE MVI A, 08 0DFF 25 DCR H 0E52 30 SIM 0E00 C2FB0D JNZ BP 0E53 3EFF MVI A, FF 0E03 05 DCR B 0E55 32A9FF STA PrLOAD 0E04 C2F80D JNZ BITSPAS 0E5B 217C0E ROLLING LXI H, STRING 0E07 C9 RET ;HL:STRING 0E08 2C 6PASS INR L ADDRESS 0E09 229AFF SHLD HALFBIT 0E5E E5 DISP PUSH HL ;HL:SAVE 0E0C C3F80D JMP BITSPAS ADDRESS 0E0F 21250E SRL1 LXI H, SERIADR 0E5F AF ROLL1 XRA A ;A=0 0E12 AF XRA A ADDRESS 0E13 47 MOV B, A 0E60 47 MOV B, A ;NO DOT 0E14 CDB702 CALL OUTPT 0E61 CDB702 CALL OUTPT 0E17 21290E LXI H, ALADR 0E64 3E01 MVI A, 01 ;USE DATA 0E1A 3E01 MVI A, 01 FIELD 0E1C CDB702 CALL OUTPT 0E66 0600 MVI B, 00 ;NO DOT 0E1F 3E0C MVI A, 0C 0E68 CDB702 CALL OUTPT 0E21 30 SIM 0E6B 11FFFF LXI H, FFFF ;FULL 0E22 C2DA09 JMP SRL2 DELAY 0E25 S 05 0E6E CDF105 CALL DELAY 0E26 E 0E 0E71 7E MOV A, M ;FF IS END OF 0E27 r 14 STRING 0E28 I 13 0E72 FEFF CPI EOS ;GET BACK 0E29 A 0A START 0E2A L 11 0E74 E1 POP H ;ADDRESS INCREMENT
  • 92.
    D-99 D-100 0E75 23 INX H ;IF NOT AT EOS 0E76 C25E0E JNZ ROLL1 ;IF NOT AT EOS 0E9B 13 I 0E79 C35B0E JMP ROLLING 0E9C 16 n 0E9D 19 G THE STRING: 0E9E 15 BLANK 0E7C 15 BLANK 0E9F 17 U 0E7D 15 BLANK 0EA0 12 P 0E7E 15 BLANK 0EA1 FF EOS 0E7F 15 BLANK 0E80 15 BLANK MEMORY LOACTION USED : 0E81 0D d 0E82 1B y 2080 15 0E83 16 n 2081 15 0E84 0A A 2082 X 0E85 11 L 2083 Y 0E86 1C o 2084 CD(GENERATED) 0E87 19 G 2085 AB(GUESSED) 0E88 15 BLANK 2086 0D 0E89 18 h 2087 D0 0E8A 0E E 2088 C0 0E8B 11 L 2089 0C 0E8C 12 P 208A A0 0E8D 05 S 208B B0 0E8E 15 BLANK 208C 0E8F 1B y 208D 0E90 1C o 208E 0E91 17 U 208F CMTR 0E92 15 BLANK 2090 (RANDOM IN BETWEEN) 0E93 13 I 0E94 16 n 0EA2 CD730D PAPEIN CALL GETBYTE ;MEMORY 0E95 15 BLANK BLOCK FROM 0E96 11 L HL 0E97 0E E 0EA5 73 MOV M, E ;COUNT IN BC 0E98 0A A 0EA6 23 INX HL 0E99 14 r 0EA7 0B DCX BC 0E9A 16 n 0EA8 78 MOV A, B
  • 93.
    D-101 D-102 0EA9 B1 ORA C 0F06 CD6203 CALL MODIAD1 ;DISPLAY 0EAA C3490F JMP TAPEIN START 0EAD FF ADDRESS ON 0EAE 21550D LXI HL, (FnADR) ;GET Fn 0F09 76 HALT ;ADDRESS 0EB1 CD190B CALL PrLOAD FIELD FOR 0EB4 0E05 MVI C, 05 YOUR REF. 0EB6 CD6B0C CALL MESG ;L DISPLAY 0F0A 0603 1.5 SEC MVI B, 03 0EB9 21E803 LXI HL, 1000D 0F0C 11FFFF LOOP0 LXI D, FFFF 0EBC CD410F CALL PERIOD ;NC:1KHz 0F0F CDF105 CALL DELAY ;5 X 3 = 1.5 0EBF DAB90E JC LOAD0 ;LOOP UNTIL SYNC SEC. DELAY 1KHz DOT 0F12 05 DCR B 0EC2 2B DCX HL 0F13 C20C0F JNZ LOOP0 0EC3 7C MOV A, H ;LEADING SYNC 0F16 C9 RET 1000? 0F17 C5 GETBIT PUSH B 0EC4 B5 ORA L 0F18 D5 PUSH D 0EC5 C2BC0E JNZ LOAD1 0F19 E5 PUSH H 0EC8 CD510E CALL PERIOD 0F1A AF XRA A 0ECB D2C80E JNC LOAD2 0FAB 32FFFF STA CARRY TEMP. 0ECE 21BAFF LXI HL, BUFFST 0F1E 210000 LXI H, 0000 0ED1 010600 LXI B, 0006 0F21 CD510F GB0 CALL PERIOD 0ED4 CDA20E CALL TAPEIN ;GET Fn SE SS & CHK 0F24 14 INR D ;NON 0ED7 DAB90E JC LOAD0 DESTRUCTIV 0EDA 3ABAFF LDA (TAPEF n) E TESTING 0EDD F5 PUSH PSW 0F25 15 DCR D 0EDE CD6E03 CALL MODIDT1 ;Fn IS DATA FIELD 0F26 C2400F JNZ TOOMUCH ;D 0 LONG 0EE1 CD0A0F CALL 1.5 SEC ;PASS OUT 2KHz PERIOD SYNC. 0F29 DA330F JC 2KP 0EE4 F1 POP PSW 0F2C 2D DCR L ;FOR 1KHz 0EE5 47 MOV B, A DECREMENT 0EE6 DA1502 LDA Fn BY 2 0EE9 B8 CMP A, B 0F2D 2D DCR L 0EED CDF50C CALL GETPARA ;FILE NOT FOUND 0F2E 26FF MVI H, FF ;1KHz END OF 0EF0 DA1502 JC ERROR THIS BIT 0EF3 CDA20E CALL TAPEIN 0F30 C3210F JMP GB0 0EF6 DA1502 JC ERROR ;ILLEGAL 0F33 2C INR L PARAMETER 0F34 7C MOV A, H 0EF9 CD040D CALL CHKSUM1 0F35 FE00 CPI 00 ;H=00 2KHz IS 0EFC 21BFFF LXI H, CHSAVE FIRST 0EFF FE CMP A, M ;COMPARE DATA 0F37 CA210F JZ GB0 SUMWITHTAPE SUM 0F3A 7D MOV A, L 0F00 C21502 JNZ ERROR 0F3B 17 RAL 0F03 2ABDF LHLD SSAVE 0F3C E1 POP H 0F3D D1 POP D ;L=(=/2KHz PERIOD)-2
  • 94.
    D-103 D-104 0F3E C1 POP B ;(=/ 1KHz PERIOD) 0F68 C9 RET 1KHz = 114 0F3F C9 RET ;L+CARRY=0 0F69 5F NOB MOV C, A 8(2K),2(1K) 0F6A C3350D JMP OUTBIT 0F40 3EFF TOOMUCH MVI A, FF ;L-CARRY=1 0F6D 3E60 BYTER MVI A, 60 4(2K),4(2K) 0F6F D302 OUT 02 0F42 32FFFF STA CARRY TEMP ;ERROR 0F71 60 NOP WHILE READING 0F72 3E30 MVI A, 30 0F45 E1 POP H 0F74 D302 OUT 02 0F46 D1 POP D 0F76 11FF68 LXI D, 200ms ;PREPARE 0F47 C1 POP B FOR 200ms 0F48 C9 RET PHASE 0E49 C2A20E TAPEINO JNZ TAPEIN ;CARRY = 1 IF 0F79 CDF105 CALL DELAY ERROR 0F7C 3E60 MVI A, 60 0F4C 32FFFF LDA CARRY TEMP 0 NO ERROR 0F7E D302 OUT 02 0F4F 17 RAL 0F80 0000 NOPs 0F50 C9 RET 0F82 3EF0 MVI A, 60 0F51 110000 PERIOD LXI D, 0000 0F84 D302 OUT 02 0F54 20 RIM ;GET IN SID BIT 0F86 3E00 MVI A, 00 0F55 13 INX D 0F88 32A7FF STA PrSAVE 0F56 17 RAL ;CARRY = BIT 0F8B C3E900 JMP BC0 0F57 DA540F JC PH ;10+7 IF CARRY PASS 0F8F FF HIGH BIT 0F5A 20 RIM 0F90 TO 0FFF IS UNUSED ROM. IT IS AVAILABLE FOR THE 0F5B 13 INX D USER. 0F5C 17 RAL ;IF NO BIT 0 PASS LOW BIT 1000 TO 11FF IS USED FOR UPLOADING & DOWNLOADING 0F5D D25A0F JNC OF5A MON SOFTWARE (APPENDIX F) 0F60 7B MOV A, E 0F61 FE55 CMP A, THRSn ;IF E 1200 TO 1FFF IS UNUSED ROM & IS AVAILABLE FOR THE TRESHOLD 1 KHz USER 0F63 C9 RET ;IF E TRESHOLD 2 KHz 0F64 C1 POP B ;D 0 TOO MUCH 0F65 C2630D JNZ SOW ;LOOP COUNT 2KHz = 57
  • 95.
    D-105 APPENDIX E PRODEDURE FORUPLOADING 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.
  • 96.
    D-106 D-107 i. Press enter. 6. For Downloading (from PC to kit) Data to be transmitted to the file is displayed on the a. Type G1000. screen while transmitting . b. Press Enter. c. Specify SS on prompt “source start” and press enter. After complete data tranmission “.” Prompt appears on d. Press F9. the screen. e. Press m to transmit file. j. Press F9. f. Enter file name. k. Press L to end capture. Then on prompt “Verify (y/n) g. Press Enter. press “y” key and then enter. h. Press F9. i. After transmitting a file fully,”.” Prompt is displayed in the Uploading ends here. screen . Downloading Operating Instructions Downloading ends here. 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.