Download as pdf or txt
Download as pdf or txt
You are on page 1of 54

Microprocessor 5 Software and

Hardware Aspects of Development


Debugging and Testing The
Microcomputer 1st Edition Philippe
Darche
Visit to download the full and correct content document:
https://textbookfull.com/product/microprocessor-5-software-and-hardware-aspects-of-
development-debugging-and-testing-the-microcomputer-1st-edition-philippe-darche/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Microprocessor 1 Prolegomena Calculation and Storage


Functions Models of Computation and Computer
Architecture 1st Edition Philippe Darche

https://textbookfull.com/product/microprocessor-1-prolegomena-
calculation-and-storage-functions-models-of-computation-and-
computer-architecture-1st-edition-philippe-darche/

Software Development, Design and Coding: With Patterns,


Debugging, Unit Testing, and Refactoring, 2nd Edition
John F. Dooley

https://textbookfull.com/product/software-development-design-and-
coding-with-patterns-debugging-unit-testing-and-refactoring-2nd-
edition-john-f-dooley/

Hardware and Software Verification and Testing 12th


International Haifa Verification Conference HVC 2016
Haifa Israel November 14 17 2016 Proceedings 1st
Edition Roderick Bloem
https://textbookfull.com/product/hardware-and-software-
verification-and-testing-12th-international-haifa-verification-
conference-hvc-2016-haifa-israel-
november-14-17-2016-proceedings-1st-edition-roderick-bloem/

Hands-On Penetration Testing on Windows: Unleash Kali


Linux, PowerShell, and Windows debugging tools for
security testing and analysis 1st Edition Phil Bramwell

https://textbookfull.com/product/hands-on-penetration-testing-on-
windows-unleash-kali-linux-powershell-and-windows-debugging-
tools-for-security-testing-and-analysis-1st-edition-phil-
Heterogeneous Computing Hardware Software Perspectives
1st Edition Mohamed Zahran

https://textbookfull.com/product/heterogeneous-computing-
hardware-software-perspectives-1st-edition-mohamed-zahran/

Challenging the Modern Synthesis: Adaptation,


Development, and Inheritance 1st Edition Philippe
Huneman

https://textbookfull.com/product/challenging-the-modern-
synthesis-adaptation-development-and-inheritance-1st-edition-
philippe-huneman/

Software Supply Chain Security: Securing the End-to-end


Supply Chain for Software, Firmware, and Hardware 1st
Edition Cassie Crossley

https://textbookfull.com/product/software-supply-chain-security-
securing-the-end-to-end-supply-chain-for-software-firmware-and-
hardware-1st-edition-cassie-crossley/

Computer Organization and Design The Hardware Software


Interface RISC V Edition David A. Patterson

https://textbookfull.com/product/computer-organization-and-
design-the-hardware-software-interface-risc-v-edition-david-a-
patterson/

Computer Organization and Design RISC V Edition The


Hardware Software Interface David A. Patterson

https://textbookfull.com/product/computer-organization-and-
design-risc-v-edition-the-hardware-software-interface-david-a-
patterson/
Microprocessor 5
Series Editor
Jean-Charles Pomerol

Microprocessor 5

Software and Hardware Aspects of Development,


Debugging and Testing – The Microcomputer

Philippe Darche
First published 2020 in Great Britain and the United States by ISTE Ltd and John Wiley & Sons, Inc.

Apart from any fair dealing for the purposes of research or private study, or criticism or review, as
permitted under the Copyright, Designs and Patents Act 1988, this publication may only be reproduced,
stored or transmitted, in any form or by any means, with the prior permission in writing of the publishers,
or in the case of reprographic reproduction in accordance with the terms and licenses issued by the
CLA. Enquiries concerning reproduction outside these terms should be sent to the publishers at the
undermentioned address:

ISTE Ltd John Wiley & Sons, Inc.


27-37 St George’s Road 111 River Street
London SW19 4EU Hoboken, NJ 07030
UK USA

www.iste.co.uk www.wiley.com

© ISTE Ltd 2020


The rights of Philippe Darche to be identified as the author of this work have been asserted by him in
accordance with the Copyright, Designs and Patents Act 1988.

Library of Congress Control Number: 2020943158

British Library Cataloguing-in-Publication Data


A CIP record for this book is available from the British Library
ISBN 978-1-78630-651-7
Contents

Quotation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii

Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix

Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii

Part 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

Chapter 1. Development Chain. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3


1.1. Layers of languages, stages of development and tools . . . . . . . . . . . . . . 3
1.1.1. Levels of languages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.2. Development stages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.3. Mixed-language programming . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.4. Compatibility and software interfaces. . . . . . . . . . . . . . . . . . . . . 10
1.2. Fundamental software tools for development . . . . . . . . . . . . . . . . . . . 13
1.2.1. Assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.2. Linker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2.3. Loader/launcher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.2.4. Disassembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3. Assembly language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.1. Software development methodology . . . . . . . . . . . . . . . . . . . . . 25
1.3.2. Standardization of assembly language . . . . . . . . . . . . . . . . . . . . 25
1.3.3. Structure of a program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.4. Macro-instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.3.5. Addressing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Chapter 2. Debugging and Testing . . . . . . . . . . . . . . . . . . . . . . . . . . 33


2.1. Hardware support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
vi Microprocessor 5

2.1.1. Generic electronic boards . . . . . . . . . . . . . . . . . . . . . . . . . . . 33


2.1.2. Programmers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2. Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.2.1. Evolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.2.2. Functionality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.2.3. Hardware emulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.2.4. Software debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
2.2.5. Hardware support and debugging interfaces . . . . . . . . . . . . . . . . . 51
2.2.6. Remote debugging and virtualization . . . . . . . . . . . . . . . . . . . . . 59
2.2.7. Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.3. Testing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

Part 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

Chapter 3. Changes in the Organization of the Earliest Microcomputers . 71


3.1. Apple II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.2. IBM PCs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.2.1. The original PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.2.2. The XT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.2.3. The AT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.3. Chipset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.3.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
3.4. Motherboard architectures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.4.1. Form factors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
3.4.2. Current motherboard architecture . . . . . . . . . . . . . . . . . . . . . . . 103
3.5. Evolution of microcomputer firmware . . . . . . . . . . . . . . . . . . . . . . . 104
3.5.1. Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.5.2. Apple II . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.5.3. PC BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
3.5.4. Open firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3.6. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Conclusion of Volume 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Acronyms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Quotation

Every advantage has its disadvantages and vice versa.

Shadokian philosophy1

1 The Shadoks are the main characters from an experimental cartoon produced by the
Research Office of the Office de Radiodiffusion-Télévision Française (ORTF). The two-
minute-long episodes of this daily cult series were broadcast on ORTF’s first channel (the
only one at the time!) beginning in 1968. The birds were drawn simply and quickly using an
experimental device called an animograph.

The Shadoks are ridiculous, stupid and mean. Their intellectual capacities are completely
unusual. For example, they are known for bouncing up and down, but it is not clear why!
Their vocabulary consists of four words: GA, BU, ZO and MEU, which are also the four
digits in their number system (base 4) and the musical notes in their four-tone scale. Their
philosophy is comprised of famous mottos such as the one cited in this book.
Preface

Computer systems (hardware and software) are becoming increasingly complex,


embedded and transparent. It therefore is becoming difficult to delve into basic
concepts in order to fully understand how they work. In order to accomplish this,
one approach is to take an interest in the history of the domain. A second way is to
soak up technology by reading datasheets for electronic components and patents.
Last but not least is reading research articles. I have tried to follow all three paths
throughout the writing of this series of books, with the aim of explaining the
hardware and software operations of the microprocessor, the modern and integrated
form of the central unit.

About the book

This five-volume series deals with the general operating principles of the
microprocessor. It focuses in particular on the first two generations of this
programmable component, that is, those that handle integers in 4- and 8-bit formats.
In adopting a historical angle of study, this deliberate decision allows us to return to
its basic operation without the conceptual overload of current models. The more
advanced concepts, such as the mechanisms of virtual memories and cache memory
or the different forms of parallelism, will be detailed in a future book with the
presentation of subsequent generations, that is, 16-, 32- and 64-bit systems.

The first volume addresses the field’s introductory concepts. As in music theory,
we cannot understand the advent of the microprocessor without talking about the
history of computers and technologies, which is presented in the first chapter. The
second chapter deals with storage, the second function of the computer present in the
microprocessor. The concepts of computational models and computer architecture
will be the subject of the final chapter.
x Microprocessor 5

The second volume is devoted to aspects of communication in digital systems


from the point of view of buses. Their main characteristics are presented, as well as
their communication, access arbitration, and transaction protocols, their interfaces
and their electrical characteristics. A classification is proposed and the main buses
are described.

The third volume deals with the hardware aspects of the microprocessor. It first
details the component’s external interface and then its internal organization. It then
presents the various commercial generations and certain specific families such as the
Digital Signal Processor (DSP) and the microcontroller. The volume ends with a
presentation of the datasheet.

The fourth volume deals with the software aspects of this component. The main
characteristics of the Instruction Set Architecture (ISA) of a generic component are
detailed. We then study the two ways to alter the execution flow with both classic
and interrupt function call mechanisms.

The final volume presents the hardware and software aspects of the development
chain for a digital system as well as the architectures of the first microcomputers in
the historical perspective.

Multi-level organization

This book gradually transitions from conceptual to physical implementation.


Pedagogy was my main concern, without neglecting formal aspects. Reading can
take place on several levels. Each reader will be presented with introductory
information before being asked to understand more difficult topics. Knowledge, with
a few exceptions, has been presented linearly and as comprehensively as possible.
Concrete examples drawn from former and current technologies illustrate the
theoretical concepts.

When necessary, exercises complete the learning process by examining certain


mechanisms in more depth. Each volume ends with bibliographic references
including research articles, works and patents at the origin of the concepts and more
recent ones reflecting the state of the art. These references allow the reader to find
additional and more theoretical information. There is also a list of acronyms used
and an index covering the entire work.

This series of books on computer architecture is the fruit of over 30 years of


travels in the electronic, microelectronic and computer worlds. I hope that it will
provide you with sufficient knowledge, both practical and theoretical, to then
Preface xi

specialize in one of these fields. I wish you a pleasant stroll through these different
worlds.

IMPORTANT NOTES.─ As this book presents an introduction to the field of


microprocessors, references to components from all periods are cited, as well as
references to computers from generations before this component appeared.

Original company names have been used, although some have merged. This will
allow readers to find specification sheets and original documentation for the
mentioned integrated circuits on the Internet and to study them in relation to this
work.

The concepts presented are based on the concepts studied in selected earlier
works (Darche 2000, 2002, 2003, 2004, 2012), which I recommend reading
beforehand.

Philippe DARCHE
August 2020
Introduction

The two preceding volumes respectively addressed the hardware and software
characteristics of the microprocessor. This last volume complements them by
focusing on the software development chain and on development and testing tools.
The final chapter in this book, which is also Part 2, presents structural changes in the
first generations of microcomputers.
PART 1

The first part of this last volume is divided into two chapters. The first presents
the software development chain, and the second illustrates the hardware and
software tools used in development and testing.

Microprocessor 5: Software and Hardware Aspects of Development,


Debugging and Testing – The Microcomputer,
First Edition. Philippe Darche.
© ISTE Ltd 2020. Published by ISTE Ltd and John Wiley & Sons, Inc.
1

Development Chain

This chapter is focused on the software development chain for a microprocessor-


based system. The different steps and their associated tools, including the first, the
assembler, are examined. The debugging and testing aspects have taken on greater
importance as hardware and software have grown more complex and become
embedded in systems. These software and hardware tools are then described in
detail. At first conceived to be used at the printed circuit level, they must be
integrated progressively. To conclude, assembly language, a first level symbolic
language, will be surveyed. The reader who is interested in a specific processor
should refer to documentation from the relevant manufacturer. In addition, we will
not here make a distinction between microprocessor and microcontroller because, in
the latter case, we will only examine the “computation” component, that is, the
processor, without addressing the other two subsystems, which are Input/Output
(I/O) and RAM/ROM (Random Access/Read-Only Memory), including
programmable memory, as relates to the latter type.

NOTE.– An understanding of the concepts of data representation and arithmetic


operations in a computer is assumed. Otherwise, cf. Darche (2000). This will also be
the case for logical operators. On this subject, cf. Darche (2002).

1.1. Layers of languages, stages of development and tools

The processor uses two-state logic. Instruction codes and data are therefore
expressed in binary. This is machine language. Manipulating such data is not
humanly possible for a program longer than about a hundred lines. The first
computers were programmed in this language, and the program (i.e. machine code
and data) was entered in binary format using switches as input peripherals. Because
of the difficulty of use, an additional layer of language closer to natural language
(English) was therefore necessary. This language is called “Assembly Language,”
Microprocessor 5: Software and Hardware Aspects of Development,
Debugging and Testing – The Microcomputer,
First Edition. Philippe Darche.
© ISTE Ltd 2020. Published by ISTE Ltd and John Wiley & Sons, Inc.
4 Microprocessor 5

which is abbreviated in this work as AL. The term assembly emerged from the
EDSAC project (Electronic Delay Storage Automatic Calculator, Wilkes 1950,
1951) defining the action of reading subprograms from a symbolic instruction tape
(a letter), translating them into binary, and making them executable by the main
program (modern functions of a link editor and loading program combined). This
mechanism is attributed to David J. Wheeler (Wheeler 1950). Excluding machine-
oriented language, assembly language is therefore the processor’s base programming
language. It is referred to as symbolic. This indicates that it manipulates symbolic
information, instruction words, variables and labels primarily. A specific assembly
language corresponds to a single Instruction Set Architecture (ISA, cf. § V1-3.5).
Assembly instructions are referred to using a form of abbreviated writing called
operation code (or opcode) mnemonic (cf. § V4-2.1). An opcode mnemonic is a
symbolic representation of a machine code. The assembler is the computing tool that
translates between the symbolic name and the binary value. The first assembler was
written by Nathaniel Rochester for the IBM 701 (1954). Recall that instructions in
machine language, also called machine code or sometimes hard code (Bell 1973),
are a series of binary instructions that are read and executed by the microprocessor.
Figure 1.1 shows an example of assembly with two lines of instructions for the 8086
microprocessor. The assembler translated the mnemonics into machine code, here
expressed in base 16 for readability. This tool is specialized for a processor or a
family of processors. There is no efficiency loss between assembly languages and
binary because the translation is direct. This is not the case for High-Level
(programming) Language (HLL) compilers, where one high-level instruction
(i.e. statement) corresponds to a sequence of several instructions in assembly
language.

Figure 1.1. Example of lines from a program


written in 80x86 assembly language

1.1.1. Levels of languages

Programming languages evolve in the direction of the increasing ease of


programming by making it possible to manipulate higher-level abstractions, for
example at the level of data structures or operators. Assembly language is
downstream from high-level language, as shown in Figure 1.2. A language referred
to as high level is as close as possible to human language. This is why machine and
Development Chain 5

assembly languages are called Low-Level (programming) Languages1 (LLL). To


move from one level to a lower level, it is necessary to use a translator that will
substitute a source-language instruction with a series of instructions belonging to the
lower-level (target) language. Each instruction in machine language that is executed
will give rise to a series of commands inside the microprocessor, or micro-
operations. In a micro-programmed architecture, these commands are naturally
called micro-instructions (this will be covered in a future book by the author on
microprocessors). This microprogramming language belongs to the language level
reserved for processor designers (not represented).

Figure 1.2. Levels of languages in computing

It should be noted that there are microcontrollers with on-board high-level


language interpreters (cf. § V3-5.3).

1 High-level languages like C (Kernighan 1983) are sometimes classified by some authors
(cf. Doyle (1985), for example) in the “low-level” category because they offer instructions
close to the microprocessor such as sequential and combinatorial logic operators, and because
they make it possible to manipulate variable addresses (concept of the pointer). This argument
will not be adopted in this work because these languages provide high-level control structures
and the idea of data typing, which is not the case for AL.
6 Microprocessor 5

1.1.2. Development stages

Figure 1.3 presents the development chain for a computing application written in
a compilable high-level language. It is also called the compilation chain or, more
generally, the toolchain. A source program (or code) is written in a high-level
language, for example in C (file extension .c) using a text editor. It is first
precompiled (file extension .i for our example in the Microsoft environment or
direct display on the standard output peripheral for UNIX). The precompiler is a
preprocessor that will transform the source before delivering it to the compiler. It
primarily provides functions for macro-expansion, macro(-definition) and file
inclusion (cf. § 1.3.4). It also uses control structures to enable conditional
compilation. Macro-operations are customizable thanks to its formal parameters, as
are the functions, and they can be interlocked. The preprocessor is therefore no more
or less than a manipulator of character strings with functions for search, deletion,
insertion and substitution of character strings, just like a simple text editor. An
additional function is the deletion of comments, which are useless to the machine.
The transformed source is then compiled to obtain a file in assembly language
(generated file extension .s or .asm, respectively under UNIX and Windows), which
is then assembled. In simple cases, the obtained file is a file (example of an output
file extension .hex), a binary memory image ready to be loaded into RAM or ROM
(FW for FirmWare). The case of separate compilation (modular programming), or
where the execution environment for the software is taken into account as, for
example, with an Operating System (OS), generates a binary object file (output file
extension .o or .obj depending on the OS), also referred to as an object module. An
object program is therefore the final result from an assembler. In this latter case, it
lacks code. This code corresponds to missing object modules. Once this code is
available, the last step is called static linking. It is carried out by a linker or a link
editor. This tool is generally automatically called by the compiler. It makes it
possible to bring together all of the code forming the application based on a format
that depends on the operating system. This missing code is presented in the form of
independent object modules or compiled functions belonging to static libraries (file
extension .a and .lib depending on the OS). This linker resolves address
correspondence problems. The executable file is called a.out by default in UNIX;
under Windows, it has a .exe extension or, formerly, a .com extension. This file can
then be executed by the microprocessor (MPU for MicroProcessor Unit). To do so,
it is loaded by the OS and then given execution control. The loader allocates
memory, initializes the environment and can resolve address correspondence
problems if necessary. It is also responsible for launching the program. To conclude,
note that there are link editors/loaders.
Development Chain 7

Figure 1.3. Development chain for a program written in a


compilable high-level language (here, C)
8 Microprocessor 5

There are two main language families that determine how a program is executed:
interpreted and compiled languages. In the first case, the interpreter analyzes an
instruction from the source program each time it is to be executed to determine how
to do so, and this is done at the time of execution (Figure 1.4). In the second case,
compilation and assembly translate a source program (written in a high-level
programming language) into an object module. This takes place during compilation
and assembly. Following link editing, the execution of an object program takes place
during execution. Between the two categories, there are hybrid languages that are
compiled and then interpreted (semi-compiled language) like Java. For the latter, the
source is compiled to obtain instruction byte code in an intermediate language.
These instructions are then interpreted by the virtual machine or, for faster
execution, compiled on the fly. Another approach is the Forth language, which is
both interpreted and compiled.

Figure 1.4. Relationship between the type and levels of languages

1.1.3. Mixed-language programming

Mixed-language programming consists of developing an application by using


multiple languages. Programming is thus modular. A classic case is the combination
of C, C++ and AL. The linker is responsible for creating the executable. It
resolves reference problems (i.e. addresses) between different modules (Figure 1.5)
by linking the symbolic words to the implementation addresses. This type of
programming is complex and tends to generate errors. Each source is
compiled with the specific language’s compiler. At this stage, the tools become
shared. Link editing brings together the various object modules to generate the
application.
Figure 1.5. Software development chain in a mixed-language environment and with separated compilation
Development Chain
9
10 Microprocessor 5

1.1.4. Compatibility and software interfaces

The concept of software compatibility is presented in § V4-3.3.2. It is relevant at


three levels of the software development chain: source,2 object and machine code
(Figure 1.3).

Compatibility at the source code level today refers to high-level languages


because it is better for obvious reasons than assembly language. These languages
offer high-level software functionality (data type structures, control structures,
paradigms, etc.).

Compatibility at the object code level makes it possible to distribute the program
without supplying the source code. It is then necessary to carry out link editing (cf.
§ 1.2.2) with system libraries on the host computer, an example being libc in the C
language. The specification takes over from the source code with, in addition, the
definition of an object file format such as COFF or ELF (respectively Common
Object File Format and Executable and Linkable Format, cf. § 1.2.2 for more
details).

Compatibility at the machine code level or binary compatibility allows an


application to be directly executed (ready-to-run). It requires the definition of
symbolic data types (compatible with the high-level language declarations such as
the long and int types in C, for example) and the specification of the alignment of
structures and data. The other definitions are sections (code, data, stack and heap),
their maximum sizes and the memory map (location), and the linker, which
generates absolute addresses before knowing them. An example specification is
BCS (Binary Compatibility Standard, Anderson et al. 1989) for Motorola’s M88000
RISC (Reduced Instruction Set Computer) processor (this will be covered in a future
book by the author on microprocessors). It is not necessary to compile or edit links
for the application before execution (ready-to-run application). It thus provides
independence from the programming language used.

These types of compatibility require standard interfaces. An interface is a bridge


between two software layers or between a software and a hardware3 layer. It
provides an abstraction of the lower layer. It was necessary to develop a standard
binary interface at the OS level (called the system interface), which is done
symbolically, either at the programming language level with an API (Application

2 Or programs.
3 The hardware layers and their interfaces will be covered in a future book by the author.
Development Chain 11

Programming Interface) or at the binary level with an ABI (Application Binary


Interface), as illustrated in Figure 1.6. A Hardware Abstraction Layer (HAL) makes
it possible to detach the OS from the hardware implementation. ISA was described
in § V1-3.5.

Figure 1.6. API and ABI interfaces and Hardware Abstraction Layer. For a color
version of this figure, see www.iste.co.uk/darche/microprocessor5.zip

An API or application programming interface enables compatibility at the source


level language in almost all cases for a high-level language (the C language, for
example). It enables portability of applications at the source level (cf. § V4-3.2.3). It
offers a set of services while masking the implementation details. The API is an
abstraction for service calls. The invocation of these services is done in the form of
standard or non-standard library functions. In the simplest case, the function is a
simple wrapper that adapts/translates the high-level conventions into those of the
lower-level. In the most complex cases, there are several system calls and the called
function is processed. An example is SVID (System V Interface Definition) which
defines the C language programming interface with UNIX System V (Novell 1995a,
1995b, 1995c). Another example is the IEEE 1003.1™-2013 – POSIX standard
(IEEE 2013). This specification defines a set of executable functions, a standard
library (library API) and a system API. A change in the API requires the application
to be recompiled. The API belongs to the Abstract Machine Interface (AMI) located
between applications and the OS. The latter also specifies the allowed instructions
and the memory access model.
12 Microprocessor 5

The ABI is a set of specifications to which the executable must conform so that it
can be executed in a given execution environment. It defines a standard binary
interface to be able to execute the compiled application. It is located between the
applicable program and the OS, a library, or a set of I/O routines such as the BIOS
(Basic Input/Output System, cf. § 4.2.2 in Darche (2003) and § 3.5.3). It enables
portability of applications at the binary level. We can consider the ABI as equivalent
to the API at the object code level. An example is System V (SCO 1996a, 1996b,
1997). We should also mention iBCS (Intel Binary Compatibility Standard), which
allows the same binary code to function on x86 platforms under different Unix
systems. It is generally made up of two parts, one that is common for all
architectures and one that is specific to a particular architecture. It specifies a set of
functions that the OS provides to the program user as well as how they should be
called. The ABI instructions belong to the user set, not the system. The transfer of
control to the OS is done through the intermediary of software interruption, which
can be compared to a function call with (potential) passing of parameters under
constraint. The potential parameters are generally passed by registers, or less
commonly on the stack. The ABI therefore includes low-level information specific
to the target architecture. This is the machine interface, the function call sequence
and the interface with the OS. The machine interface describes the underlying
architecture (i.e. ISA) and the data representation. The data representation
specification provides its types with the format, order of storage (endianness; Cohen
1981, cf. § 2.6.2 in Darche (2012)) and associated alignments. The detail of the call
sequence includes the register usage conventions, the stack frame layout convention
and the passing of parameters (number, passing mode and type). The interface with
the OS describes the exception interface, signal management, virtual addressing,
process initialization (stack, registers, etc.) and debugging support. The executable
and object file format are also specified (header, sections, etc.) as well as a library
format. The ABI secondarily specifies the alphanumeric code used, for example, for
character-based data control (\n, for example), or for the package data file. It
provides information about loading the program and about potential dynamic
linking. The ABI must support the API’s libraries. Tools such as the compiler, the
assembler and the linker, that is, the development chain, make reference to the ABI.
An EABI (Embedded ABI) refers to the ABI version used in embedded systems. Its
specific characteristics are the absence of a linker and modified memory
management.

The interface between the OS and the hardware, the latter of which is optional, is
called the Hardware Abstraction Layer. It is a software layer in the OS that abstracts
the underlying hardware and is accessible via an API. An example is Windows.
Drivers and hardware-specific software such as hot-swap management belong to this
layer. It enables the addition of new hardware without having to change the OS’s
programs. Real-Time Operating Systems (RTOS) may not use a kernel (kernel-less
approach), but instead a library linked to the application (library-based RTOS).
Development Chain 13

Using a standard API or ABI enables software compatibility (cf. § V4-3.3.2). The
former enables application portability at the source-language level, and the latter
does so at the binary level.

It should be noted that the idea of the machine is relative. As specified by Smith
and Nair (2000), it depends on the point of view under consideration. As part of an
operating system, the machine is the hardware support enabling execution, and the
software interface is the ISA. As part of a process executing a program for a user,
the machine is the OS, which supplies storage and memory as well as services such
as I/O, and hardware support for execution is the ABI.

1.2. Fundamental software tools for development

The three primary tools required to develop an application are the assembler, the
linker and the loader/launcher; there is also a tool called a disassembler. “Tuning
and testing” will be addressed in the following chapter.

1.2.1. Assembler

The first assemblers were assembler-launchers (assemble-go system). They were


responsible for loading subprograms written in assembly language into memory by
translating binary instructions on the fly (i.e. a single program read), to call
addresses4 from the main program and to launch execution. In its modern form, it is
a language translator. The first assemblers in modern form were SOAP (Symbolic
Optimizer and Assembly Program) on the IBM 650 (Poley and Mitchell 1956) and
then SAP5 (SHARE Assembly Program) on the IBM 704 (Wegner 1976). A
description of the latter can be found in Helwig (1975). Two representatives from
the PC-Wintel6 world are MASM (Microsoft Macro Assembler) and
Turbo-Assembler® (tasm) from Borland.

The assembly of a source file will give rise to the creation of an output file
named “listing” (the extension for the generated file is .lst), an object module, either
absolute or relocatable, and a list of cross references (Figure 1.7). It should be noted
that comments are deleted, which is handled by the precompiler (preprocessor) for a
high-level language.

4 The term “address” refers to the logical address, a term belonging to the concept of Virtual
Memory (VM, this will be covered in a future book by the author on storage). If there is no
logical translation, it is a Physical Address (PA).
5 The original definition from IBM was Symbolic Assembly Program.
6 A contraction of the two names Windows and Intel.
14 Microprocessor 5

Figure 1.7. Information flow for assembly

Given that this is a symbolic language, translation is more than transliteration,


hence the term assembly (Wegner 1968). Assembly can be broken down into two
parts, analysis and synthesis. The latter can be divided into phases or steps
(Figure 1.8). For a given language, syntax and semantics must be defined. Syntax
concerns the formal aspects of a language. It manages the organization of
instructions and data. Semantics concerns the meaning of instructions. Assembly
will therefore begin with a lexical or lexicographic analysis. Its function is to pick
out, from the data flow, a series of symbols called lexical or syntactical units,
lexemes or tokens, from whence its other name, the scanner or tokenizer, or linear
analysis, because the source is read from left to right, line by line. The typographic
space is the base separator. There exist predefined lexical units in the language such
as reserved words, operators, register names and separators (e.g. :, {, }, ;, etc.), as
well as others defined by the user, identifiers7 and numerical and alphanumeric
literals (i.e. character strings). A second stage consists of determining to which
family of units these lexemes belong. This is the sort phase carried out by the
analysis. A data structure called a “symbol table” was initialized during these first
two phases. This table will contain all of the elements to which the analyzer will add
information such as their name, username, unit type such as identifier, constant (also
called literal), language keyword or comment. These will also be initialized if
applicable. An identifier is the name of a variable, constant, subprogram or label. It
will then be elaborated during the following steps. From the point of view of
implementation, these two functionally distinct steps are united (Wilhelm and
Maurer 1994). This is followed by syntactic analysis, also called hierarchical
analysis. It is carried out by the analyzer with the same descriptor (parser). It
consists of verifying whether the source is respecting the grammar of the language.
A grammar defines the rules for constructing sentences in the language, that is, lines
of code containing declarations and instructions. One of the formal systems for

7 An identifier or username is a noun (cf. a character string) designating, among other things,
a variable, a constant, a subprogram or a label.
Development Chain 15

describing a grammar is the Backus–Naur Form (BNF, Backus et al. 1960, 1963;
Knuth 1964; ISO 1996). During this step, syntax errors are addressed. Semantic
analysis is the penultimate step. It verifies, among other things, whether the variable
format is coherent between registers and/or variables. Code generation is the final
step. Code generation will involve symbolic evaluation. It associates an operation
code or opcode with each instruction and, to each identifier, an address, when this
correspondence is possible. If not, the linker stops associating to generate the final
executable. The mode of assembly can be absolute or relative. This refers to the
addressing mode (cf. § V4-1.2) used to reference the identifiers. Relative addressing
enables address translation (relocation, cf. § V4-3.1.4), which makes it possible to
install the code and the variables anywhere in memory without having to recalculate
the addresses.

Figure 1.8. Functional phases of assembly

The structure of the symbol table will change depending on the step in the
development chain. During assembly (assembly time), this data structure will
contain, in its most complete form, the lexical units and, in less complete forms,
16 Microprocessor 5

only identifiers with their attributes. When included in an object module, it makes it
possible to resolve references during linking time by connecting the identifier and
the reference. During execution, this table, which can be optionally included,
enables the debugger to know the names of the identifiers. Figure 1.9 shows an
example of this kind of table, extracted from the listing file in Figure 1.10.

Figure 1.9. Example of a symbol table extracted


from the listing file in Figure 1.10
Development Chain 17

As with high-level languages, assembly can be conditional (CA for Conditional


Assembly), which makes it possible to assemble only some parts of the program. An
example use case is the potential to choose whether to include instructions from an
application update. As with a compiler, the assembler, to carry out the translation,
generally performs two passes through the source code. A mono-pass assembler
directly translates symbolic references. But there are cases when this translation
cannot be done, particularly when there is a forward reference for a variable or a
label. There are therefore “two-pass,” or even multi-pass assemblers. Assembly time
is a function of the number of passes, of course.

The structure of the generated file, that is, the object module, can be broken
down into a general information header, code and data, the area for useful address
translation during a change of address, the global symbol table and the optional
debugging information. The object module can be called absolute if the address of
the program start was fixed and all of the identifiers’ addresses are generated from it
(this is the case in a mono-pass assembler). The memory dump therefore cannot be
moved to main memory, contrary to a relocatable module. Modern assemblers
generate this second kind of object module.

At the programmer’s request, a listing file can be generated. The data line for
this type of file (Figure 1.10) is typically divided into three areas called fields that
are, from left to right, the line number (expressed in base-10 most of the time), the
memory address (expressed in hexadecimal), the size, the variable name (optional)
and the initialization value (optional), which corresponds to the assembly of the
fourth zone, the source, as described in § 1.3.

The instruction line is typically divided into three areas called fields that are,
from left to right, the line number (expressed in base-10 most of the time), the
memory address (expressed in hexadecimal8), the machine code, then the source. A
cross reference table can be constructed from the symbol table during assembly. For
each symbol, whether internal to the program or external (i.e. public), there will be
an entry in this table with its name, its value and the list of instructions it references,
or even the number of the corresponding line. This can be seen in this file. This list
facilitates debugging, among other things, and it can be used by a compiler.

8 This foundation enables a more compact representation of values compared to NBC


(Natural Binary Code).
18 Microprocessor 5

Figure 1.10. Example of a listing file generated


by tasm (symbol table in Figure 1.9)

There are different types of assemblers. A macro-assembler is an evolution from


traditional assemblers that enables the creation of macro-instructions (cf. § 1.3.4),
which, once substituted, add to the code. This makes it possible to simplifying how a
program is written. A cross-assembler generates code for a different processor than
the one executing the assembler, as opposed to a naive or resident assembler, also
called a self-assembler. This is required when the target on which the application
Development Chain 19

will be executed is not sufficiently powerful (i.e. MPU power and memory and
storage capacities) to run the development tools. It is often used to develop
embedded applications. A multiprocessor assembler is capable of generating code
for microprocessors in a different family. There is also something called a
meta-assembler, a scientific curiosity that makes it possible to write an assembler as
they were initially described (Ferguson 1966). A High-Level Assembler (HLA)
approaches high-level languages by enabling variable types and using control
structures and macro-instructions. One of the first was described by Wirth (1968)
with his PL360 language for the IBM System/360. A modern version of this type of
language is HLA, proposed by Hyde (2010). Some high-level language compilers,
such as the one for C, make it possible to insert lines of assembly language. This is
referred to as an inline assembler. This is useful for directly accessing the MPU’s
instruction set or for calls to the OS. The downside is the loss of portability since
this language is specific to an architecture or a specific MPU. Finally, we can
mention the patch assembler, which is used in debuggers to modify application code
in real-time to correct an error and test it immediately.

1.2.2. Linker

During the last step before obtaining the program executable, the linker (linkage
editor) or link editor provides address translation functions (relocation,
cf. § V4-3.1.4) and symbolic resolution. It selects the implementation address for the
code and the variables as a function of the memory model, for example. It defines a
size as an assembler and a start address (TOS for Top Of Stack) for the stack. If all
of the modules are presented, it resolves the address correspondence if necessary.
Generally, from the object modules and static and dynamic libraries (or DLL, for
Dynamic Link Library), that is, shared between several applications, and following
the arguments entered on the command line, it generates a module, either an
executable or a relocatable, as illustrated in Figure 1.11. The executable file has an
extension of .com, .exe (Windows environment), or an execution permission9
(x for UNIX), or is a file for programming an EPROM (file extension .hex, for
example). The second case, in which a new relocatable object module is generated,
is due to the fact that the linker does not continue to the end, that is, that there
remain unresolved references because, for example, of a missing library. Symbolic
information generated optionally during assembly can be supplied as well for
debugging at the executable source level (traditional file extension .map). This
information can be related to sections (number, type, start address and size) and

9 It is no longer a question of having run permissions because a program can be executed or


interpreted.
Another random document with
no related content on Scribd:
CHAPTER IV.
NEXT day Chee plucked up courage and said, “Aunt Mean, please
may I pick a bunch of white peonies and carry’em down to Mrs.
Green?” Aunt Mean was straightening the rag-carpet rugs on the
kitchen floor. “Take hold the end of this mat, Chee. Well, I don’t
know, seems like you wanted to be on the go the hull time. Only last
week you rode over to the ‘Corners’ with your uncle, and ’tain’t a
month since you was took to a reg’ler concert—in the town hall, too.
But I don’t know but you might as well go, an’ stop on the way an’
ask Mis’ Snow for that apern pat’en she said she’d just’s liev I took.”
“Yes’um,” and Chee bounded away to gather her flowers.
“Beats all, that child does, still’s a mouse inside, wild’s a deer the
minute she’s out.” This had been spoken to a neighbor who had “jest
dropped in a minute.”
“Well, I s’pose it’s her Injun blood, isn’t it?” was the reply. “What a
worry she must be to you, Miss Almeana. She’s well brung up,
though, if she is half savage, I will say that.”
“Poor Joe’s runnin’ off an’ marryin’ was a dretful thing,” stated Aunt
Mean, “dretful for him, and dretful for us.”
“No doubt she was purty, and I s’pose findin’ she’d lived so long with
a white family made some difference,” the neighbor remarked. There
was a shadow of romance about her nature; there was not even that
about Aunt Mean’s.
“It was better’n though he’d found her naked in a wigwam, but ’twas
bad ’nough,” dryly returned poor Joe’s sister.
“Prob’ly the greatest attraction was her voice. It must have been
purty hard on so good Meth’dist people as you an’ Reuben be, to
have one of your own kin go roun’ fiddlin’ fer shows with an Injun
singin’ woman fer his wife.”
Miss Almeana did not consider it proper to tell what an affliction this
had been to her, but with a clear conscience she told, for at least the
fiftieth time, how Reuben “took on.” After that came poor brother
Joe’s taking on; how, when his wife died, he left his profession to
wander about the world, clinging to his baby girl for comfort in his
loneliness; how, at last, he came back to the old homestead, sick—
body and heart. “He only lived a couple o’ years longer, and most o’
that time he set round with the young’n in his arms,” went on Aunt
Mean.
The neighbor had heard it all before, but she was interested.
“Reuben thinks that more’n half what killed him was heartbroke’ness.
Mebbe it was. He was allers kinder soft like, and that old fiddle of
his’n only made him wuss. I used to hate the sight on it. Think of the
waste o’ money! Sold his whole half the farm to buy it—meadow lot
and all. I tell you what, I chucked that thing out o’ sight mighty
sudden after he died.”
“Did you burn it,” asked her listener, in an awed voice, “after he had
loved it so?” Aunt Mean quailed a little.
“Laws! no, Mis’ Bowman, I ain’t quite so Spartan as that. I didn’t
have courage. But I stuck it up attic for good and all. It never’ll come
down as long as I keep house here, either.”
“Well, I must say, Miss Almeana,” interrupted her acquaintance,
anxious to appease the old lady, “you don’t work the child very hard.
What does she do, anyhow?”
“She? Oh, what I tell her to. It’s easier to do most everything yourself
than be botherin’ round with children. She’s coming on nine, though,
and I don’t want it on my conscience that I didn’t do my duty by her—
if she is a heathen—so I s’pose it’s about time I broke her in.”
Perhaps a very faint vision of what Chee’s breaking in might mean,
rose before the neighbor’s mental sight, for she said, in relenting
tones, “Oh, well, I don’t see’s you’ve any cause to hurry. She’s right
smart and will learn mighty fast when she once starts in.”
“Humph!” said Aunt Mean, and Mrs. Bowman never quite made up
her mind whether she had helped Chee’s cause or not.
While the housewives gossipped, the little girl was wending her way
to the clergyman’s house. She did not walk very fast. It was warm
and dusty, and she was busily thinking. After all, she was somewhat
loath to reach her destination. At last she came to the small, white
parsonage. Her heart seemed to pound as loudly as her hand as she
knocked upon the door. The minister’s wife herself answered the
knock.
“Aunt Mean sent you these.”
“Why, thank you, Chee, thank you. And such a hot day, too. Would
you like a drink of water?” Instead of water, the lady brought a glass
of milk from the cellar. Chee sipped it slowly. It was delicious after
the long, hot walk, but she felt anxious over her errand.
“I hope he won’t think I’ve workings of a spirit like Deacon Herring
had,” she thought, a little fearfully.
After Mrs. Green had asked for her uncle and aunt, if they had green
corn yet, and if Miss Almeana’s currant-bushes would be heavy that
year, conversation flagged. Chee still sat on the edge of her chair as
though waiting for something to happen.
“What can ail the child?” wondered Mrs. Green. Finally she ventured
to ask Chee if she had come on any special errand.
“No-o, not ’zactly an errand, but—but,” she hesitated, slowly twisting
around her fingers the hem of her short gingham skirt. “Could—
please do you care if I see the minister a minute?”
Her hostess laughed. “Care? Why, no, child. I don’t keep him put
away in the dark.”
Chee’s black eyes looked frightened. “Oh, Mrs. Green!” she said, “I
didn’t mean it that way.” Dropping her voice to a whisper, she
entreated, “Don’t say anything to Aunt Mean. Please don’t tell.”
The lady’s kind heart was touched. She loved little children. Quickly
stooping to kiss Chee’s flushed forehead, she answered, “Tell that
you asked to see the minister? No, indeed.”
“Thank you.” Chee had forgotten for a moment her usual reserve,
and stealing her arms around Mrs. Green’s neck, she softly kissed
her. This was the first voluntary act of affection the child had shown
toward any one since her father’s death.
Though the minister’s wife only remarked in a gentle voice, “I think
my husband is up in the hay-mow—there is a nice breeze by the
door,” she was ever after, to Chee, the ideal of a mother hardly
remembered.
While leading her to the barn, the lady asked, “Do you mind going up
by yourself?”
“Oh, no, no,” answered the little girl. It would be easier to confront
the minister alone.
Chee found him lying on the hay with a book over his eyes. She
furtively peeped at him several times from the top of the ladder.
Finally she concluded he was not asleep.
“Mr. Green,” she called. Her voice was not high and clear like most
children’s; it was strangely deep and rich. “Mr. Green,” she repeated.
He looked over his book, exclaiming, “Why, child, how you startled
me!” Then in a gentler voice he added, “What brought you here,
Little One?”
The pet name helped to ease her fluttering heart. She stepped
nearer and quietly studied his face a minute.
“Can you keep a secret?” she asked, still watching him closely.
He was amused with his little visitor and replied, “For how long?”
“Forever,” came the instant, firm reply.
Something in the child’s earnest face at once sobered the minister.
“That depends, Miss Chee,” he answered.
Chee seated herself beside him on the hay. She had forgotten to be
afraid.
“Mr. Green,”—the bead-like eyes enlarged, and seemed to soften as
she spoke,—“you are a minister, and if you once promise you can’t
break your word—ever, can you?”
“Not and be a true minister, I suppose.”
“Then won’t you promise?”
“I guess so.”
“This is a ’portant matter. ‘Guess so’ won’t do. Say ‘yes,’ please.”
“Well, yes, then, little lawyer.” Though just what he was promising
was not clear to him, it brought a thoughtful, satisfied expression to
Chee’s face as, looking down, she sat absently crumpling hay.

“‘THIS IS A ’PORTANT MATTER. “GUESS SO” WON’T DO. SAY


“YES,” PLEASE’”
“And what about the secret?” asked the clergyman, after some
moments of silence.
She looked up quickly. She had been busy pondering how far she
should explain matters, and had half forgotten his presence.
“Why, you know, you said old ones were lots better than new ones,
but I am afraid you were mistaken, for Daddy Joe’s is very, very
bad.”
“What are you talking about, child?”
“Why, you said it your very own self, you did.” Here was a new
difficulty. “A minister can’t back out of what he said. And you said it,
sir. Don’t you remember that Sunday you preached that old ones
were better than the new ones? Please think hard.”
“Old what?”
“Why, old fiddles. You said so.”
“Oh, well, suppose I did. It’s a well-known fact, little girl.”
“I did understand right, after all, then? But what can be the matter
with Daddy Joe’s?”
Mr. Green looked more perplexed. “I don’t yet quite understand you,
Chee. Suppose you begin at the beginning, and tell me all about it.”
So Chee commenced, growing more and more interested in her own
story as she went on, for were not the minister’s eyes smiling into
hers as if to say, “You came to the very right person, little Chee—the
very right person.”
“Then I promised Our Father faithfully,” she continued, telling of the
night before when she had resolved to consult the minister, “that if
He’d do that for me I’d do something for Him. And I will, honest, for
He did hear me,” she concluded by saying, in a hushed, reverent
voice.
Her listener happened to be searching about for his handkerchief
just then. The disturbance in the hay caused the dust to fly. This
brought moisture to his eyes. Chee gravely offered her small square
of linen.
When she had finished telling all about her Daddy Joe’s fiddle, he
said, gaily, “I am not much of a musician, but long ago when I was in
college I owned a violin. It must be in the house somewhere, now. I’ll
hunt it up, and tell you what little I know about it.”
Chee’s eyes shone more brightly. Catching hold of her new friend’s
sleeve,—he had risen to go down the ladder,—she said, her voice
deep with emotion, “I wish I could thank you more than tongue can
tell.” It was not a very elaborate thank you, but the glow in her eyes
made up any loss of words.
“I never before saw a child so thoroughly in earnest,” he mused.
“She must possess an exceedingly passionate nature, or else be
extraordinarily fond of music.”
“Oh, dear! Aunt Mean’ll miss me. It’s getting so late, and she won’t
let me come again in a long, long time.” But even as she spoke in a
troubled way, a smile broke over her face. “He fixed it before,” she
said, reverently, “I’ll ask Him again.”
The minister understood, and many a day, when his burdens were
heavy, he recalled the faith of a little half-Indian child.
CHAPTER V.
IT was Sunday. The morning sermon was ended, and the choir-
leader had played the “walkout,” as Chee termed the postlude.
The choir-leader was a very interesting person. He not only led the
singing and played the organ at church, but could whistle. And such
whistling! Not the every-day wood-pile sort, but the kind that made
every boy in town his friend.
He was tall, had a sallow, haggard face and hollow eyes. His spare
locks almost touched his shoulders, and appeared to be faded. One
knew at a second glance, however, they had never been brighter.
This eccentric-looking gentleman had hardly slipped from off the long
bench before the organ, ere the minister had found Aunt Mean and
was saying, “Will you kindly do Mrs. Green and myself a favor?”
“You know very well, Elder, any living thing on our farm is at your
disposal. If I’ve said it once, I have said it a hundred times!”
“Well, it is something from your farm, to be sure. We want your little
niece for a day—say Wednesday, if it is pleasant.”
“Chee?” she exclaimed, with surprise. “For mercy’s sake, what do
you want o’ her?”
“You know how fond of children we are—both of us. We want her to
enjoy her. Surely, you can spare the child for a single day.”
“It ain’t the sparin’ on her.” But catching sight of Chee’s pleading
eyes, she added, “I don’t want no niece o’ mine botherin’ round and
makin’ Mrs. Green a heap o’ work.”
“No, indeed, Chee would be a real help. You know, Miss Whittaker, a
home without a child is often a lonely place.”
“Some folks ain’t had much chance to find out, lately,” and Aunt
Mean went off with her favorite “Humph.”
For awhile after that eventful visit, matters went more smoothly for
Chee.
She was taught how to tighten the strings of her violin until they
formed chords, and how to play scales upon them. Her eyes opened
wide with astonishment.
“To think the dear old fiddle hasn’t been to blame, after all!” she
joyfully cried. “Just me!”
It was a great revelation to her to find the strings had always to be
brought up to a certain pitch. “Why, no wonder Daddy Joe’s couldn’t
play if they have to be pulled up every time,” she exclaimed, then
added, plaintively, “It’s years and years since Daddy’s pulled up his.”
“Of course it’s no wonder,” laughed her teacher, fingering the
companion of his boyhood days. “Even the strings on this are yellow
from lying in a paper so long. What must your father’s be like? It’s a
great marvel that they have not snapped before this. No, no, little
one, don’t condemn the instrument, but keep right on trying to
understand it.”
Chee, with a light heart, bade the minister and his wife good-by. She
had begun to learn how to make music. And were not a whole
package of violin-strings in her pocket?
After this it became more natural for the pastor to say Sundays, “May
we have Chee to-morrow, Miss Whittaker?” Or, “Mrs. Green wishes
me to engage your little niece for Thursday,” and Aunt Mean seldom
refused.
Chee never quite understood why permission was so readily given.
Secretly she puzzled over it, but was far too grateful to ask
questions.
The truth of the matter is this—it flattered Aunt Mean to have the
minister intimate with her little relative. Moreover, she had an
indescribable notion that by allowing her niece to frequent the
parsonage, she might in some way counterbalance the child’s
heathendom. “It’s no use for you to tell me different, Reuben,” she
would argue. “Her mother was a heathen, or Injun” (the two were
synonymous in Aunt Mean’s mind), “and do what we can, the girl will
allers be half a savage.”
So Chee—in spite of her aunt’s arguing, decidedly a whole person—
was allowed to spend one or two days of every week with her
friends.
From chords and scales, she learned to pick out simple tunes, those
she heard at church being her chief source of selection. After awhile
she learned to play little melodies of her own composing. “Wind and
bird songs,” she called them.
The clergyman gave her all the rules for violin-playing he knew, and
his wife taught her to read music.
They were happy times for Chee,—Mrs. Green at the piano, playing
old, familiar hymns, Chee picking out the notes on the minister’s
violin.
One day she said, “Some way, Mr. Green, I can’t love your fiddle like
I do Daddy’s.” Then fearing she might hurt her good friend’s feelings,
she hastened to add, “It’s very much shinier, and of course it’s a
fiddle.” Mrs. Green used to wonder if “fiddle” wasn’t the most
beautiful word in all the world to Chee.
Three years passed without much change except Chee’s gradual
improvement and increasing delight in her music.
In Aunt Mean’s best parlor, a hymn-book lay in prim stateliness
beside the family Bible. It was a coveted treasure to Chee. But the
principle of strict honesty was a part of her very soul, in spite of her
“heathen” mother, and the Bible was never left alone to gather dust.
Much to her displeasure, she was “broke in.” But in time she took her
household duties as a matter of course, and things went on much in
the same old way.
CHAPTER VI.
ONCE Chee suffered a great scare. The whole secret of her violin
threatened to come out.
Neighbor Flannigan often stayed with his cronies at the “Corners” a
little too long for his own good. One night, being even less himself
than usual, he stumbled into the Whittaker place instead of his own.
Too stupid to reach the house, he threw himself down on the grass.
As the effect of his evening’s carousing began to wear off, he was
startled by the sound of strange music. Seemingly it came from the
Whittaker attic.
For awhile he was charmed. What could it be? More and more the
mystery of it impressed him. At last frightened by his own ignorant
conjectures, he became certain the old house was haunted, and as
fast as his shaky legs could carry him he started home on a run.
The following morning he felt it his duty to confide in Uncle Reuben.
“I was jest that tired from me day’s woruk I had to rest me legs a
spell,—you know how it is yourself, Mr. Whittaker,—when thim
unairthly sounds blowed up softly loike, roight out of the chimbly.”
“What in the world could the fellow have heard?” asked Uncle
Reuben at breakfast.
“Heard? Why, the whiskey rattling his brain,” replied Aunt Mean.
“Don’t look so frightened, Chee. It’s wicked to believe in ghosts, and
I don’t want you to get no sech notions in your head.” Perhaps Aunt
Mean was giving orders to herself as well as to her niece.
That night Chee scarcely dared play, and it was many a day before
her old confidence returned. The full, round tones she loved were
stealthily smothered. Fortunately, the house was well back from the
road. No neighboring farms were within hearing distance, so her
scare was finally forgotten. However, something else happened
which caused Chee to leave Daddy Joe’s fiddle in silence a long
time. It was Cousin Gertrude’s coming to the farm.
Chee wore her pink gingham the day she came, and even Aunt
Mean was dressed up in a white apron.
“She’s the gayest thing, with dancin’ blue eyes, and yellow hair and
pink cheeks, ’stead of brown ’uns,” with unnecessary emphasis on
the “brown.”
Tears stole down the “brown” ones at this remark by Aunt Mean, who
was tightly tying Chee’s braids with bits of shoe-strings. (It was a
grief to Chee that Aunt Mean should not allow her to braid her own
hair.)
“Our Father made my face brown,” she kept thinking. “He wanted it
so.” Yet something seemed to have dulled the brightness of the
morning.
“I ’spect she’ll call me Ugly Nut, too, like Aunt Mean used to,”
mourned Chee. She had never attended school, and though her
secluded life made her an old child in some ways, it kept her
wonderfully baby-like in others. Indeed, it is doubtful if years of
learning or contact with wise people could ever take away her
simple, questioning-like manner. It might always be “Chee’s way.”
Soon the carriage wheels were heard on the gravel drive, and sad
thoughts were quickly put away in the excitement of Cousin
Gertrude’s arrival.
Yes, she was, as Aunt Mean had said, a “gay thing.” At least, so it
seemed as she flew about the house, visiting old nooks and corners,
or out calling the chickens and feeding Fanny and the colt.
It was all very startling to Chee,—her lively movements, her merry
repartee, and her show of affection. It seemed so natural for Cousin
Gertrude to lean her fair head against Uncle Reuben’s shoulder.
Chee would have felt extremely strange in such an act, even if she
were tall enough to reach it. And as for laughing right up into Aunt
Mean’s face, as though sharp words were only a joke between them,
it would have been impossible for Chee to have tried it.
In the afternoon, when she found her pretty cousin sitting idle in the
little grove behind the house, there was a change.
The lips that had all day been parted in laughter were drooping. Her
blue eyes were watching the hill-tops as though they saw something
very sad over there. At sight of Chee they brightened a little.
“Come here, you tiny witch,” she called, making room in the
hammock. “Do you know you make me think of a poem I read once
called ‘The Nut-Brown Maiden.’”
Chee’s eyes were shyly raised. “Nut-Brown Maiden is ever so pretty,”
she said. “Aunt Mean used to call me ‘Ugly Nut,’ but my daddy was
here then and he stopped her. Now she calls me ‘Chee.’”
“How odd! I like it, though. Is it an Indian name?” It seemed to the
little girl her cousin must love Indian names, she spoke so tenderly.
How good it was not to feel in disgrace!
“My real name is Opechee. They call me Chee, for short. Aunt Mean
says ‘it doesn’t holler so loud of Indian wigwams.’”
“‘Holler of wigwams,’” echoed Gertrude. “You poor, darling child.”
“But I don’t mind so much, for I know what it means,” murmured
Chee, as she smiled up into the deep blue sky. “A song-bird—I’d
rather be that than anything else.” Then turning with something of
Cousin Gertrude’s own impulsiveness, she asked, “Oh, isn’t it
lovely? You can’t know how glad I am it’s my name.”
No, the girl could not understand Chee’s strange, almost
unreasonable pleasure, but to see the little one so happy could but
lighten her own heart.
Many a long talk had they together in that little grove, and during
their rambles over the farm. At times Chee would be tempted to
unburden her heart of its secret, but, young as she was, she knew
Cousin Gertrude had a secret, too; for often when they were talking
of the happiest things, the sparkle would die out of the big blue eyes
that Chee so lovingly watched.
“Cousin Gertrude has forgotten all about her Nut-Brown Maiden,”
she would think. “She doesn’t tell me her secret, and I won’t tell her
mine.”
And yet before autumn both secrets came out.
CHAPTER VII.
ONE night Chee was feeling very lonely for Daddy Joe’s fiddle—
more lonely than any night since Cousin Gertrude had been at the
farm. It seemed years since she had fingered its dear old strings.
She had been very much discouraged that last time. Knowing so well
the tones she longed to hear, though she had done her best, she
was dissatisfied. Even now she could feel the thrill that entered her
soul at the concert, three long years ago.
“If I could only play that way how happy I’d be. I wouldn’t care any
more about Aunt Mean, nor my face, nor feel the aching so for
Daddy Joe, nor anything.”
Chee was troubled with these mournful thoughts when she suddenly
became conscious that some one near was crying—very softly, but
surely crying.
There was an opening which had been cut through for a register
from Chee’s room to the “best room” below.
“It must be Cousin Gertrude, and something awful must be the
matter to make anybody big cry almost out loud.”
She could not endure it long, just to lie still and listen. Creeping down
the front stairs, she noiselessly entered the best bedroom, and
slipped her hand into Gertrude’s.
“Why, Childie, how came you here?” The young lady tried to speak
as though tears were not even then rolling down her cheeks.
“To comfort you,” was the simple explanation.
For a moment, big blue eyes looked yearningly into little black ones,
then dropped, and tears stole from under quivering lashes.
Chee crept closer. “Wouldn’t it help you to tell me about your
secret?” she asked, sobbingly.
Cousin Gertrude took the little girl in her arms. Sitting on the bed she
rocked her gently back and forth, as though to quiet the would-be
comforter herself.
“It was because I was angry. I know it. I am all to blame. Who had a
better right to tell me of my faults? But I had been abroad and he
hadn’t, and he made me so indignant. I’ve such an awful temper,
Birdie, you must never let yours run away with you.”
Chee was frightened at her cousin’s sudden outburst of confidence,
but, with characteristic intuitiveness, she said nothing.
“I forgot that his feelings were just as hard to manage, and I threw it
down and declared I would never touch it again as long as I lived.
And then he said he would never speak to me again until I had taken
back my words.
“Then the carriage came—oh, why didn’t it wait a little longer? I
would surely have come to my senses in another minute. But I left
him and came here. Yet Birdie, Birdie, wouldn’t I touch it now if I
could—if it wasn’t at home and he far, far away!
“Oh, why did I lose my temper? How could I? They always said we
were both too hot-headed to get on together. And now all is lost
forever, he’s gone—he won’t come back. Oh, I can never, never
forget this night.”
“‘SHALL I ASK OUR FATHER?’”
The girl ceased her wild, mournful speaking and buried her face in
her pillow. Uncontrolled sobs shook her form.
Chee was bewildered. She could not understand Gertrude’s trouble,
but her cousin’s misery had become hers. Her fingers trembled while
she stroked the bright hair, trying to think of the right thing to say.
Soon Cousin Gertrude was quiet. Chee thought her asleep, when a
long, quivering sigh escaped. It seemed almost a sob.
Chee had wanted to say something which she had hardly dared; this
last sign of grief now gave her courage.
“Cousin Gertrude,” she ventured, in a whisper, her lips close to the
other’s hot cheek.
“Yes, Birdie.”
“Would—would—shall I ask Our Father—to make it better?” The
moonlight was falling clear on Chee’s upturned face. Her eyes shone
softly, their usual glittering brightness mellowed. Her long black hair
appeared blacker than ever as it fell upon the whiteness of her night-
robe.
A feeling of awe came over the older girl. “Can this be the same
child,” she meditated, “who with expressionless features obeys Aunt
Mean’s abrupt commands? Can this be the same little girl who once
blushed to tell me her Indian name—this tiny being so strong and
trustful, who looks now as though bringing a message from the
angels, if she be not one herself? Shall I tell her God cannot help,
that I have brought my own trouble upon myself, and I only am to
blame?”
But the longer those eyes looked their message into hers, the more
unwilling she became to speak this bitterness. “She is but a child,
after all. I will not dim the brightness of a faith so beautiful.” Finally
she answered, in a low and tender voice, “Yes, Birdie, you may ask
Him.”
“Then good night, Cousin Gertrude.” A kiss—and the little comforter
was gone.
The next day Gertrude did not leave her room. She had told Aunt
Mean that a severe headache made her feel weak. Chee thought
she might honestly have said “heartache.”
The little girl cheerfully waited on the sufferer, but when once outside
the best bedroom, her face was very sober.
“Of course Our Father will make it all right soon, ’cause I asked Him
to be very quick, but I do wish so hard He’d let me help.”
Finally the long day drew to a close. Aunt Mean and Uncle Reuben
retired. Chee again returned to Gertrude.
She was in the parlor. It was very dark in there, even the dim twilight
was shut out. Chee, following Cousin Gertrude’s voice, found her
sitting by the window.
She threw open the blinds. She could not bear to think her friend
was sitting alone in the dark.
“Cheer up, Birdie, I shall be better soon,” said the girl at sight of
Chee’s sorrowful face. But even while she tried to speak gaily, she
looked so pale and worn it saddened the little cousin.
Chee started up-stairs, then turning, came slowly back and
hesitatingly whispered, “I’ve told Him all about it. He’s surely heard.
It’ll be all right pretty soon.”
“Yes, my comforter,” was the only reply.
Up in her own room, how Chee longed for Daddy Joe’s fiddle. “I
know I could make real music to-night—I know I could,” she told
herself. “I am sure it would be real, but it would never do; I mustn’t,
cause then my secret wouldn’t be mine any more.”
But the temptation increased, until she resolved to bring out her
treasure and look at it. “Just look at it and hold it.” That would give a
little joy.
CHAPTER VIII.
ABOUT sundown, as the people of Chesterfield say, the train drew
into the village. At the station a gentleman stepped off, left his
travelling-case at the hotel near, and sauntered up the street.
“Here, Bub,” he called to an urchin who, with his hands in his
pockets, his legs apparently too long for his trousers, stood eyeing
the stranger from the store doorway, “can you tell me if there is a
person by the name of Reuben Whittaker residing in this town?”
“Guess you want—Miss Mean’s—brother Reuben—don’t you?” he
replied intermittently, while severely intent upon chewing gum. “She
lives—out—to the Bend.”
“Is it far?”
“Nope—not more’n—four miles. You just go straight—on, till—you
get there.”
“Well, that’s quite a walk, but I guess I’ll try it. Want a nickel?”
“Nope. Pop don’t ’low—no pay for—common p’lite—says its—due
our country—of her cit’zens.”
“Queer little chap, that,” mused the traveller. “Pity the rest of us don’t
have more citizen politeness.” The man’s face was rather haggard.
Several times as he strode along the little path, pulling at the daisies
by its edge, he heaved a long sigh.
“I’ve given in so much,” he said, half aloud to himself, “she’ll have to
give in the rest. How fiery I was, though! Poor little thing! Well, I’ve
said it, and I’ll have to stick to it now. I suppose it is all folly my going
to the house, but, Great Scott! what’s a feller going to do? I can’t
sleep nights till I’ve caught a glimpse of her, anyhow. Maybe she’s
ready to give in now. If she doesn’t of her own accord, it will never do
for me to say anything—never. That dream I had bothers the life out
of me—can’t seem to shake it off. Of course she’s all right, flying

You might also like