Understanding Computers, URL: http://neil.franklin.ch/Underst_Computers
Author: Neil Franklin, neil@franklin.ch, Last Modification: 2007.11.14
ToDo
--- general
--- Introduction
--- Processors
PLDs FPGA and SoG same treatment as stuff up until CPLDs
--- Programming
split copyright stuff to net politics, rest of anti-bureau stuff also
order syst, decl, debug, design, teams, manag, others/spec, docu, think
order top dn, bot up, use existing, 3rd part, commerce, free/FSF/GNU
move OOP to interactive GUI Smalltalk, must be after Lisp/Forth
move Brad Cox, title "never mind the man behind the curtain" to top down
move SW components and selling problems, to 3rd party, solution free SW
move free SW Unix robustness to bottom up
move thinking child/artist/artisan experience stuff to bottom up
move some thinking child fun stuff to comp no productivity increase
move bureau mentality, apparatshik, desovietisation, SNAFU to top down
move thinking science sales behaviour to external sales/adverts text
move thinking engineer to CASE, incl CASE critic in it
--- Batch Systems
--- Interactive Systems
order video charshift, charmem, sprite, pc mouse cursor
graph, draw, bitmap, bitblt, blitter, pc accel, mixed
sort picture critics in MM pict and web/document non text disabled
split documents in formated data, component, document UI
move documents electr publ, reference, paperless to time/datashare
move Smalltalk/GUI/DocUI to workstations
move OLE, CORBA to c-s remote method/distr obj stuff
personal files, diary, mails, other make story of person, integrate them
stories stuff in documents, HP100LX closed apps vs emacs open files
--- Timesharing Systems
terminal only unloading host and screen editing stuff
move rest to video disp char, also PC terminal ANSI stuff
--- Networks
split comp comms into time/datashare collaboration, finger, mail, conferences
net comms finger, file publish/http/Web/naming, netmail, netnews
move ATM frame relay, switched 56 all to bridge/route, not in WANs
move disp serv NeXTstep mult doc memory comparison to processes or docs
split politics from net security, activism from impact on hackers life
tool/sys select/force, managm/bureau, copyr/patent, spy/crypt, censo/trust
securty add separate chapter social impact
--- Portable Systems
--- Bibliography
Contents
--- Introduction
State of this Text
Motivation
collecting knowledge, giving further, showing fascination
Coverage of Systems and Features in This Text
parallel developments, my knowledge, no user programs exept programming tools
Writing Style
guided tour to knowledge, detail important, reading style, history, reference
References
how to read the format of the references
Publishing Media
Acknowledgements
Errata
--- Processors
Boolean Logic and Digital Circuits
binary, electronics, logic gates, ICs, combinational logic, sequential logic
Memories
Wilson tubes, core memory, SRAMs, (P)ROMs, DRAMs, parity/ECC, caches
Microprocessors
programmable controllers, embedded, one-chip microprocessor, IO controllers
microcontrollers, most numerous, later used as CPUs for small computers
Programmable Logic Devices (PLDs)
PLAs, PALs, PALVs, GALs, EPLDs, CPLDs, LCAs/FPGAs, CALs/SoGs
Registers and ALUs
technologies flip-flops vs delay lines vs drums, data formats
decimal vs binary vs BCD, signed binary variants, register layouts
Addressing Memory
addressing modes, address range vs data bus width, address expansion
Addressing Partial Words, Byte Addressing
extract/insert, byte addressing, little-/big-endian
Instructions
instr types move/ALU/program/processor, instr sets comparison
Instruction Decoding and Execution
hardwired, microcode, CISC, pipelines, RISC, emulators, FPUs
Parallel Processors
SIMD, vector proc, massive parallel proc, MIMD, VLIW proc, superscalar, SMP
System Consoles and Front Pannels
entering programs and data, reading out results, debugging, logic analysers
--- Programming
Assembly Language and Assemblers
mnemonics, automatic conversion, macro assemblers, still relevant today
Comments and Code Layout
code read more by programmer than comp, explain why not what, symbol names,
code arangement, literate programming, display utilisation, doc in source
Modular Programming
not just repetition, hide details, clean parameters, bad C 'strings', bumming
Standard Algorithms
computer science optimal algorithms, well documented, not repeated here
Libraries and Linkers
larger programs split source, object files, libraries, naming symbols
High Level Languages and Compilers
specify result, machine indepance, abstraction, language elements
compilers, performance problems, direct HW access problems
Structured Programming
local variables, block structure, BNF, B&D, anti gotos, Nassi-Schneider
Functional Programming
procedures eval functs, minimise side effects, recursion, unobtainable ideal
Top Down Design
split problem into subproblems, target exactly defined
rigid designs, break on trouble, CASE metaprogrogr, more of same, failure
Bottom Up Construction
iterative learning, 2nd time better, incremental construction
cognitive style, time consumption, time overrun, improve vs backward compatib
Systematics
concentrate like, order explicitly, merge systematics
Declarative Programming
describe what you want, as data structures, then how to do it, as procedures
Object Oriented Programming
data+routines, classes, polymorphism, pure vs hybrid languages,
save code, no magic, nail and hammer, hidden by jargon
Debugging
programming is debugging, caution, catching bugs, testing fails, bug recovery
Documentation
design/review info, record changes, archiving, intrusive documentation sys
Programming Teams
big jobs require team, use small teams, divide work by ability, project names
Bureaucrats and Managers
serving vs ordering, know relative strength, recognize importance of technies
evaluate techies for trustability, create environment, clear description
Programming for Others
best write yourself, specification collect users knowledge, user involvement
Free Software
owners interests, design vs fabrication costs, cooperation vs competition
copyright restr, user owned, authors income, distr as source, Unix/GNU/Linux
Thinking Methods
children, artists, mystics, artisans/craftsmen, scientists, engineers
--- Batch Systems
Batch Operation
user hands in progr/data, machine special operator, results back
efficient on HW but inefficient for users, waste output, IBM
Teletypes
printing, typing progr/data to tape for loading, ASCII code, upper case
Paper Tape Punchers and Readers
program saving/reloading, intermediary data, pipelining
Card Punchers and Readers
speed up read/writing, simplify input editing, keypunches, fixed data width
Printers
speed up printing, dot matrix printers, line printers, plotters, Centronics
Magnetic Tapes
no moving mechanics, even more speed, copy cards to tape, print tape to paper
Disk Drives
recording methods, access, capacity, disk controllers, embedded controllers
RAID, disk caches, floppies, CD-ROMs, optodisks, fixed vs removable disks
Virtual Memory
code/data partially in mem, rest on disk, explicitly load overlays
dynamicaly load segments, dynamicaly load pages, backing storage, mem size
File Systems
files, directories, access routines, caches, RAM disks, memory mapped files
Databases
field size independant programs, data all in one file, relational DBs, SQL
Partitions
multiple subdisks, OS convention, formatting, PC problems
Job Control Languages, Command Line Interpreters, Shells
selecting input/output, multiple in/out, organising files, starting programs
parameter passing, batch files/shell scripts, Unix glob lossage
Asynchronous Input and Output
polling, state machines, coroutines, interrupts, race conditions, deadlocks
buffered IO, DMA, IO processors, multi-sequence processors, IO vs proc speed
Buses and Slots
mult devices, addressing jumpers vs geographic, AT bus, periphery buses, SCSI
Device Drivers
device independant IO, resident drivers, ROM drivers, PC BIOS mess
Booting
drivers separate, file access routines resident, shell separate
loading resident stuff, extensability, boot ROMs, boot devices
--- Interactive Systems
Interactive Operation
constantly updated output, control by user input dev, program between
reactive, program composing, efficient for users but costly on HW, hackers
Output Devices
lamps and process control, 7 segment displays, oscilloscopes, video displays
loudspeakers, multimedia, 3D, virtual reality, force feedback
Input Devices
switches and sensors, keyboards, joysticks, paddles, light pens, mice
trackballs, tablets, scanners, digital cameras, microphones, data glove/suit
Debuggers
see program run, break/resume, single step, memory dump/alter, line assembler
display debug/child mixed, symbolic debugging, session state, remote control
Interactive Programming Systems
shell, editor, HLL compil/interp, debugger in one, Basic, dBase, Lisp, Forth
Text Editors
no tape splicing, search and replace, folding text, fitting text in memory
Windows
mult buffers, see at same time, dividing screen, window frames, iconified
Widgets
buttons, menues, scroll bars, rulers, icons, space waste, dialog boxes
GUI Libraries
toolkit libs, object frameworks, event control, GUI builders, incompat GUIs
Documents
formatted files, no std formats, no visible progr, edit/viewing, components
directories, doc files, doc filesys, OOFS, OODB, OO sys, doc db, paperless
Desktop Tools
background jobs on desktop, commands by drag&drop, full functionality of CLI
User Interface Design
task oriented, toolset user interface, computer metamedium, write for users
learning vs experienced users, expect user errors, user documentation
--- Timesharing Systems
Timesharing Operation
interactive systems proc 95-99.9% time waiting, multiple users, time slices
Multitasking
mult progr, exec/fork, no busy wait, time slicing, batch, TSRs, multiproc sys
Terminals
multiple users IO, TTYs/typeterminals, multiple sets of interactive IO
video terminals, 3270 and 5250 terminals, processor terminals
Terminal Connections
20mA, modems, RS-232, null modems, 232 testers, term printers, console terms
Microcomputer Terminals
PC terminals vs interactive IO, PCs as timesh terminals, multi user micros
Terminal Independant Software
VMS only standard terminal, ITS monitor routines, Unix termcap/terminfo
Processes
separate addr spaces, one process at a time, mult process at a time
all process part loaded, sys/user mode, mult stacks, shared memory, DOS boxes
Subprocesses
programs in login process, protected address range, subprocesses, fast fork
limits bug effects, subshell from editors, subprocess as subroutine
Job Control
mult login at same time, fore/background, switching, output spy, TSR popups
Debugging Support
ITS debugger healing like physician vs post mortem autopsy, routine debugging
VMS debugger separate address space, after fact, Unix 2 processes, switching
Pipes
pipes, tool approach, Unix pipes only ASCII, pattern matching, out of band
Interprocess Communication
exchange data between processes, can't be in addr space, OS provides struct
Multithreading
user progr coroutines, much work, shed problems, use OS, split tasks/threads
Microkernals
real time guaranteed switching time, kernals are getting too big
kernal only resource managment, thread time slicing and IPC, NT claim
Security
aims, threats, implementing policy and mechanisms, too much can be damaging
--- Networks
Connecting Computers
remote login with modem, file transfer, kermit, modem autodialers, uucp/uux
Arpanet
modem slowness and unreliability, digital line speed and reliability
line sharing, NCP multiplexing, Telnet remote login, FTP file transfer
Computer Communications
mail, broadcast/write/talk, who/finger, conference/NetNews, chat
teleworking, online education, teledemocracy
Terminal Servers
connect terminals direct to net, prefered over direct, no dependence on local
more flexibl login, no local sys, easier task switch, LAT, SSU, Ethernet term
Workstations
timesh/term frust, many single user, Berkley "r", Alto WS, Sun WS, PCs
Local Area Networks
fast line for local traffic, Ethernet, Token Ring, FDDI ring
Connecting Up LANs, Internetworking
LAN to LAN over Arpanet, internetwork, IEEE 802 bridging, PUP, DECnet, TCP/IP
IPX/SPX, NetBEUI/SMB/NetBIOS, Appletalk, OSI CONS/CLNP, multiple protocols
Wide Area Networks
connect LANs with WANs, leased lines, X.25, RS-232, POTS/modem, switched 56
ISDN, 56k modems, frame relay, SMDS, DSL, ATM, CATV, universal cable
Connected Internet
user made content, attract of net is servers, other media central no content
24h connection, public vs private, european routing mess, data highway
File Servers
timesharing vs WS server, dedicated vs peer to peer, Alto FTP vs remote files
DECnet FAL, NFS, HTTP, Netware, Lan Manager, AppleShare, cost saving myth
Boot Servers
diskless WS, swap disk only, dataless WS, BOOTP, Netware net boot, Pathw LAD
Mail Servers
workstations personal, are often down, only users progr, without 24h network
no mail server process, timesharing mailbox, POP, no NFS, UUCP over IP
Administration Servers
Grapevine, LAVC, NIS, DCE, SNMP
Print Servers
Arpanet none, Alto EARS/Dover, PostScript, LAT terminal servers, TCP/IP lpd
PC server process, print server boxes, Macintoshes Laserwriter, cost sav myth
Compute Servers
assist WS with power, multicomputers, virtual multicomputers, killer micros
Display Servers
network transparent graphic displays, X, NeWS, DPS, XTerm, X terminals
Database Servers
downsizing, client-server, SQL, stored proced, transact, 3-tier, middleware,
RPC, RMI/DO, workflow, formproc, Java, superserv, save myth, MIS regain ctrl
Agents
natural language UIs, mailed shell scripts, gateways, help wizards
Network Security
bugs, hacking, worms, files, wiretapping, Kerberos, firewalls
mailbombs, letterbombs, spam, spying, forging, credibility, censors, Internet
--- Portable Systems
Portable Computers
usefull computer used one, small size/low weight, no cables, robustness,
agenda, palmtop vs paper, proprietary vs MS-DOS, desktop+palmtop vs notebook
--- Bibliography
--- Introduction
State of this Text
my brain dump of what I know about computers, and book/magazie references
may one day be expanded to an full text as book or web site
at the moment an outline of the themes to be treated in the final text
in some places quite a bit of details, in others only a title
Motivation
I have spent since 1981-11 collecting, connecting up knowledge, experience
I had already 5..7 years of doing analog and digital electronics before that
I have learned lots from 1000s of magazine articles
I have also collected lots of own work experience in that time
I wanted to tidy it all up to deepen understanding by collecting in writing
knowledge becomes better if you try to explain it
thinking leads to more profound understanding [Feynman1] pIX preface
"only if you can explain something do you really understand it"
many others lack this profound knowledge and would be better of if they had it
many articles, even in good magazines, show authors lack of knowledge
claims and questions by user group colleagues show this to be a problem too
often todays systems have restrictions because designers not know better
show the better alternatives known, suggest development toward them
today it is difficult to learn it because
the available texts either have no depth or are too specialised
this requires reading lots of them, lots of time, no one has that today
the systems are far less transparent, making initial steps very difficult
there is lots of distraction from doing something (someone else will do it)
but doing important for experiencing how something works, real learning
I am still discovering important ideas that others knew decades ago
this is due to lack of good texts showing them and how they were arrived at
this is surely also happening to others
I want to show the fascination and fun in computing that drives hackers
I have been thinking about writing this book for the last 2 years
the exit of my job gave me lots of free time, writing is a good way to use it
in the mean time I am back at work, so this project is not being worked on
Coverage of Systems and Features in This Text
different developments ran at different times and speeds, interleaved
often things were rediscovered multiple times, parallel innovation [Bell] p23
technologies changed many times, but basic structures often stayed the same
exa mainframes valves/transistors, minis ICs, micros VLSI different
but execution of instructions functions the same way on all
this text describes features roughly in order in which they first appeared
I learned computing on micros, then PCs, minis and WS, no mainframes
home programmable calculator, shool Columbia Commander, home Basic computers
home DOS 286 AT clone, home Transputer, shool PDP 11 and VAX minicomputers
home NeXT Unix-WS, work VAX-WS, palmtop HP 100LX, home Linux 386 AT clone
due to lack of knowledge the world of IBM mainframes nearly entirly missing
because of available experience and documentation
I will use newer systems comparable to old ones to describe a feature
not covered at all are user programs (word processor, spreadsheet, DB, graph)
they are too varied, require specialised knowledge which I often haven't got
I often don't know enough about most of their technology anyway
there already exist good texts on these types of programs
they wouldn't fit into the didactic structure of this text
also this text is already too big due to creaping featurism
exemption of this rule is for programming tools (editor, compiler and debugger)
this is because the use of these often influenced system design
this comes from their usage by the people that write systems
also these were often used as prototypes for user programs
also I have lots of experience in using them
Writing Style
the typical reader is assumed to want to know what goes on
to have an interest, to want to master computers, not just use them
is prepared to invest some time into expanding his knowledge
a good text is a guided tour of the knowledge the writer wants to give reader
to make text readable build up readers knowledge step by step
bring first basics, use earlier pieces of knowledge for later explanations
because human brain is limited in takeup capacity
good text with details but written so that they are hidden on first reading
on further readings they get discovered progressively
hidden details must be non crucial ones for building up first overview
first introduce something new, explain it, then give its name for referencing
not name first as preconceptions may distract reader from explanations
beginning with highly evolved concepts is too much for reader
loads of details without how it came to be lead to mental indigestion
exa my experience with Lisp, OOP, Microkernal
the same thing applies to using opaque terminology
exa Objects
think of how the brain learns by building up
it collects facts, then it generalises on similarities
see original form of modified chinese proverb in programming
details are important for understanding anything
scientific understanding from understanding underlying mechanism
intimate knowledge of the intricate web of facts counts
not just words, that leads to technobabble, linguistic trap
theoretical knowledge vs practical, index errors [Feynman2] p36
Brasilian students memorise sentances [Feynman2] p211
but they don't understand their meaning, connection with reality
exa Triboluminescense defined, not but explained [Feynman2] p217
father knowing name of birds vs knowing their abilities [Feynman3] p3
see chapters on designing and debugging
for relevance of facts to successfull programming
texts I know either detailed but with small focus, or wide but without depth
this text wide and shows the relationships
is detailed down to the bits but is not at reference level
many other good texts for that, references to them included
treat each theme in same detail as a good magazine article
the reader can't read a large text and memorise it all in one
the reader will have to repetitively read the entire text
alternating with in depth study of specific themes of interest
this requires a good didactic structure for reading entire text
and also cleanly defined chapters for studying separate themes
knowing how something came to be is important to understanding it
often required to understand why things were done the way they were
very often for backward compatibility [Raymond] "hysterical reasons"
show history of ideas, their execution, experiences gained, new ideas
illustrate points with anectotes, stories
not only provides examples, but also give reader experiences
losen up the text and helps reader remember the point to be made show
also show playfullness of hackers behaviour, hackish values
References
remarks of the form [xxx] xxx are book/magazine/file references
[xxx] p are book references with page number
for the details of xxx see my bibliography at: http://neil.franklin.ch/Books
[xxx] -p are magazine references with year/month/page
[Byte] -p are special editions of Byte
[Byte] -p are supplement pages
[Hauben] "" are chapter files of Netizen directory
[Raymond] "" are entry titles of the Jargon File
[man] "" are entry titles of the Unix online manual pages
[RFC] are RFC references with the RFCs number
Publishing Media
first ASCII file on Internet, later HTML files
as first publication it allows fast reporting and correcting of bugs
ev a mailing list for questions, discussions, follow ups
then CD-ROM with the HTML files
for reference, searching, working without downloading time
also containing all utilities and examples mentioned in text
then possibly book
for first reading, studying, inspirations, meditation
cover Conrad Escher style, vertical layers from bits to systems
Acknowledgements
all the people that I learned from
colleges (at shool, in user groups)
exa Kanti Admin (first comp), M Ammann (Assembler), M Meisterhans (Jarg file)
other writers (articles, books and files)
exa [Raymond] (jargon file), [Levy] (hacker sociology)
exa [Goldberg2] (WS history), [Feynman1]..[Feynman3] (scientists)
specially mother and father
gave me determination and attitude towards learning
also both artistic/feelings and technical/logical methods of thinking
Errata
I have tried to avoid errors in this text, but shurely some slipped through
send corrections, also suggestions and additions to this text
--- Processors
Boolean Logic and Digital Circuits
binary numbers, addition, negative, subtraction, shift, multiplicat, division
bits as information carriers, Shannon [ct] 2001-6p87
basic logic elements/gates [Tietze] p192
AND, OR, NOT, NAND, NOR, XOR
half and full adders [Tietze] p605, carry ripple vs lookahead
electronics
electric voltage, resistors, ohms law and current, voltage divider
transistors bipolar vs FET vs MOSFET, amplifier, complementary
technologies relays, valves, diodes, transistors (Bell 1947 [Byte] 85-9p209)
transistor modules (DEC [Clark] p361 IC forerunners)
logic gates/circuits
0/1, L/H, no/yes, F/T are only external representation of 2 voltages
RTL (open collect in one), DTL (one T and Ds), TTL (complem Ts), ECL, CMOS
mux vs tristate totem pole bus vs open collector bus [Tietze] p207+p209
lots of wires (pins) vs circuits (technology) vs slowness
[ct] 90-2p222 logic tester probe
IC technologies, NMOS [Tietze] p201, [PCW] 90-10p219
[ct] 97-12p90 chip manufacturing
[ct] 2000-5p260 todays CMOS transitors massive tuning
[ct] 2000-7p216 reducing chip heat generation
[ct] 2000-24p274 chip manufacturing
anec 7406 hex inverters against hostile magic [Raymond] "hex"
possible future chip replacements
[Byte] 89-5p269 molecular, quantum, [Byte] 89-10p231 computing with light
[Byte] 92-9p169 photonics, [Byte] 96-4p45 opto, molecular, quantum
[ct] 97-3p110 quantum computers, [ct] 98-16p150 quantum computers
[ct] 97-7p112 DNA based computers, [ct] 98-16p150 quantum data processing
[ct] 98-21p43 plastic chips, [ct] 98-21p104 nanotechnology
[ct] 99-2p76 plastic chips, [ct] 2000-25p118 quantum computing
[ct] 2001-9p216 bioinformatics, [ct] 2001-14p52 molecular memory
[ct] 2001-23p64 polymer electronics, [ct] 2001-24p50 molecular computers
[ct] 2001-26p50 programmable DNA computer, turing machine
[ct] 2002-19p46 polymer chips, [ct] 2002-23p50 quantum cascade
[ct] 2002-25p170 superconducting chips, [ct] 2003-6p38 DNA computer
combinational logic [Tietze] p224
single gates 6*NOT (7403), 4*2NAND (7400), 3*3NAND (7410), 2*4NAND (7420)
1*8NAND (7430), later 13NAND (74133)
same variants open colector output (00->01)
and Schmitt trigger input (20->13, 04->14, 00->132 late)
same for NOR (00->02), AND (00->08), OR (00->32)
tristate gates (74125/126 4 sep), very late when open collector too slow
common enable signal (74240/241/244 2*4bit)
bus to bus pairs (74422/243 4bit, 74245 8bit)
2*2-2-AND-OR (actually NAND-NAND) combi-gates (7451), expandable (7450)
wider OR 1*3-2-2-2 (7454), expandable (7452/53)
wider AND only expandable 1*4-4 (7455)
NOT-NAND-NAND 2*2:1Mux, 1*4:1Mux, 1*8:1Mux (74150/151)
common select 4*2:1Mux (74157), 2*4:1Mux (74153), 4*XOR (7486)
generalised NOT-NOT-NAND-NAND decoders (74138 3:8, 74139 2*2:4) and encoders
priority enc (74148), BCD and other code converters, LED pattern generators
full adder (7480), ripple adder (7482 2bit), look ahead adder (7483 4bit)
ALU/FG (74181 4bit/32func 24pin 75gates, 74381 4bit/8func 20pin)
and carry lookahead (74182) for 4*4 or even 4*4*4bit cascading
look ahead addition carry 0 for 00+? vs ? for 01|10+? vs 1 for 11+?
sequencial logic [Tietze] p232
is combinational logic and flip-flops [Tietze] p261
combinational logic does from conversion input+FF to FFs+output
FFs store state from one cycle to next, are the "memorx" of the circuit
FF types RS, RS-latch, D-latch, RS-MS, JK-MS (7470/74..), D-MS (7474)
common clock gives registers (7475/77 2*D, 74100 2*4D, 74173 4D)
and in 20pin 8bit (74273 w clear, 74374 w TS out En, 74377 with Clk En)
single addressable multi-regs, 16*1bit vs 16*4bit wide, as >16 regs unusual
multiple addressable/accessable regs (74170 4x4bit 1read 1write)
(74172 8x2bit 1read 1write 1read/write)
non addressable multi gives FIFOs, delay buffers, is mult non-par shift reg
counters async (7493 4bit) vs sync (74161/163 4bit) [Tietze] p240
up/down countable (74169 4bit)
shift regsisters [Tietze] p253, no parallel (7491 8bit)
loadable (7494 4bit), readable (7495 4bit), reversable (7499 4bit)
universal anything (74194, 4bit, 46gates)
SR combined with ALU/FG in one chip (74281=74181+74194 24pin)
or even SR with 2nd reg and ALU/FG 16func and TSgates (74681 20pin)
or whole lot more (entire data path) to bit slice (74481 44pin!, Am2900)
sequencer is combination of an counter driving combinational logic
state diagrams, running/stray/parasitic cycles, one hot vs state number
exa IEEE 488 protocol definitions and SCSI bus states
for sequential logic static flipflops vs dynamic capacitors
less transistor usage vs loss of ability to stop clock
usually driven by an clock, but [Byte] 93-1p145 computing without clocks
"clockless" asynchronous logic [ct] 99-17p176 return of async logic
also real clockless [ct] 98-6p128 missusing XC6216 as analog chip
integration leads to more transistors on a single chip
[Byte] 90-1p237 (chips)
[Byte] 96-12p82 years and transistor count for Intel processors
[Byte] 96-12p93 Moores law, [Byte] 96-12p77 birth of a chip
[ct] 98-4p98 new chip designs, [ct] 98-17p29 SOI, [ct] 99-2p82 chip lithograp
1960 SSI 10, 1965 MSI 100, 1970 LSI 1000, 1975 VLSI 10000, 1980 ULSI 100000
how do you get all the gates signals in and out of the chip, run out of pins
IC chip packaging DIL, PLCC, PGA, BGA [PCW] 95-8p589, multi chip carriers
[ct] 2000-18p178 chip cases/packaging
most gates outputs must be wired chip internally to other gates inputs
this leads to more specialised functions on a single chip
fabrication runs become smaller, application specific
[Byte] 91-1p308 Hyatt, [Byte] 92-3p145 Faggin birth microproc
leads to custom chips (full custom, standard cell and gate arrays/ULAs)
[Byte] 87-9p115 POACH, [ct] 89-11p196 ASICs
[ct] 91-4p58 personal chips, [ct] 96-5p326 ASICs sand to chip
more and more complex electronic systems were built, design costs go up
hardwired logic takes too much time to design, and alter (rebuild)
it also uses too many gates, space, power, costs too much
leads to user programmable chips (memories, microprocessors and PLDs)
exa memories 1k, 4k, 16k, 64k, 256k, 1M, 4M, 16M
exa proc 8086 29'000, 68000 70'000, 20286 155'000, 80486 u 68040 1'000'000
[Byte] 93-5p94 86 29'000, 286 134'000, 386 275'000, 486 1'200', 586 3'100'
memories far higher transistor density, exa P6 processor vs cache chip
anec Intel Micro 2000 problem finding use for transistors [Byte] 91-4p131
high transistor count and clock frequences lead to large power dissipation
modern processor energy usage, exa Alpha 2.75V 26W -> 10A
problem of getting current in (need many pins) and heat out (sink, fan)
without inductivity on GND distorting logic values on signal lines
anec Tek 4/8 with 20MHz worked only after energy rails, DRAM pull to 1.5V
reduce supply voltage 5V->3.3V->2.5V->1.8V [Byte] 92-12p137 3.3V
cooling fins like power amps, peltier elements, ventilators, heat pipes
[ct] 98-19p118 PC noise, [ct] 2001-17p112 silent PC cooling, heatpipes
[ct] 2002-18p108 silencing PC noise, [ct] 2003-10p176 PC cooling
Memories
[Byte] 89-11p391 memory, [Byte] 95-6p187, [PCW] 92-2p310 memory lanes
drawing memory first address (used in text) vs highest address up top
Kilo in memories is 1024 (not 1000), Mega is 1024*1024 (not 1000*1000)
but frequencies in kHz or MHz are 1000 and 1000*1000
when to use 1000 and when 1024 depends on whether binary counting or not
early computers (pre 1950) only had registers, data from tapes, prog cycl tape
or perhaps small memories using same technology as registers
[Raymond] Hacker Folklore Mel RPC-4000 instruction positions on drum
rotating drum + signals in delay lines
sequencial memory, need to wait for bit to pass, 1 read/write per cycle
use address bits to compare with counter, to see when bits arrive
often together with bit serial ALU as only one bit at a time
shift memory chips to do same (used in early terminals as character mem)
Wilson tubes, electrostatic memory
exa Newman/Williams ManchestAutomDigMach (1948/9, ES mem) [Salus] p17
exa MIT Whirlwind 1k/2k*16 bit (1950) [Ross2] p61, [Byte] 89-11p391
random access bye pointing electron beam by 2 DACs driven by address bits
ES memory has to be refreshed (read and rewritten with old contents)
is this reason for Whirlwind PR temp addr register? [Ross2] p87
fairly unreliable due to analog effects on scanning beam
anec Whirlwind addressing diodes wiring change [Ross2] p62
anec Whirlwind had 1024 16 bit words of mem on a good day [Clark] p353
core memories
exa MIT MTC first 1/4k core memory (1952) [Ross2] p73, [Clark] p353
name simply stands for Memory Test Computer
exa Whirlwind upgraded 1953 with 2/6k*16 core memory [Ross2] p62
speed increased from 20'000 to 40'000 instr per second
exa Lincoln Lab TX-0 (1957, 4/8k*18 memory)
built as memory test comp for halves of TX-2 64k*36 memory [Clark] p355
first transistor comp, from DEC transist modules (DECs original business)
cores needs no refreshing, unlike electrostatic and DRAM memory
only writeback after reading (is destructive) [DEC1] p3-17 memory timing
for reading write a 0 and see on sense line(s) whether bit was inverted
anec real memory doesn't lose data when the power is turned off [Pest]
core memory is not used any more
but name remains in core dump [Raymond] "core", core wars game
folklore calls the time
until 1955 stone age (primitive!) [Raymond] "Stone Age"
1955-60 bronze age (less primitive) or counted to stone age
bronze age is defined as time between usage of transist and of cores
1961-71 iron age (primitive..modern) [Raymond] "Iron Age"
time from transistors and core memory (iron oxide) until microproc
I suppose this makes 1971-today the modern age
note contradiction [Raymond] "Stone Age" vs
MTC [Ross2] p73 and [Clark] p353 timing of transist and core usages
note though that IBM introduced cores late when 701->704 [Clark] p397
perhaps this is the reason for folklore being wrong on this point
static random access memory (SRAM) chips
exa 7481/84 4x4=16bit 1bit wide array section, needs decoded address
exa 7489 16x4bit SRAM, still has separate DI and DO lines, despite 4bit
exa 74200/201/202 256x1bit, 74207/208 256x4bit, 74214/215 1024x1bit
exa Intel 1kbit RAM 1969 (Intels original business!) [Byte] 85-9p209
SRAMs grew out of arrays of flip-flops, addressable registers
single address as this saves pins, and computers assume this
256bit equals core density w less power/heat, larger sizes beat it
first 1 and 4 bit wide chips
from 2048*8 on then 8bit wide like standard for ROMs, up to 512k*8bit
new sync and ZBT SRAMs [16|64|256]k*18bit (with parity), 128k*36bit
no 16MBit genration seems to have been made, 1M*8 seems to be end
no destructive read, fast write, but do not retain data when power loss
read only memory (ROM) / programmable ROM (PROM) chips
[Byte] 90-11p315 Flash cell, [Byte] 96-6p99 Flash
[ct] 97-16p176 Flash programmer, [ct] 97-16p178 Flash EPROMs
[ct] 2002-9p164 Flash disk formats (CF, SM, MS, MMC, SD)
RAM named as counterpart to sequencial drum, later ROM counterpart to RAM
simplification of many-simple-gate logic by replacing it with an table
first a design method for complex ligic, later implemented so in hardware
table with 1 core/bit is smaller than logic gates in transistor modules
usually not core RAM (as needs refresh), but core/nocore or print traces
or use PCB with inductive connections between sides [House] p405
or use diodes, is strictly DTL NOT-NOT-NAND-NAND logic
exa Whirlwind (32+8)x120bit germanium diode inst decoder
is a lot smaller than using tubes for logic, even if high volt diodes
such wide control table stuff is known as horizontal microcode
alternative do it sequencially, multiple steps with simpler hardware
and narrower table, this is known as vertical microcode
is cheaper on parts but slower, used in lower cost models
exa PDP-8/E "autoboot option" is a 32x12bit diode [P]ROM, to hand snip
use board with diode arrays, prefabbed can be programmed with cutters
low density, limited boot loader size to a few 100 bytes [Salus] p47
exa PDP-10 KL-10A (DispatchRAM 512*x4bit + ControlRAM 1280x84bit)
KL-10B (2048x??bit) and KS-10 (??x??bit) microcode
is combined vertical+horizontal microcoding
note that these use SRAM instead of ROM, need PDP11/40 or 8080 to load
exa MIT Lispm using vertical microcode
with appearance of large enough chips, place ROM in chip
exa 7488 32x8bit ROM, 74187 256x4bit ROM, 74188 32x8bit PROM
74270 512x4bit ROM, 74271 256x8bit ROM, 74287 256x4bit PROM
74470/471 256x8bit PROM, 74472/473 512x8bit PROM
parameters modifiable, speed read, speed write, size, cost
mask ROM data stored as wiring, part of manufacture, send bits to there
PROM data stored as fuses, can be burned to program, like snipping diodes
EPROM FAMOS transistors, data stored as charge in 2nd isolated gate
EEPROM/EAROM/FlashROM are EPROM variants with electrical erase, not UV
but also CMOS SRAM chip + backup battery = NovRAM
ROMs can not be modified while a system is running
only used for inmutable code or wiring that must survive power off
as soon as (P)ROMs appeared, were used to replace complex combinational logic
exa hobbist using EPROM instead of 181 chip, for custom signalling
24pin 2power+14in+8out -> (2^14)x8bit = 16kx8bit
exa Apple ][ disk controller with PROM for state machine
exa MIT Lispm 4bit 4position barrel shifter sections from 1024*4bit PROMs
exa screen/printer character generator ROMs, 96char 5x7pixel = 3360bit
todays 16MBit 2Mx8bit FlashROMs allow up to 21input 8output tables
1Mx16 costs 1 input to deliver 8 more outputs, shows cost of inputs
on many early systems only a small amount of ROM for booting from disk
often after OS boot (into RAM, fully writable) ROM swich off, RAM full read
ROMs and PROMs were made right from the beginning 8bit wide, later 4bit
as often small address range and wide data/bitmap
but also use lots of ROM, gives nonerasabe firmware, no disks
such as most 8bit Basic home computers interpreter+OS in ROMs
but also on later systems larger BIOS ROMs, such as in IBM PC or Mac
ROMs (at least EPROMs) are usually even slower than DRAMs, >200 or even 300ns
even in 2007 Flash bases uCs limited to 30MHz, SRAM based over 100MHz
if the ROMed code is still used while system is running, such as PC BIOSes
copy it into faster RAM and use that, this is called BIOS shadowing
for this read access from ROM, write access to RAM, then switch ROM off
dynamic random access memory (DRAM) chips
[Fujitsu], [ctk] 90-10p417, [ctk] 90-11p375
[ct] 99-6p146 ferroelectric and magnetorestrictive RAMs
[ct] 2001-18p170 magnetic MRAMs, [ct] 2001-21p254 next generation memories
[Coffron] p72 MK 4116 16k*1 bit DRAM chip, mentions earlier 4kx1
exa Intel history 2107 4kbit DRAM
exa Dragon and IBM PC Prototype MK 4132 [ct] 98-22p250 MK4132 in PC
1 pin non Mux or 2 CAS?, but Dragon 16*16kbit is 32kByte (half chips?)
grew out of cores, capacitive instead of inductive
are more dense and cheaper than SRAM due to single element/bit
but destructive read (like core), need write back, recovery time
are slower than SRAM because of this
also require refreshing of capacitors because of charge leak
anec Z80 had refresh addr gen and MUX trigger on chip
addr mux originally first RAS (lower addr bits) [Coffron] p72
memory chip pinouts [ctk] 88-3p243 JEDEC, linear vs multiplex adressing
but even slower because of this, require 2 address transfers
later nibble mode (4 times RAS or CAS), then page mode (first CAS)
faster signalling methods [Byte] 95-4p24
EDO [PCW] 96-1p255 buffer to hold out while new addr being appied
Burst-EDO (BEDO) intenal addr generator for also faster piped write
[ct] 95-4p82 EDRAM vs cache performance curves
[ct] 95-4p130 EDO, [ct] 95-4p334 DRAM addressing and modules
[ct] 96-2p214 effects EDO vs cache
[ct] 96-2p218 memory and cache types glossary
[ct] 96-7p158 DRAM signaling/sdressing formats/modes
SDRAM [Byte] 96-8p28, [ct] 97-10p298 newer DRAM format, SDRAM details
[ct] 98-8p184 PC100 SDRAM f 100MHz, [ct] 98-18p36 identifying DRAMs
[ct] 2000-17p166 SDRAM sizes and signalling
[ct] 2002-6p262 + 2002-8p228 DDR SDRAM interface
Rambus [ct] 2000-3p232, but also expensive
and legal attacks [ct] 200014-p34
types of PC memory [ct] 95-4p334, [ct] 95-11p354
[ct] 96-7p158 signals, [ct] 97-10p298 DRAM types, [PCW] 96-7p173
combining multiple DRAM chips onto a module SIP, SIMM
originally 36 pin 8 bit, use 8*1bit or 2*4bit wide chips
or 9 bit, use 9*1bit or 2*4+1bit wide chips
later 72 pin 32 bit, use 8*4bit or 4*8bit wide chips
or 36 bit, allways use 8*4+4*1bit
some 72 pin SIMMs have 2 banks of chips, common data lines (no 72bit)
a 8MByte SIMM may be 4*2Mx8bit or 2 banks of 8*1Mx4bit
with todays motherboards limited to 4 banks, max 2 such SIMMs poss
anec MITS Altair DRAM board reliability problems
some say general problems with early DRAMs, first generation
others say strict timing requirements ignored by inexperienced designers
bit decay due to radionucleids
[Byte] 92-3p145 Faggin birth microproc, [Raymond] "cosmic rays"
leads to parity checking, addit parity bit stored per byte, 9 bit SIMM
on reading parity regenerated and compared, not equal signals error
exa 74180 8->9bit parity generator/checker
486 even has parity generators/comparators on the processor chip
with 36 data bus pins and parity error out [Byte] 89-10ISEp70+p73
same standard on PCs with the IBM PC (mainframe manufacturer!)
in 1990s often victim of cost saving (requires add 1 bit RAM, 4+4+1)
anec parity emulators on "9" bit SIMMs, known as pseudo/placebo parity
[ct] 96-2p104 picture of GSM chip
RAM mimikry, recognisable by text GSM U.S.A., MPE41000J7, PAT.PENDING
yes this is even patented, claim to trick boards w no 8bit mode
but parity chips require less pins, would have an other number
not for reusing existing SIMM boards, as other wiring needed, cheat
or even error detection and correction (EDC), more bits, data recoded
[ct] 98-12p232 Error Correction Codes (ECC)
detection based on hamming codes, for correction use hamming distance
for implementing this there exists a special chip, 74ALS632
this is more expensive, only used in mainframes, minis, upper range servers
chips with extra pages, if few error pages remap them with laser
[Byte] 91-8p187 remapping, part of [Byte] 91-8p175 fault tolerance
memory speed and caches
memory speed vs processor speed [ct] 96-12p124
todays processor speedup is enorm, DRAM speedup is far less
exa 1975 1MHz vs 500ns, 1985 10MHz vs 150ns, 1995 100MHz vs 50ns
with mainframes this happend even earlier
processor speed increases far faster than memory speed
gives deminishing returns for speedup of entire system [PCW] 92-11p286
DRAM is the largest and cheapest, but also the slowest form of RAM chips
SRAM is fastest, but smaller, more expensive, uses more space and power
result memory speed prevents processor from reaching full possible speed
for faster memory access 2 DRAM banks, interleaving, hides RAS recharge
exa my 386DX16+CTI Linux BogoMips 2.87 -> 3.15 is +10% speed
exa Marios 486-33 board with 4 SIMM sockets
page mode and interleave use page interleave, alternate pages
this prevents mixed DRAM sizes in parallel banks, no 6 or 13 MByte
also prevents 2 interleaved + 1 noninterleaved bank, no 12 MByte
anec all Intel Pentium chip sets (Mercury, Neptun, Triton) no interl
Intels 486 Saturn chip set still had this, P6 Orion again has
anec this is easy to lose, exa my NeXT 2*4M*32+1*16M*32, 2/3 no inter
very disturbing, as the NeXT only uses 68040 8k L1 cache, no extern
requires reducing amount of memory accesses for instructions and data
with most programs a small amount of code runs the largest amount of time
this is called the locality of focus, also known as 10/90 rule
same applies to data, programs repeatedly use a small set of it
if this code/data is fast and rest slow this isn't so great a loss
put this code into small fast memory, rest in slower large memory
dynamic loading of code and data used recently into SRAMs for likely reuse
[Byte] 92-3p175 what to stash in a cache, mem and disk caches
[ct] 97-7p300 effect of processor cache size measured, *2 gives +15% speed
these small SRAMs are known as caches [Byte] 89-3p281, [Byte] 94-8p79
cache misses 1..10%, depending on cache to memory size ratio and program
caches can linder the speed problem but not solve it entirely
for large sparing data sets, use no cache, wide bus 4 or 8 times proc width
only a few small buffers for converting memory width to speed, exa Cray
processor allways assumes fast access, blocks its pipeline when slow access
full associative vs direct mapped vs set associative [CTI] p132
if set associative 2 way vs 4 way vs 8 way, even 3 and 6 have been seen
full assoc extreme set assoc (n way), direct mapped other extreme (1 way)
if not direct mapped a replacement strategy is needed, RAND, LRU, NUR
direct mapped is simplest (no replacement strategies), fastest (simple)
low associativity (or even direct map) can be substituted w large size
is a question of tag RAM address vs data size, today addr are cheaper
in PC motherboards direct assoc and 2 way set assoc are used
in the small on-processor caches sometimes higher set assoc are used
to reduce amount of tags combine continuous sublines to one line/set
this also increases hits because of spacial locality, already loaded
also uses nibble/page mode of DRAMs to load cache faster, 3-1-1-1 access
for addressing the tag RAM split memory addr [Byte] 94-8p82
byte address (bit 0..1), subline index/offset (2..n)
line/set index (n+1..o, not for full assoc), tag (o+1..p), 0s (p+1..31)
tag RAM tag, valid bits (1 per subline), LRU info (not direct map)
tag address bit min log2 of mem size - log2 of cache size, often 8
write cache write through (none) vs buffered/posted write (allways)
vs write back (only when a line/set reused)
write back needs dirty bits (1 per subline) in the tag RAM
only write the line back if the dirty bit is set
to save cost the dirty bit is often a missused tag bit
this reduces max mem size for a given cache size, double needed cache
or no dirty bit at all, use write through, loses ca 5% performance
on systems with other processors (DMA, IO Proc) cache coherency problem
accesses to DRAM by other proc must be prevented/corrected, use snooping
separate instr/data caches, Harward architecture (from Aiken Mark I in H)
vs unified caches, Princeton architecture (from von Neumann EDVAC in P)
vs large data cache and a small L0 instr cache, exa PPC 601
separate I/D caches prevent large data throughput crowding out instr
they also reduce the need for set associativity, 2*direct is near 1* 2set
note that Mark I had completely separate progr and data memory, not caches
Harward arch was significantly less flexible, disappeared until caches
multiple cache levels, intern+extern, even 2 intern+extern
for L1 normal caches on the processor chip, exa 68020+ [ct] 87-1p65, 80486+
for L2 and L3 SRAMs with burst mode, like burst-EDO RAMs
even pipelined burst (PB) SRAM, hides first addr transmit in burst before
on-processor L1 caches allow slower bus speeds than processor speed
allows freqency doubling or even multiplying
exa 68040 2*25 2*33, exa 486DX/x 50/2 66/2 80/2 75/3 100/3 120/3 133/4
anec on Pentium even fractional multiplyers, 90/1.5 75/1.5
Pentium ODP (P24T) 65/2.5 85/2.5
processor runs full speed but cache misses have bigger penalties
exa 486DX/2 +50..80% depending on amount of misses to be expected
exa 486DX/3 (named DX/4) even worse, DX/4 name from 2* cache, HW multiply
but the cache only reduces misses and HW multiply is questionable
caches also allow cut down external bus, saves RAM chips (fewer, larger ones)
exa Pentium board chip sets with single bank RAM mode (32bit)
slows cache reloading, 25..30% speed loss, only for lowest cost
a Pentium with 32 bit RAM is not much faster than a 486
anec same halved bus trick by 8086->8088, 386DX->386SX, 68000->68008
8088 BUI and slow miccod make 8 bit only 20% loss, not 50%
386SX with MS-DOS SW no 32bit ops, only 10..20% loss, 32bit SW 30..40%
68008 had no BUI, large instructions, resulted in 35..45% loss
anec empty cache chips, placebo/pseudo cache [ct] 95-1p24
test with BIOS cache on/off switch
Microprocessors
computer is data memory, ALU, instr decoder, program memory
instr fetch and counter, anec [ct] CPU instinkte
microprocessor is ALU + instr decoder + instr fetch and counter on one chip
basic structure of processor and memory the same
even the stepping from 16 bit to 32 bit, graph [Bell] p23
was a repeated mistake [Thacker] p273, [Thacker] p340 remark to Newell
complex logic gets large and expensive quite fast
ROM tables solve this problem so far as smallish combinatorical logic goes
if large amount on input, or sequencial is needed it quickly fails to do so
as logic (MHz) is far faster than most real world processes (over ms or s)
save logic by working an simple circuit in multiple steps
simpler programmable logic leads to using small computers for control systems
is analog to programming in vertical microcode, just more expressive
exa biomedical data analysis ARC vs TX-0 leads to LINC [Clark] p359
but tape ctrl in HW, not SW, save memory (SW more expensive) [Clark] p362
exa Dover printer controller 300+200(Alto) vs EARS 8*300 TTL [Thacker] p283
also Dover 1/2 Alto vs EARS 3 Altos [Lampson] p312
exa Busicom calculator 12*2000 transistors vs 4004 1900+mem [Byte] 85-9p210
microprocessors were originally designed as programmable controllers
embedded processors, name from being one chip microcode engines
exa Intel 4004, developed 1969, for desk calculator (Busicom), sold from 1971
[Byte] 85-9p209 evolution microproc, [Byte] 91-6p153 embedded sys, car ctrl
[Byte] 92-3p145 Faggin birth, [Byte] 96-12p69 25 years microproc history
[ct] 96-7p22 25 years microproc, 4004 chip photo, [PCW] 93-12p417
4bit CPU with Acc and 16 regs, max 4kx8 prg ROM, max 4*16(64?) RAM
instructions were 1 or 2 x 8bit, need 8 clock cycles per instr word
support chips 4001/2 RAM/ROM with built in IO and 4003 expander
then sold as single chip process controllers (November 1971)
one large use of 4004 being traffic light controllers, [Levy] p189
exa Intel 8008, developed 1970, for terminal (CTC/Datapoint), sold from 1972
4004 widened to 8bit, Acc + 8 or 16 registers, 14bit memory addr
total lack of documentation about this, unlike 4004 (first) 8080 (spread)
exa Intel 8080, from 8008 customer feedback, and later 8085 no aux chips
exa Zilog Z80 from ex Intel 8080 engineers, because Intel not focused on proc
exa Motorola 6800, and later 6809
exa MOS 6502 from ex Moto 6800 engineers, aiming at cheaper ($35 vs $350)
and later 28pin 6504/07 (with smaller address space, no 5 empty pins)
exa Motorola 14500, minimal, DIP16, 16 instr, just data logic and instr dec
no address, needs external IO multiplex/demultiplex and progr mem+cntr
exa Intel 8086/88/186/188 still mainly developed for control
80188 used in Ford ECC motor control system [PCW]
addition to microprocessors also specialised IO controller chips
2..3 port 8bit parallel IOs, exa 8255 PIO, Z80PIO, 6820 PIA, 6520 PIA
1..2 port serial, exa 8251 USART, Z80SIO, 6851
2..4 channel counter/timers, exa 8253, Z80CTC
combined function chips, exa 6522 VIA, 6526 CIA
combined with SRAM, exa 6530(6532?) RIOT
combination of processor with ROM, RAM and IO controller gives microcontrollers
exa 2chip F8 and 4040, TMS1000, 8048, 8051, Z8, 6805, 6811/12, PIC, AVR
[Byte] 88-8p239 8031/51, [Byte] 91-6p153
[PCMag] 95-4-11p83 Basic Stamp, small, simple, cheap microcontroller
first usually 40pin, 4*8bit IO, later larger 64/68/84 and smaller 8/20pin
small ones even built in RC clock and reset, save pins, variance no matter
biggest difference, appart from instruction set, is type of ROM
some allow external ROMs (exa 8051), or even variants w/o intern ROM (8031)
external ROMs costs using IO pins as bus (how many? AD0-7 multiplexed)
one chip (which?) is/was avail DIP40 600mil w DIP24/28 300mil socket on top
today embedded processors are still the most numerous microprocessors
[Byte] 93-5p213 embedded comp in cars, [Byte] 93-7p69 data aquisitio comp
[Byte] 97-6p85 embedded systems with Internet control
[ct] 97-4p124 electronics in cars, environment impact
[ct] 2000-5p118 embedded cpus in cars, [ct] 2000-23p270 RTLinux
count processors where you live and where you work
count processors in typical desktop PC
main vs printer, modem, keyctrl, keyb, mouse, SCSI/IDE HD/CD-ROM
in 2000 manufacturers expect 200 processors/household
[Byte] 91-6p158 Echelon Neuron chip
[Byte] 94-9p67 itty-bitty processior (IBP), Basic Stamp with PIC16C56
[Byte] 94-12p217 IBP COS program and 95-2p18 letter
anec forecast 10 processors per person has come true, the critics erred
only later were microprocessors used as CPUs for small computers
[ct] 99-26p74 computer history
exa 8008 Mark-8, Scelbi 8H
exa 8080 MITS Altair 8800 (1975) [Byte] 85-9p201 [Byte] 90-9p370, [Levy] p187
exa 8080 Sol (1976) typewriter keyboard and TV video interface [Levy] p241
exa 6502 Apple I, II (1977) keyb, video, Basic [Byte] 85-9p202, [Levy] p244
history of its design [Byte] 84-12pA67 and 85-1p167 Woz interview
1978/9 disk controller, DOS and disk Basic, base of VisiCalc success
exa 6502 Commodore PET (1978) [PCW] 95-8p593
built in monitor and tape, IEEE for disk and print
exa 6502 Atari 800 (1978/9 [Byte] 85-9p203) sprites, sound, joysticks
exa 6502 Commodore C64 (1982 [Byte] 85-9p205) first colour computer for $600
[Byte] 94-8p252 R.I.P. Commodore 1954-1994
exa Z80 Sinclair ZX80, ZX81, ZXSpectrum
ZX81 as solder yourself kit first computer under $100
micros were the result of cheaply available microprocessors
hobbyists usually only had timesharing over borrowed TTYs
one must have an account, it is expensive to use (phone line)
they wanted cheap single user computers [Levy] p246 Woz
later business users found local power of micros superior to centralism
used them to get out from under MIS departments, gave micro revolution
get away from application backlog, MIS unresponsiveness
this supprised the microprocessor inventors, [Levy] p189
anec but Intel marketing used computer image in Nov 71 ad [Byte] 85-9p199
therefore micros repeated existing designs, played catch up
first raw processor, then interactive, then CLIs and even timesharing
lead then to making fitting specialised disk, video, network controller chips
anec Faggin (4004/8008/8080/Z80 developner) sees this as
4004 grew to microcontrollers, 8008 grew to microcomputers
Programmable Logic Devices (PLDs)
many types PLA, PAL, PALV, GAL, EPLDs, CPLDs, LCAs/FPGAs, CALs/SoGs
[Byte] 90-1p271 custom chips, EPLDs, [Byte] 91-9p88IS55 Algotronix
[ct] 89-11p196 PLDs, ASICs, [ct] 97-13p146 FPGA based motherboards
[ct] 98-4p98 FPGA processor, [ct] 99-21p282 reconfigurable logic
[ct] 2000-17p202 reconfigurable, [ct] 2000-22p294 open source hardware
RAMs, ROMs, microprocessors (and their IO controllers)
all were large volume standardised parts, allowing going to large chips
but rest of glue logic stayed with TTLs, majority of chip count on board
exa my 1988 286-12, TTL about 50% board space, 25% large, 25% connectors
despite each chip cheap wiring/holes/power/space becomes cost factor
and driving signals from one to the other also speed limiting factor
(P)ROMs allow using memory tables to replace complex combinatorical logic
usefull for instruction decoding and control circuit stuff
but each additional PROM input/address line requires doubling of memory size
is because memories are designed for minimal address lines for max space
also large chips are fast enough for microcode, but not for address decoders
microcontrollers solve inputs and complexity problems
but are even far slower, factor 100s or 100s, even relative to (P)ROMs
programmable logic array (PLA) chips
allow more input lines with less transistors, by not fully decoding
NOT-NOT then prog AND array then prog OR array (NAND-NAND), (2I+O)xP size
each P line is called a product term, because AND=product, OR later then sum
size P is not externally visible, and varies for each type
looking once 30min at a Signetics/Philips databook gave impression P=~4
because of many inputs and small/fast, particularly good for address decoders
exa C64 PLA 16 I + 8 O + /OE (for invert tristate buffers) + FE + VCC/GND
assuming P=4*O: (2*16+8)x(4*8)=40x32=1280bit, PROM would be (2^16)x8=512k
PLA control bits programming by address input and data bits not possible
as no complete address decoder, so 2nd small PROM address decoder
looks like an Px(2I+O)bit PROM, above example 32x40bit small
because this dual access (PROM write/read and PLA 2nd read)
fuses not direct in logic path, instead wire to ground, like DRAM capacit
for driving the PROM side internal addr generators, enter data serially
shift register with 2I+O data bits, and lb(P) address bits
programmable array logic (PAL) chips
[ct] 90-9p240 and 90-10p366 GAL progr, [ctk] 89-12p383 PAL/GAL
only AND (first NAND) array progr, no OR (second NAND) array as hardwired
gives even more speed, as no 2 arrays to traverse, 1 replaced by simple OR
because fixed wired ORs, 8 productterms each, cost of more bits, 2I*8O size
20pin 10H8(10i,8*8o), 12H6(12i,4*8+2*16o), 14H4(14i,4*16o), 16H2(16i,2*32o)
all use an (2*8)x(8*8)=2048bit array, slightly more than PLAs
same also 10L8, 12L6 14L4, 16L2 low active out, good for generating /CS
seldom also ??P? versions, with programmable polarity, 1bit and XOR gate
even more seldom ??X? version 8 OR terms -> 2*4 OR terms and then XOR
24pin same combinations, same outputs, just +4 inputs
I have seen conflicting claims of 8, 9 or 10 terms per OR in these
consequently (2*20)x([8|9|10]*8)=2560|2880|3200bit array sizes are given
then "complex" 16H8, 16L8, 16P8, 20H8, 20L8, 20P8 with 10|14i,6i/o,2o
allow feedback of 6 outputs without using up another in pin
can also set 6 i/o pins to in or bidir per TS gate, from 1 term, only 7OR
then "registered" 16R8, 16R6, 16R4, 16RP?, 20R[P]? for sequencial stuff
are similar to [16|20][HP]8, with 8|6|4 outputs having an FF/Register
use dedicated CLK and /OE pins (not terms!), because this 8|10i,8i/o pins
also later large 32R16 and 64R32, but only once seen reference to them
I assume they are (2*32)x(8*16)=8192bit and (2*64)x(8*32)=32768bit sized
anec I once hat plans to make an small microprocessor of an 64R32
but 32bits registers too small for this, I did non know of bitslices
also assynchron clockable 24pin 20RA10, [Tietse] p307, Lattice datasheet
(2*20)x80bit, 10i,10i/o (first 20pin w 10o) with each 4OR+reset+set+clk+/OE
has like P types invert XOR, like R types global /OE (ANDed with term /OE)
select combinational/seqencial Mux (so no need 10|8|6|4) and reg preload
and global FF preload pin (data from output pins)
then flexible macrocells (MCs) 24pin 22V10, [Tietse] p308, datasheets
11i,1i/clk,10i/o, w 2*8+2*10+2*12+2*14+2*16 OR, comb/FFs select, invert
/OE from array (addit term), feedback before TS outp so allways available
common FF set+reset from term, common clock from pin 1 (also in array)
because of this quite large (2*22)x((10*(12+1))+2)=5808bit
later size variants introduced 18V10 (20pin 8i,10i/o, 10*8ORs)
and 26V12 (28pin, 14i,12i/o, 8*8+2*10+2*12ORs)
then cost reduced flexible 16V8 and 20V8 PALs, standard array sizes, 8*7|8OR
can simulate all H, L, P (are P) with 7OR or 8OR, and R, RP (8OR) types
due to per-OR comb/FF select and /OE hard/term/pin select
and device-wide "input shift" for [10|14]i,6i/o,2o or [8|12]i,8i/o pins
addit to PROM also CMOS versions EEPROM based (PALCE), from now on standard
PALs went directly from PROM to EEPROM cells, no UV EPROM and window cases
extended programmable logic device (EPLD) chips
combinatorical PALs need many inputs, to make sense (else use PROMs)
with registers being outputs and (internal) inputs, less only-inputs needed
leaves more room for more outputs, and registers, for counters, state mach
with more registers, or even input registers, burried registers
Altera EP610/EP910/EP1810, invert, comb/FF, term reset, pin/pre-TS input
/OE term|hard with common term+mux global|term clk, 1 global per FF block
610 24pin 4i,2c,2*8i/o, 910 40pin 6i,2c,2*12i/o, 1810 68pin 6i,4i/c,4*12i/o
Lattice PALCE610 shows spilt n-OR + 2nd 2nd (8-n)-OR, for J+K or S+R mode
second programmable inverter for this OR uses up feedback|in-Mux
610 array shown (2*20)x(16x10)=6400bits, assume 910 (2*36)x(24*10)=17280
Lattice G6001, 10i,1i/clk,1clk,10i/o, inv, comb/FF, res, sep /OE, sep Clk/En
8 addit "burried" FFs w/o out pin, also 20 addit FFs in i and i(/o) lines
these are PLAs not PALs, AND 10i+10i(/o)+8FF+1i(/clk) -> 64
OR then 64 -> (10(i/)o+8FF)*2 (FF D in + Clk/En)
in addition AND-only 10 /OE signals and 1 reset
array(s) size (2*(10+10+10+8+1))x(64+10+1)+64x(2*(10+8))=5229bits
variant G6002 with each input cell FF separate config and 2-3 higher speed
Lattice PAL29M16, 24pin 5i,1clk,2*8i/o, 1i as 2nd clk, 1i as /OE
8*8+4*12+4*16ORs, FF D either from OR/input, output comb/FF, invert
1 global term each for reset+set+preset+observe
clk from clk or i/2ndclk, and with invert, /OE pin or 4*4FF each 2OR
feedback 4*12+4*16 term post-FF or pin, 8*8 term both post-FF and pin
array size (2*(5+8+2*8))x(4*16+4*12+8*8+4*2+4)=7896bits
assync variant PAL29MA16, 24pin 5i,1clk,2*8i/o, 1i as /OE, but no 2nd clock
20RA10-like -4 terms per OR, used for per-output reset+set+clk+/OE
Atmel ATF750, 24pin 11i,1i/clk,10i/o like 22V10 2*8+2*10+2*12+2*14+2*16 OR
comb/firstFF select, invert, /OE from array, but sync common preset
2 FF/out terms split 2*6 (first can all), each separ clk and assync reset
if first FF does not need all terms, can use second FF as burried FF
feedback 3 lines (input + 2FFs beforeTS), (2*(12+3*10))x(10*17+1)=14364bits
superset ATF2500, 40pin 13i,1i/clk,24i/o, (2*(14+3*24))x(24*17+8)=71552bits
same 2FF/out, sep Clk and reset, term split and mergable, 3 feedback
but always 12term/out, split 3*4 pin/FF/FF, 4*2+4*4 group sync preset
also Atmel 1500, 44pin 4i/clk/etc,32i/o, array 2*(32*2+4)x(32*5)
5 terms in OR and also as /OE, FF-D, XOR, reset/set, clk/clken terms
also per 16FFs 1 term/FF feedback = 16 extra array columns, cascade
1FF/out, pin input + separate comb/seq mux input, is CPLD with one array
nice powerfull chips, but come with many problems, making them useless
problem each vendor theor own ones, no standard, single/few source chips
as fairly old designs, will disappear, displaced by the newer CPLDs
all Lattice datasheet have "use GALs for new designs", but no equiv GALs!
problem with badly/not documented bitmaps and/or loading procedures
no open source tools, bits could be reverse engineered from bitmaps
but without knowning how to get them in that is useless anyway
complex programmable logic device (CPLD) chips
in PALs linear IO increase produces square (2I*8O) array size increase
PLAs fare the same if we assume P/O as constant, just perhaps 50% smaller
square growth (*2x2 /3J) of Moores law is reduced to linear in/output count
burried FFs are equivalent to in/outputs, so FF+pin growth is so limited
and the larger chips get, the more complex logic wants more burried FFs
as there is no need for all outputs to be derived from all inputs or FFs
split array into multiple constant-size partial arrays, linked together
EP1810 is part of EP610 and EP910 series, same features, but early CPLD
global/local arrays, glob 4*(3i+1clk/i+4i(/o)) and local 4*(4(i/)o+8i/o)
sort of 4 12i+4clk/i+12i/o PALs in one, with i+clk/i+4i/o (i only) shared
and the 4*4i/o having both i (to global) and o (only local) feedbacks
assume 4*[g(2*8)x(12*10)+l(2*12)x(12*10)]=19200bits
not much more than 910s assumed 17280, but double outputs, 3/2 i/o
CPLDs split into blocks (usually 16i/o) with internal "inputs", called LABs
and interconnect between all in pins and outputs, and these "inputs"
constant array size adds up linear with pins, only interconn grows square
as interconn can be sparse array, smaller, until large chips, ca 256 out
smaller array allows all pins i/o, no i-only, few global i/clk/oe/res lines
smaller array allows 2-input (in + feedback), out/FFs of in pins as burried
smaller array and fewer terms/out (because most outs are simple)
and then allow merging outs for few for those outs that are not simple
smaller array and fewer terms/out allow more outs than pins
with the rest of outs being burried, same chip in multiple cases
Altera MAX3000 [2|4|8|16]*16i/o+4i/clk/oe/clr, arrays ((2*36)in+16sh)x(16*5)
5 term/out, expandable 1term/out back to array, and 3*5 up neighbour terms
XOR term, FF w clk/clken/set/clr muxes global/terms, /OE 0/1/6global/OC
PIA [2..16]*16 out feedback + [2..16]*[4..16] in + global inputs
MAX7000 [2|4|6|8|10|2|16]+16i/o+4i/..., in via FF mode, [8..16] in to PIA
Atmel 15xx [2|4|8|16]*16i/o+4i/clk/oe/clr, arrays ((2*40)in+16sh)x(16*5)
cascade extra terms, XOR/set/rest/etc use form 5 terms, 8..12 pins per 16FF
Cypress 7C34x [2|4|8|12]*16i/o18i, arrays inputs not documen, PIA from in+out
array 8 glob in terms, from out, 3 term/out + XOR term, 32 expanders per 16
Cypress Flash370 totally differ [2|4|8]*16i/o+1i+4clk, arrays (2*36)x(80+6)
PIM from FF+in, prod term alloc 16 from 80 for each out
6 other terms = 16FFs set+res, 2*2 for each 8 out /OE
some models only 1i/o per 2FFs, use 2nd FF for i, only 1.5 PIM term per FF
Ultra37000 [2|4|8|12|16|24|32]*16i/o+1i+4clk, largest single-PIM CPLDs
allways 1 i/o per 2FFs, 1.5 PIM term per FF, some LABs no pins at all
Lattice 1000 [2|3|4|6]*(8*4i/o+21)+4clk, arrays (2*(16rout+2dedi))x(4+4+5+7)
OR-blocks ORed for out, 1 term removed for XOR, FF w clk/reset term/pin
only 1i/o per 2FFs, i own FF, out selectable from FFs, /OE term/global/OC
2000 [1|2|3|4|6]*(8*4i/o+2i)+3clk+2oe, 1i/o per FF or 2FFs, i no own FFs
3000 [5|6|8|10|14]*4*(2*4)i/o+5clk+2oe, arrays (2*24)x(2*??), 1i/o per 2FFs
5000 [4|8|12|16]*32i/o+4clk+2oe, arrays (2*68)x163, 1i/o per FF
Xilinx XPLA XCR5xxx [2|4|8]*16i/o+2clk+2clk, arrays (2*36)x(6+16*5+32)
ZIA from in+out, 5term/out PAL + 32term PLA + 6 LBglob, FF LBglob clk + P/R
Xilinx XPLA3/Coolrunner XCR3xxx [2|4|8|16|24]*16i/o+2clk, arrays (2*36)x48
terms all 48 PLA, also 8 foldback, 8 LB global, 16 VFM, 16 FFs
ZIA from FF|in+FF|comb, and also in->FF mode
VFM PLA|1term|AND|XOR and inverted of these, clk/clken/rst/pst term|LB|glob
Xilinx XC9500 [2|4|8|16]*18(!)i/o+0(!), arrays (2*54)x(18*5), PIM from FF+in
XOR term, FF w clk/clken/set/clr muxes global/terms, /OE 0/1/4global+inv
cascade up and down neighbors, for this 2nd OR, separate local + cascade
normal CPLDs go up to 256i/o, seldom more, above this interconnect dominates
gives again only linear i/o growth with square chip size growth
lead to various split interconnect techniques, all only single vendor
dominant reason for using these large sizes is not any more pin count
but rather large amount of burried FFs, high density macrocell count
for complex state machines, or even custom parallel data paths
this lead to designs with pins dissociated from the macrocells
Xilinx XPL2 XCR3xxx, dual level interconnect ZIA->L(local)ZIA+G(global)ZIA
arrays and pins to/from LZIAs as usual, LZIAs to/from GZIA each 64 lines
[(4*4)|(6*8)]*20(!)i/o, same arrays + FFs as XPLA, not made any more
for high density and speed, SRAM based, need to boot from (P)ROM
side effect of this is that loadiing is documented, unlike EPLDs/CPLDs
Altera MAX9000 row/column interconnect, arrays conn only those in same r/c
array in from horiz buses, array out to vert or horiz, vert->horiz link
this row/column structure is ideal for large bus structures
([4|5|6|7]ROWx5COL)*16MCs, arrays (2*33in+2*16feed+16sh)x(16*5)
same FFs as MAX5000 or MAX7000, but no in via FF, instead direct term FF
all i/o and /OE out-FF stuff connects to buses, not to arrays/MCs
[4|5|6|7]*2*8(row)+5*2*10(col)i/o+4i/clk/oe/clr
Lattice 8000 row/column interconnect, vert routing, horiz tri-state buses
use of tri state buses is even better for bus structures
[5|7|9]*((2x3)*20)MCs, arrays (2*44)x(80logic+2ioctrl)
all i/o on routing and buses, ([5|7|9]*2*12vert+6*2*12horiz)i/O+clk/etc
Cypress Delta39000 row/column interconnect, of PIMs of LABs
8*16 local block cluster, w each 72 out to and 64 in from vert and horiz
[2x1..7x6]*(8*16)MCs, arrays+FFs as Ultra37000, but w added carry logic
in-PIM 2 1kx8bit SRAM, per PIM on-bus 512x8bit DP-SRAM/FIFO
all i/o and /OE out-FF stuff connects to buses, not to arrays/MCs
for high density and speed, SRAM based, need to boot from (P)ROM
also all of these every vendor diff parts, not standard, single source parts
so this requires using part-independant VHDL or Verilog coding
none of these bits or load documented, and very complex to reverse engineer
so no chance of ever getting open source tools for these either
logic cell array (LCA) / field programmable gate array (FPGA) chips
even large CPLDs still allow too little internal logic before size snowballs
do not offer enough size for fully grown custom chip designs
better an chip that allows logic to grow like full customs or gate arrays
for this array of small logic cells (=LCA), all same size/content/ability
and connect these using an infinitely growable routing, segmented
result is lookup tables (LUTs), basically small PROMs/SRAMs, for gates
in worst case cascade multiple cells, F5-Mux, wide-Logic, etc
LUTs always paired with FFs (so large amount), and separate from i/os
while PAL/CPLDs used mainly for random/glue logic in microcomp, exa TEK 4/8
larger FPGAs can even be used for soft processor, exa xr16, Msl16, PDP-8X
or even for entire System on Chips (SoCs), soft PCs, exa C-One
Xilinx CLBs with 2 or 4 or 8 FFs, interconnect single/2/4/long lines, TBUFs
2000/3000/4000 CLB 2 LUT/FF vs Virtex 4 vs VII 8, from 4000 DP LUT RAMs
routing XC4000 1/2(/4) vs Virtex 1/6, IOBs v-ring, TBUF, Virt dedicated clk
Atmel 40k single FF with pair of 3LUTs and MUX, from 6000 Mux system
Altera MAX9000 style row/column interconnect with LABs with 8/10 LUT+FF MCs
cellular array logic (CAL) / sea of gates (SoG) chips
also called fine grain FPGAs, because of more even smaller cells
chip is array of cells with each 1 input from and output to each neighbor
so just 4 inputs to be mapped to 4 outputs, and simpler logic element
Algotronix CAL1032 32x32, Xilinx bought them, CAL2/XC6200, Atmel 6000
based on hard wired 2:1 Muxes with selection of 2 or 3 inputs to them
various open source FPGA-in-FOGA and FPGA-in-gatearray are all SoGs
as only progr logic family since PALs fully documented, incl bitstream format
researchers prefered these, but no commercial success because slow
killing single source XC6200 forced Xilinx to offer JBits and later XDL
Registers and ALUs
drawing data as binary, octal, hex [Raymond] "hexadecimal"
ALU computation, logic function + carry propagation
so acts as logic function gen with carry off, as add/sub/etc with carry on
technologies parallel ALU with flip-flops (relays or tubes), exa ENIAC
or serial ALU with flip-flops, magnetic drums, mercury delay lines
exa Billing G1a (1952, magnetic drum calculator) [ct] 88-10p110
exa Wilkes ElecDelayStoreAutomCalc (1946) [Salus] p17
anec complexity of multifunction parallel ALUs lead to chip designers
to being first users of CAE/CAD/CAM techniques, exa chip layout routers
data formats
[Dewar], [ctk] 87-3p203 Zahlendarstellungen, [ctk] 88-2p203 Zeichensaetze
decimal vs binary vs BCD
exa Babbage AE (18??) [Raymond] "engine", [ct] 89-1p114, [PCW] 91-9p142
failed because of chosing the wrong technology (decimal representation)
story of backers dropping, they lossed belief vs he critic them [Zopfi]
exa Zuse Z1 (193?, mechanical, tape programmed) [ct] 89-3p232
[ct] 2002-11p58 Zuse small history, [ct] 2002-20p100 last running Zuse 22
success with binary represetation of data and program
the mechanical technology used was available to Babbage in 19th century
exa 8080 (DAA), 6502 (Dflag), 80x86 (DAA|S), 680x0 (A|SBCD), RISCs (none)
signed binary values
signbit+unsigned, 1s complement, 2s complement
bit formats not just relevant to Assembler progr, have effect even in HLLs
signed numbers diff reaction [Raymond] "HAKMEM" 154 negative numbers
anec graph.c using signed int gave wrong address calculation problem
register layouts
accu and regs, exa PDP 8 (few), 8080 (1+3*2), 6502 (few)
reg file, exa PDP 11 (8), 80x86 (irreg), 680x0 (8+8), MIPS (32), PPC (32)
reg windows, exa SPARC (8+7*16)
reg stack, exa AMD 29000, AT&T Hobbit/CRISC, picoJava [Byte] 96-11p79
stack, exa T800 (3 in proc and workspace in mem), NC4000
Addressing Memory
memory has greater capacity than registers, needs selection which to use
unlike registers where a few can be programmer selected and stay constant
memory often "walking" through data, need to compute address
addressing modes [Dewar] p28, [ctk] 87-6p183 Adressierarten
short immed, short direct, register indirect, reg indir+incr/decr, stack,
base (reg+const, frames), index (const+reg, array), base+index (r+c+r2),
mem indirect, indir+index, base+indir, base+indir+index
indir addressing (called index registers) appeared first MADM [Salus] p17
exa PDP 8 (d/i) [DEC1] p3-8, PDP 11 (8), 8080 (few), 6502 (many)
exa 80x86 [Dewar] p80, 680x0 [Dewar] p183
exa MIPS [Dewar] p273, SPARC [Dewar] p316, [Byte] 91-4p295
exa PPC [Dewar] p393, T800 (few)
exa PDP 11, 680x0, RISC any reg autoincr vs 80386 special SI/DI registers
the optimal selection of modes is program and programming language dependant
assembler programmers/2GLs and control systems prefer simpler modes
HLLs/3GLs/4GLs and complex data structures prefer complex modes
address width, addr memory size, main driving force for wide memory
data width > addr width for single-cycle loading, 8 vs 16 vs 32 vs 64 bit
8 bit allwas 2 byte = 64k addr, 32 bit 4 GB addr, 64 for unlimited
16 bit problem, 1 word = 64k vs 2 word = 4 GB vs something in between
process size min 1M, below is hell, exa 64k [Bell] p11
Alto 128k hampered SW [Thacker] p273, most serious deficency [Lampson] p295
64 bit computing for more than 4 GB, processor widths
[Byte] 91-9p135 list of bit widths of processors
processor designs with too smaller adresses, main, mini, micro, repeat
address space expansion
is basically mapping an short address to an longe one
needs to be simple to prevent slowing down computer
and preferably not too much work for the programmer to use
exa PDP-8 12->15bit expansion, 8 memory fields
2 3bit registers for direct (code, vars) and indirect (arrays) fields
exa PDP-11/45, PDP-11/70 split instructions and data mode
program code is only accesed via instr ptr, data by all other addr modes
this allows 2 separate address spaces for instructions and data
this increases the available address space from 64k to 128k
cross segm load/store w M[TF]P[ID] (move to/from prev instr/data) instr
comes from split I/D being a side effect of PDP process mechanism
anec hardware correction of MFPI instr for Unix nargs.s [Salus] p135
split I/D is also used in the Intel 8051 microcontroller
exa Intel 8086/8088 20 bit addresses, max 1 MByte memory
2*16 bit segment+offset, CS/DS/SS/ES allow using 256k without reloading
each segment has still only 16 bit addresses, is 64k small
results in lots of 64k or even 32k limits
in MS-DOS software, exa COM programs, NC editor
in Windows, exa resources running out, kernal and GDI internal segments
exa progman black icons disease, Notepad editor
exa Winword 1.x bitmap graphics include
graphics from plot program not fitting in if bigger than 37.58 cm2
8086 was intended as a small upgrade to the 8085, 8088 cut down bus
intended as interim until 32 bit 80432 ready [Dewar], [Byte] 89-12p377
expansion of irreg 8085 instr set forced Intel on inefficient CISC path
anec the 432 was a propper 32 bit processor, a typed pointer system
was expensive (2 chips), slow integer calc, not PC compatible
it failled badly [Byte] 96-12p80 microprocessings Edsel
designed before PCs became important (8086/8 1978/9 [Byte] 85-9p213)
was before PC revolution, even the Apple II was then only hobbyist
aimed at control systems, real descendants 80186/188 in Ford ECC [PCW]
only IBM (and cloners) used it for PCs, only relevant because of IBM
attempt to overcome this lead to LIM/EMS [Byte] 88-2p243
but the 8088 is too slow for more than 1MB memory anyway
better would have been standard access to the 286s protected mode
80286 was intended as small upgrade to 8086 for IBM, but still 16 bit
replaces segments with selectors and descriptors
segment registers with selector registers and descript caches
[Byte] 85-10IIPp93 8088 vs 80286, [Byte] 86-10IIPp123 80286 prot mode
[Byte] 89-12p377 protected mode
backward compatibility with badly written 8088 software prevented
using the better segmenting mode when it appeared on the 286
result 286 and above stay limited while in real mode by MS-DOS
anec the 286 segmented memory system came from the 80432
only with 80386 did Intel take the 80x86 series seriously, made it 32 bit
by then damage of the lousy architecture had been done, irreversible
anec "the 386 is the first sensible processor from Intel"
anec 386 was introduced 1985, but 1995 still not proper use by Windows
anec before indirect addressing programs had to modify memory access instruct
this was possible because of von Neumann "code is bits is data"
this gives self modifying code, SMC, is actually runtime finalised code
SMC was faster than indir on some machines, Mel never indirect [Raymond]
anec indirect addressing mode used for special effect [Raymond]
address incremented past last address, alters instruction part
SMC reappeared on early microproc because they were designed for ctrl sys
these don't use indirect addressing, so those modes were not in instr set
also lack of in or out instructions with variable addresses on 8080
forced MS Basic to modify code for INP and OUT commands at runtime
anec memory cells were still called registers for a long time
[Ross2] p72 only 5 registers left, [Clark] p359 TX-0 8192 registers
already in these days memory size was more limiting than proc power
Addressing Partial Words, Byte Addressing
on wide word machines (16..64) mult small data pieces are packed into one word
working on them requires shifting and masking operat in addition to reading
writing requires first reading, inserting (ma,ma,sh,or) then writing
the most common case of packing is packed characters
memory words are cut into subunits called bytes, usually 2^n of them
[Wexelblat] p398 origin of word byte, [Byte] 95-2p20 history of word byte
all the same size (6..9 bits)
note that bytes are not octets [Raymond] "byte", [Libes2] p179
since IBM 360 (32 -> 4*8) this is assumed by many
but PDP 8 (12 -> 2*6), PDP 10 (36 -> 4*9), CDC 6600 (60 -> 10*6) [Dewar]
word subunits must also be extracted to be used
on some systems this is helped by special extract and insert instructions
exa PDP 10 on any bit boundry [Raymond] "LDB", [Raymond] "DPB"
exa PDP 8 only on char borders, exchange 2*6 bits [DEC1] p3-12 BSW instr
on PDP 11 despite byte addressing also instr, SWAB [Raymond] "swab"
on many machines addr are split into word addr and byte subaddr
byte addressing is in all CISC processors and some RISC
but not AMD 29000 [Dewar] [Byte] 95-1p225, NC4000 [Ting], Alpha
word address is used as usual, byte subaddr selects which byte is desired
bottom addr bits decoded, multiple RD/WR lines, one for each byte
depending on whether word or byte access is desired use diff instr codes
for full word access the byte subaddr bits are not needed, access with <> 0
complicates Fortran COMMONs, Cobol records, but Pascal/Ada none
gives access missalignment problem, handled by [Dewar]
drop bottom addr bits (RIOS), error trap (SPARC)
split fetch instr (MIPS, [Dewar] p298), emulation trap (PPC)
auto dual fetch (80x86, 680x0), shift addr (Transputer)
anec Transp C cast operator gen shift instr [ct] 97-10p180 instr set
anec K&R remark about C pointer conversion [Kernighan] p111, [Dewar] p22
malloc returns a char pointer, but int alligned [Dewar] p22, [Libes2] p42
anec files with records of diff lengths pose the same problem
exa father QB double and single floats
subaddress bits using big or little endian numbering of bytes
[Dewar], [Libes2] p117, [Plauger3] p2, [Wall] p414 and p427
[Raymond] "bytesexual", [Raymond] "big-endian"
[Raymond] "little-endian", [Raymond] "middle-endian"
text reading from left to right leads to byte numbering l to r, big endian
lead to numbering bits left to right, big endian [DEC1] p3-6 memory organis
big endian is used by mainframes, exa IBM 360/370/3090/ES9000
anec byte addressing was invented by IBM for its Stretch
by many minis, exa PDP 8, PDP 10, IBM 34/36/38/AS400
and a few micros, exa TI 9900, anec TI RAM/ROM chips bits docum big endian
DEC for first byteaddr system (PDP 11) chose little endian, reason unknown
same also used for VAX, MIPS in DECstation, but not on Alpha (no byte addr)
this choice of little endian gave them many problems
PDP 11 disk controller storing bytes the wrong way round [Dewar] p79
Ethernet and TCP/IP specify big endian, same problem
is one of the reasons for many ASCII byte oriented net protocols
later 32 bit data lead to mixed endian data (byte 1-0-3-2)
32 bit data not identical on 16 bit (PDP) and 32 bit (VAX) machines
anec Unix ported from PDP 11 (little endian) to IBM Series 1 (big endian)
both byteaddressed 16 bit, but reversed [Libes1] p10
gave swap (UN)(IX)->(NU)(XI) [Raymond] "NUXI problem"
Intel 4004 was conversion of a shift register calculator, serial ALU
[Byte] 92-3p145 Faggin birth microproc, [ct] 95-7p22 picture, [Dewar] p78
1 bit at a time ALUs with shift regs lead to little endian bit numbering
discovery of of bit 0 = 2^0 .. bit 3 = 2^3 reinforced this numbering
anec microprocessor users assumed IBM (big endian bits) is wrong as usual
Intel 8080 for 16 bit addr calculations does 2 8 bit calculations
instead of splitting words into bytes, multiple words/bytes to an address
for sequencial calc low byte first, leads to little endian, like DEC
DAD rp does L=rpl+L, then H=rph+H+carry [Zaks] p80
anec 8080/Z80 aux/half carry flag for DAA lead to 4 bit ALU claim
therefore lower numbered 8 bits of an addr are in lower numbered byte
same MOS 6502 address increments/offsets adl+1/offset, if carry adh+1
anec 6502 jump indirect bug, no if carry on second address increment
is essentially a jump followed by an second implicit jump
Intel 8086 (semi compatible w 8080) 16 bit mem stayed with little endian
Motorola 6809 (and 6800?) was big endian bytes, bits docu little endian
Motorola 68000 is mixed endian, like 6809
anec single bit vs bit field instr problem [Dewar] p171
some RISC processors have switchable byte endianness
exa MIPS [Dewar], PPC [Byte] 95-9p263
bit endianness as most of them no bit extract instr is only doc convention
is usually little endian, also therefore have 680x0 confusion
anec MIPS in big endian mode one more instr for flag extract [Dewar] p281
because flags in C are represented by lowest bit, from PDP 11 convention
anec little endian bytewise memory dumps are difficult to read
most important byte appears as last one, multibyte bit fields get split
even worse in the actual bytes the most important nibble is first
list from right to left, arabian notation [Byte] 86-10IIPp233 mem manipulat
CP/M DDT and MS-DOS debug doesn't do this, despite home on 8080/8088
both copy the display format of IBMs mainframe dump program, big endian
Unix od swaps groups of 4 bytes, good for longs, but even worse for chars
Instructions
[Byte] 87-4p143 instruction sets, [Byte] 88-5p213 CPU wars, how instr sets made
[Byte] 89-2p229 personal workstations and RISC, [Byte] 92-1p305
[ct] 87-1p54 VAX78032/68020/32332/80386/V70, [ct] 89-6p128 Prozess Steckbriefe
[PCW] 90-3p136 R/EISC, [PCW] 93-2p338 RISC, [PCW] 94-4p464 architectures
computers grew out of automatic (= programmable) calculators
computers differ from calculators, they don't just compute, they process data
is more, includes progr behaviour dependant of data, requires progr control
exa Turing AutomCompEng (1946, true comp, only design) [ct] 88-3p100 Turing
exa von Neumann ElecDiscreteVariableAccumComput (1947, running) [Salus] p16
difference between progr calculator and computer is stored program in memory
can be manipulated as data, is read by programmable mechanism, flow control
to tell processor what to do the programm consists of series of instructions
for fetching instr from memory use a register containing address of instr
program counter (PC) or instruction pointer (IP) even next instr (NI, Tr)
I will use IP, is propper, also avoids confusion with personal computer
instruction types
move data (r-r, m-r/r-m, m-m)
exa PDP 8 (m-a), PDP 11 (r-r+m-r+m-m), 8080 (r-r+m-r), 6502 (m-a)
exa 80x86 (r-r+m-r), 680x0 (r-r+m-r+m-m), RISC (r-r+m-r)
ALU (add/sub/mul/div/neg/carry, inc/dec, and/or/xor/not, shift, bit set/res)
mul/div only on complex processors, exa PDP 11, 80x86, 680x0, MIPS
some intermediate have mul step, exa SPARC or even div step, exa NC4000
program control (jmp/jsr/ret, bra/skip/test/flags)
these instructions modify the IP, give computers their flexibility
processor control (nop, halt/reset, irq/trap, modes)
instruction sets
separate memory access and ALU (RISC) vs combined instructions (old&CISC)
addr modes long immediate (IP+autoinc), long direct (IP+autoinc+indirect)
instr bits for many registers (exa 8080) vs many addressing modes (exa 6502)
acc+1reg (8080, 6502) vs 2reg (PDP 11, 8086, 68000) vs 3reg (most RISCs)
once comp had 3 addr in instr, disappeared when cores [Hopper] p21
instructions must fit into opcodes, instr formats [Byte] 88-5p213 CPU Arch
exa PDP 8 (1*12), PDP 11 (1/2*16), 8080 (1-3*8), 6502 (1-3*8)
exa 80386 (1-n*8), 68030 (1-n*16), RISC (1*32), T800 (1-n*8)
constants short in instruction word, exa PDP 8, RISC (with LUI)
vs large in next word, exa PDP 11, 8080, 6502, 80386, 68030
for operat many diff instr types, exa PDP 8, 8080, 80x86, T800
vs using many addr modes, exa PDP 11, 6502, 680x0, RISC [Dewar] p189
anec in Tech after 8080 we had PDP 11 introduced, far easier instr set
as microproc LSI 11/23 in 1974 [Salus] p133, why didn't we learn on it
IP and SP as separate registers with separate access instructions
exa PDP 6 [Levy] p80 Push-J, PDP 8, PDP 10 [Raymond] "POPJ", 8080, 80x86
vs in register file w normal instr, exa PDP 11, VAX, TI 9900, ARM, Alpha?
vs IP separate and SP in register file, exa 680x0, many RISC
in non microcode separate easier wiring, in microcoded in regs cheaper
reg file leads to less opcodes, simpler instr set
special branch instr vs skip and normal jump instr
sub/cmp into flags and branch on flag, exa 8080, 6502, SPARC, PPC
vs setcc into reg and branch, exa MIPS, T800
vs both, exa 80386, 68030 [Byte] 88-5p244 68k move instr sets flags
JSR is 2 operations in one (save old IP and load new), allways an odd instr
old IP in mem 0 (LINC), first word of subr (PDP 8), switch IPs (Agnus)
HW stack (NC4000), SW stack (PDP 11, 8080, 6502, CISC), link reg (RISC)
Instruction Decoding and Execution
hardwired, early processors, early microprocessors
[Byte] 85-10p101 EGO instruction decoder
exa Whirlwind instr decoder 5->32->120 wires [Ross2] p88
exa LINC [Clark] p393 instruction set
exa early PDPs, [DEC1] p3-9 PDP 8 instruction set
exa 8080/Z80 [Zaks] p65 data paths, [Zaks] p70 instruction execution
exa 6809 [mc] 82-1p50
registers, logic units, source selection, target selection, function lines
exa PDP 8 operate instruction CLA bit (bit 4) [DEC1] p3-11
decoder logic in dedicated gates, hardwired logic
microcoding, CISC
exa IBM 360 series [Dewar] p233
exa DEC PDP 11, VAX
exa Xerox Alto processor 5.883 MHz 16 bit CPU built from TTLs [Thacker] p274
memory 64kx16 (1k*1, later 4k*1 chips), no protection, segmenting or paging
of this 25k..30603*16 used for display (dependant on program running)
microcode 2k ROM + 1k RAM, 1979 Alto III 1k ROM + 3k RAM [Thacker] p284
microcode in RAM, not RAM, for experimenting with instr sets, WISC
exa instruction sets for BCPL, Mesa, Smalltalk, Interlisp
each sys own instr set, compiler, libs, runtime, OS [Lampson] p303
exa Intel 80x86
[Dewar], [Byte] 82-1p94 8088, [Byte] 85-10IIPp93 8088 vs 80286
[Byte] 86-10IIPp123 80286 prot mode, [Byte] 89-12p377 protected mode
[Byte] 86-10IIPp89 386 arch, [Byte] 89-10ISEp67 486 HW perspective
[Byte] 92-5p37 first Cyrix Cx486SLC, [Byte] 92-5p114 first clock doublers
[Byte] 92-12p114 chosing 80x86 CPUs, [Byte] 93-5p92 586/Pentium
[Byte] 93-9p195 Pentium, [Byte] 94-1p83 Cyrix M1 challenges Pentium
[Byte] 94-6p75 clones, [Byte] 94-11p95 AMD K5, [Byte] 95-4p42 P6
[Byte] 95-9p24 P6 16bit slow, [Byte] 95-9p30 AMD fast 486, Cyrix 5x86
[Byte] 96-1p67 AMD K6 w DSP/vector, [Byte] 96-4p177 PPro 4 CPUs
[Byte] 96-11p89 modern x86 PentPro vs Cxrix 6x86 vs AMD K5/6
[Byte] 97-8p20 x86 competition AMD/Centaur/Cyrix, [Byte] 97-9p51 Pentium II
[Byte] 97-10p51 IDT C6, [Byte] 97-11p73 Socket 7 vs Intel proprietary stuff
[Byte] 97-12p87 AMD/Cyrix/Centaur i86 extensions
[ct] 93-11p11 Intel ODP vs ODPR vs DX/2 diff is pinout and cooling
[ct] 93-11p48 Cyrix vs AMD vs Intel vs IBM, also Intel pinout variants
[ct] 94-5p220 Intel upgrades and pinouts, [ct] 94-12p18 AMD K86, Cyrix M1
[ct] 95-4p120 Intel P6, [ct] 95-4p128 Triton, pinouts, EDO
[ct] 95-7p180 do you need a Pentium, [ct] 95-9p20 P6 16 bit code problem
[ct] 95-10p108 Cyrix 5x86, [ct] 95-11p138 Pentium competitors
[ct] 95-12p22 Nexgen Nx686, Intel P6, Cyrix M1, [ct] 95-12p128 PPro
[ct] 96-3p192 486 pin compatible upgrades, [ct] 96-4p180 Intel power positi
[ct] 96-4p196 Cyrix/IBM/ST 6x86, [ct] 96-4p205 Pentium clock divisor pins
[ct] 96-6p210 AMD K5/5K86, [ct] 97-1p58 AMD K5 up to full speed
[ct] 97-2p56 Klamath/PentiumII, [ct] 97-4p264 AMD K6, Cyrix M2
[ct] 97-6p338 AMD K6, [ct] 97-10p155 IDT C6 processor
[ct] 97-12p196 x86 processor overview, [ct] 97-14p30 Pentium IISX (Celeron)
[ct] 98-1p21 Pentium mask revisions and timing irregularities
[ct] 98-3p126 Pentium parallelism stalls, [ct] 98-10p196 x86 selection
[ct] 98-14p162 Xeon, [ct] 98-21p26 Celeron 300A and 333 with L2
[ct] 98-22p24 AMDs design for K7 processor, up to GHz
[ct] 98-22p250 story of Intel, crush Motorola with preannouncements
[ct] 99-5p118 PIII Katmai vs AMD K6-III Sharptooth
[ct] 99-10p172 K6-2 366/66 slower as 350/100
[ct] 99-10p176 socket 7 upgrades, [ct] 99-16p92 AMD Athlon
[ct] 99-25p26 Transmeta Crusoe, [ct] 2000-3p32 Crusoe
[ct] 2000-5p16 Willamette (P4?) 20 step pipel, [ct] 2000-14p88 AMD vs Intel
[ct] 2000-18p22 AMDs hammer, [ct] 2000-14p134 Pentium 4
[ct] 2001-5p240 Pentium++ microcode patching, [ct] 2002-13p104 Opteron 64b
[ct] 2002-23p120 Pentium 4 hyperthreading, and pipelining diagram
[ct] 2003-7p122 "Banias" Pentium M, [ct] 2003-13p90 25 years 80x86
[ctk] 89-10p341 Befehle, [ctk] 93-9p235 80x86 family, clones
[PCW] 93-5p312 586/Pentium, [PCW] 93-12p442 80x86 and RISC families
[PCW] 96-5p156 Cyrix vs Pentium
exa Motorola 680x0
[Dewar], [Byte] 83-5p342, [Byte] 91-8p121 68040, [Byte] 95-5p173 Coldfire
[ct] 90-3p336 68040
sequences of microcodes needed for instruction exec in a ROM in the processor
with a Harward architecture processor to exec these wired into hardware
external program in large mem (macrocode) made of routine/parameter codes
actually 2 proc (1st simple in HW, 2nd complex in SW) [Dewar] p234 360/40
680x0 addressing modes actually executed by a third nanocode interpreter
[Byte] 83-5p343 68000 chip photo nanocode ROM, [ct] 90-3p338 68030 same
anec IBM XT/370 proc was a 68000 with replaced microcode [Byte] 85-9p214
microcode processor width is not neccessary same as macrocode processor
exa 68k macro allways 32, 68000/10 16 bit, 68020/30 32 bit, 68040 CRISC
also memory widths intern vs extern [Byte] 91-9p136
once microcode is there gains from as many special instr as poss, CISC
lots of special macrocodes for assembler programmer, is interpr progr lang
lots of short forms to save code size and exec time, also for back compat
but the CISC instructions were often not utilised by HLL compilers
[Byte] 94-2p77 todays compilers, optimising
[ct] 2003-7p226 optimiser gcc 2.94 vs gcc 3.2.2 vs icc 7.0
because they can't figure out when to use them, this is too complicated
CISC is a case of second system effect
exa IBM 1130->360, DEC PDP8->PDP11->VAX, Intel/Motorola 8bit -> 16/32bit
development of outdated (assembler) technology at time compilers in use
anec CISC of VAX offended ken, VAX Unix not from him [Salus] p154
pipelining, RISC
[Byte] 92-1p305 pipelines in R4000, RS/6000, 486
[Byte] 92-2p123 built for speed, [Byte] 94-1p91 RISC grows up
exa MIPS [Dewar], [Byte] 91-12p271 R4000, [Byte] 94-9p47 R8000
[Byte] 94-11p123 T5, [Byte] 96-5p161 R5000, [Byte] 98-1p49 MIPS R12000
[ct] 91-9p228 R3000/R4000, [PCW] 94-9p226 R8000
exa Sparc [Dewar], [Byte] 91-4p295, [Byte] 94-11p105
exa PPC [Dewar], [Byte] 92-2p96 Power PC, [Byte] 93-8p56 the hype,
[Byte] 93-79 PPC 601, [Byte] 94-6p265 PPC 604 [Byte] 94-11p113 PPC 620,
[Byte] 96-11p101 newer PPCs, [Byte] 97-4p59 PPC G3, [Byte] 98-4p51 Power3
[iX] 93-12p46 POWER2
exa HP PA [Byte] 94-8p185 PA 7200, [Byte] 95-7p175 PA 8000
exa ARM [Byte] 86-1p387, [Byte] 91-12p84IS49 ARM600
[Byte] 92-11p293 ARM610, [Byte] 96-1p153 StrongARM
[ct] 2002-2p70 ARM story, [ct] 2002-2p198 ARM architecture
exa AT&T 92010 Hobbit/CRISC [Byte] 93-2p169, [Byte] 94-1p105
exa Alpha [Byte] 92-8p141, [Byte] 94-10p197 21164, [Byte] 95-6p239 overview
[Byte] 97-5p59 21164PC, [ct] 92-6p52, [ct] 98-15p192 Alpha beats Merced
exa Hitachi SH-3 [Byte] 97-7p45
exa Intel i960RP [Byte] 96-10p67
exa Merced/Itanium [Byte] 97-12p80 IA-64 architecture
[ct] 99-6p114 Merced NaT bit, [ct] 99-12p28 IA64 official
[ct] 2001-13p148 IA-64 architecture, [ct] 2002-13p104 itanium 2
exa MMIX theoretical RISC [ct] 2002-5p184 MMIX and Knuth interview
clock speed
capacity charge/discharge limits speed, together with signal running time
even at light speed you don't get far in a nanosecond
capacity charge/discharge also generates most heat
overclocking heats up chips, +10 degrees halves time to death
anec faking of processor clock rates, sell cheap chips as better ones
[ct] 95-3p30 faked processor clock rates, solve them by better CDU-ID
[ct] 95-4p24 not only with Intel, also with AMD chips
[ct] 95-7p28 cheaper AMD chips misslabeled as fake Intel parts
[ct] 95-9p22 Intel measure to reduce faking, [ct] 95-12p20 Intel foiled
[ct] 96-2p22 Intel fakes own fake protection
[ct] 97-1p18 processor faking, still not safe system from Intel
[ct] 97-2p17 Pentium fakes, Intel bureaucratic response "trust paper"
[ct] 98-1p24 memory chip markings faking
[ct] 98-7p18 Pentium II higher clock remarkings
[ct] 99-10p210 deliberate overclocking by users
to increase speed split job into multiple steps, eaxh shorter that full
pipelining interleaves fetch, decode, get ops, operate, write results
of multiple following instructions to speed up flow
but maximal sensible pipeline depth is limited because stall of time loss
standard model 4, most 5, P6 7, R4000 8
anec Ernst newest mainframes are back down from 5 to 4 stages
variable instr size and memory accesses of CISC hinder effective pipelinig
uniform instruction size, usually 1 word of 32 bits, 1 cycle exec, RISC
and simple addr modes (reg indir + offset) with a few variations
because of variable memory accesses pre-CISC processors are not RISC
LINC, PDP 8 [DEC1] p3-18 defered addr, indirect bit extra memory read
PDP 11, 8080 and 6502 const in additional program words, PC indir autoinc
RISC reduced instr-complexity set, not reduced instr-count set [Dewar] p387
MISC minimal ins set [Byte] 90-11p19 Teraplex, [Byte] 91-3p90IS109 PgC7600
full external microcode, no multiple instruction formats
for non avoidable complex instrutions
use a state machine, exa load/store instructions
or trap and emulate, exa paged VM address translation and page loading
or call subroutines, exa multiplication, division, floating point arith
instr for job differ, for comparing proc speeds don't rely on MIPS numbers
they are meaningless [Raymond] "MIPS (1)", [Byte] 88-6p225
[Barry] p77 Marketing Instructions for Pushy Salespeople
no microcode, macrocode is simply bit patterns for control
RISC are therefore sometimes called external microcode processors
but this is not quite true as microcode interpreters are non von Neumann
in microcode proc no memory collision of instr fetch and data access
but RISC with internal Harward architecture also have no collisions
data loads must execute before using data, causes wait, breaks pipelines
reduce amount of loads, leads to many registers
usually 32 registers, requires 5 bits to select every operand, target
to increase registers without incr selection bits in opcodes reg windows
but register windows as in SPARC 8 at a time, have granularity problem
better register stack as in AMD 29000, AT&T CRISC, more decode logic
also large register set (SPARC nearly 200) slows down process switching
anec Ernst mainframe accellerat in last 10 years mainly in switching
independant arithmetic operations between load triggered and data used
all arithmetic instr (most instr in prog) work reg to reg
no memory access in arith instructions, split load/store and arith instr
jmp, branch and jsr must also load addr before executing further instr
this breaks pipelines, leads to waiting, slows down processing
early predictability of branches, in early pipeline stage
branch delay slot, exa MIPS [Dewar], branch target cache, exa Pentium
no special instr as these are not used by compilers
anec first RISC Crays CDC 6600 for fast Fortran [Dewar], [Byte] 90-10p38
RISC has superior performance for price (30%..100% depending on whose claim)
vs CISC has large SW availability for 80x86 PCs and 370 mainframes
to brige the SW gap use emulators for the old processors instr set
[Byte] 89-12p361 DOS at RISC, binary porting, binary compiler
[Byte] 94-4p109 Windows on RISC, CISC is better, [Byte] 95-11p119
exa PDP11 on VAX11 systems, VAX on Alpha/VMS
exa Z80 and CP/M on 8088/286 Z80MU [Byte] 86-10p203
exa 8088 on Mac/Unix SoftPC, and Atari ST
exa SoftWindows PC emulator on NeXT 68040 or SGI R4000
anec NeXT SoftPC incompatibility, HP 100LX app100 comms SW crashed
also crashed HP, RAM disk lossed, that is not purpose of doing backup
I bought for Fr.200.- a disused 286 PC for backing up the HP
exa 68k on PowerMac [Byte] 94-4p131, [Byte] 95-8p149
MacOS on PowerMac running partially on emulated processor
exa Virtual PC Pentium emulation on PPC [Byte] 97-11p51
exa x86 on Alpha [Byte] 96-2p195
exa [ct] 99-7p60 VMware virtual 386 PC under Linux or NT
programs assume the semantics of an instr set, instruction architecture
as long the sequence of actions expected by programmer happens all OK
software can be written that simulates an other computers processor
emulators are essentially interpreters for machine code
originally emulators were alternative microcode that executed
an older processors machine code, exa 1401 on 360, PDP 11 on VAX
modern emulators dynamically compile at runtime
also compile of one code into other [Byte] 89-11p361 DOS on RISC
Apples change from 680x0 to PPC is greatest architecture swap in history
is possible because Apple controls OS, same also DECs VAX to Alpha
also both emulator tradition, Apple II for Macintosh, PDP 11 for VAX
but will this work in 80x86 market, where users want binary compatibility
you can replace IO dev when hidden behind drivers, but not instr set
perhaps the PPC 615 with hardware support for emulators has a chance
RISC was once easy to build in student projects (Berkeley, Stanford)
but today in performance race just as difficult to make as CRISC
but splintered market, MIPS/SPARC/PA/PowerPC/Alpha, high developm costs
RISC has become a disadvantage for the traditional WS makers
only wide spread RISC is the PowerPC used in the PowerMacintoshes
80x86 is nearly as fast as RISC because Intel can waste transistors
Intel has fabrication technology with the highest transistor densities
a 586 or even a 686 with Linux is nearly as fast as a RISC WS
attempt by Sun to establish SPARC as a second clonable standard
was only measured success, because very much more expensive than 80x86
but not really much faster, just not worth the extra price
also who needs all the power of todays processors, only FE-like jobs
anec on Mathias Alpha+Linux the X desktop there before monitor synced
I doubt that RISC will get a big market share in this century, if ever
transport triggered architectures
[Byte] 95-2p151
only move instruction, no instr sel bits, just source and destination address
operation happen as side effect of writing/reading special addresses
analog to memory mapped IO, this is memory mapped instructions
floating point units (FPUs)
[Byte] 95-1p223 FPU precision
scientific/technical progr require large number range, often little precision
use floating point numbers, consist of mantissa and exponent
floating point data formats IEEE 32/40/64/80 bit, but many others
nearly all other programs require no FP operations at all
[ct] 97-9p256 FPU utilisation
operations on floating point numbers were first implemented as subroutines
but those were slow and these computations spend lots of time calculating
speeding up floating point arithmetic speeds up entire program linearly
lead to special hardware support for FP, exa IBM 704 with FPU [Backus] p28
difference scientific vs business comput FP vs BCD support, exa 704 vs 705
later with CISC common instruction set but scientific vs business models
the FP instructions are implemented in hardware vs microcode
with microprococessors FP coprocessors, [Dewar] 80x87, Weitek
[Byte] 90-1p337 80x87, 68881/2, Weitek 3167, [Byte] 92-2p151 support local
[ctk] 91-1p271 80x87
are instruction set extensions for FP with special HW to exec FP instr fast
communic to separate chip, command regs, sep lines, command from addr bus
80x86 and 680x0 despite being CISC have no internal FP instr microcode
FP instructions must be emulated by external SW
is slower than subroutines, but not by much, no 2 .EXE files required
emulation called by FP not present emulator trap
anec the 8086/88 has no FP instruction trap for when FPU missing
control systems either have an FPU or don't use FPU instructions
nor does it have an illegal instruction trap
control systems shouldn't contain illegal instr, what after trap
anec for using 8088 on PCs MS standard for FPU emulation [Gilluve] p230
uses SMC to reach full speed when a FPU is present
since 80486DX and 68040 both series have built in HW FPUs
but FP is not used on most users jobs, cheaper processor without FPU
anec 80486SX Intel marketing bungle with disabled FPU [ct] 91-7p55
also lower clock to reuse duds made 486DX look more than 486SX
also problem with SX was confusion with 487, ODP, DX/2, SX/2
vs 68C040 introduced without any problems
but some Macintosh SW failled, assumed if 68040 found FPU present
vs Transputer T414 wo and T800 with FPU are pin compatible, swapable
floating point problems [Plauger3] p17, [Plauger3] p33, [Plauger3] p137
users are not so cautious as with integers (overflow)
because they expect this complex machinery to be more reliable
it is a bit like integer=go kart vs float=limousine
but FP is only approximately right because of rounding errors
code defensive, <0.001 instead of =0, add/sub small value, mul 0.999
anec points don't float but a wrong number can sink a calculation
Parallel Processors
[Franklin2] schnelle Rechner, [Byte] 91-6p199 multiprocessing, types
[Byte] 92-8p112 all systems go, types, [Byte] 94-2p97 compilers parallel CPUs
[Byte] 95-2p65 the grand challenges, [Byte] 96-1p45 the world's fastest comp
a further way to accelerate computation is to have multiple calc at same time
either one processor working on mult pieces of data, a parallel processor
these may be one instr operating on mult data or mult instr at a time
these designs are shown in this chapter
or multiple processors each with their own code, a multi processor system
these may be mult proc on one common memory or each with their own memory
these designs are shown in the compute server chapter
separate FP pipeline
FP instr are often executed in a separate pipeline from integer instr
exa T800, 80486+, 68040+
use 1 integer instr cycle to trigger FP instr, then more integ while FP
allows address calc (integer) for array load/store while FP proceeding
vector processors
exa Cray 1 vector supercomputers [ct] 88-6p70
exa Intel 80860 [Dewar] p341, [Byte] 89-12p333, [Byte] 91-1p347
486 and 860 have roughly equvalent FPUs, both ca 3 MFLOPS scalar at 33MHz
but the 860 jumps up to 66 MFLOPS for vector code with FP mul and add
anec 860 used as vector FPU on Hauppage 4860 PC motherboard (486+860)
for this type of use it has a 486 compatible MMU data format [Dewar] p343
anec this proc is similar fast to a Cray-1, has be called "Cray on a chip"
heavy FP work (matrix operations) requires often repeated simple loops
build entire loop into hardware, one processing unit for each instruction
results in essentially multiple specialised processors, one for each step
build the data transfer lines to withstand the large memory to proc traffic
execute instructions out of microcode or an instr cache, no data cache
multiple parallel FP units give parallel vector processors
exa Cray X-MP vector supercomputers [ct] 88-6p70
still one program, the same instructions are executed in all processors
are single instruction multiple data (SIMD) parallelism
anec "a Cray 3 executes infinite loop in 2 seconds" [Raymond] "infinite loop"
massive parallel processors (MPP)
exa Connection Machine, 8 cubes a 32 boards a 4x4 chips a 16 1 bit proc
exa Parallaxis concept and MasPar MPP SIMD computer [ct] 91-6p34
exa AMD CAM content addressable memory [Byte] 91-3p147
exa PACT dataflow [ct] 2001-15p170
the single processors are very simple but in a large number (often thousands)
each single processor is purely scalar, often no FP, some even 1 bit wide
all processors execute the same instruction at the same time
require a system for selecting which processors are working or sleeping
only this allows different data elements to vary in processing
each processor has its own data bus and memory
for exchanging data use a system of communication links
very long instruction word (VLIW) processors
[Byte] VLIW heir to RISC?
exa Trace Multiflow [Byte] 96-4p61, [ct] 90-3p232
use multiple processing elements, like vector processors
but all proc element are general purpose, offer more flexible operation mix
are multiple instruction multiple data (MIMD) parallelism
but compile time fixed instr grouping, is static, not efficient
this requires trace sheduling, complex code analysis
makes compilers very complicated
limits because on average every 6th instr in a program is a branch
VLIW require a new EXE file for every processor generation
this is unlikely to be usable in the commercial PC software world
Intel and HP developing VLIW for P7
[Byte] 94-11p287 VLIW Questio, [Byte] 95-4p54, [Byte] 96-4p61, [Uo] 96-2p16
is unrealistic in commercial SW world, see 80x86 cloners
perhaps generation specific VLIW instr set, direct access underlying RISC
with 80x86 or HP PA instr set interpreter for compatibility
later they claimed that VLIW was never intended [Byte] 95-7p175
superscalar processors
[Dowd], [Dewar] RIOS
[Byte] 89-12p333, [Byte] 94-1p75 microproc trends, multi exec unit micros
[Byte] 95-11p179 fast processors compared
[ct] 2000-12p220 VLIW/PIC vs ILP/SMT, [PCW] 94-4p464
exa IBM RIOS/POWER, Motorola 88000, Intel Pent, NexGen 586, Cyrix M1, AMD K5
out of order execution, rename registers, scoreboard
with conditional branches speculative execution, rollback if wrong
multiple general purpose execution units with any instruction mix vs
specialised execution units, typic instr mix, exa first RIOS, MIPS R5000
superscalar is VLIW with run time distribution of instructions, dynamic VLIW
because of this it only requires traditional instructions code
exa 80860 vector (semi-VLIW) vs RIOS superscalar [Dewar] p382 and p402
programming the 860 is difficult, RIOS uses normal tools, same speed
because of traditional code superscalar, not VLIW, is true heir to RISC
with caches and prediction to avoid wrong speculative execution
[ct] 05-8p230 fast processor techniques
it can be even faster than static compiled VLIW, because uses experience
multiple normal processors, symmetric multiprocessing (SMP)
fairly simple, problems are bus sharing, interrupt distribution
[ct] 2002-19p188 SMP APIC in single processor systems
System Consoles and Front Pannels
exa Whirlwind, PDP 8 [DEC1] p3-1 front panel picture, Altair
binary switches for program, data and control signal entry [DEC1] p3-2
lamps or LEDs for program, data and status display
user sits in front of machine and works interactively
first enter program code and data with the switches
then set IP reg with switches and runs CPU
wait until program stops on an HALT instruction
anec on PDP 11 with RSX to prevent continue switch after fatal system error
after HALT BR with comment "Oh no you don't..." [DECUServe] 9?-?pDS-18
then read out results with LEDs
for debugging runs use single step switch instead of run
on mainframes and minis processor address registers are used for memory access
single step controlled by switch on front, halt instr for program driven stop
on microprocessors no external access to processor registers
processor is put into halted state with bus pins in tri state mode
and external address generators are used
also no hardware controlled single step
record running system with a logic analyser attached to processor
exa Intel for 4004 [Byte] Faggin, Biomation and Tektronix at Tech
or special logic analyser board in system, exa Periscope for IBM PC
--- Programming
Assembly Language and Assemblers
in the beginning programs were directly designed in binary or octal
and then entered in binary via the computers front pannel
or typed onto tape/card/file as octal ASCII
after a while symbolic codes for instructions were invented
mnemonics for instructions and registers are better readable than octal codes
list registers in instr dest, src1, src2... vs src1, src2..., dest
symbolic names as labels for jump, jsr and variable addresses
use of sensible names makes code more readable, use systematic naming
no stale addresses after shifting contents of memory to new address
symbolic constants for field sizes make expansion of fields easier
tests for exceeding limits stay in sync with size changes
.DB, .DW, .DS to reserve space for data in memory and initialise it
mnemonics were first converted by hand to binary or octal before entering
this is a repetitive, boring and error prone job (I've done it)
it is also formalisable, which lead to programs to automate it
programs were now typed onto tape as ASCII mnemonics
converted by a program to binary and punched onto a second tape
programs in mnemonics were then called assembly language programs
the tape with the assembly program is known as source tape
the conversion program is called an assembler
assemblers
scan source, generate base instr bit patterns, fill in mode, address patterns
symbol table of addresses and references to them
two pass assembler vs one pass with backpatching [Aho], exa Columbia
macro assemblers
used for often repeated sequences of instructions
difference of macros (expanded at assemble time) to subroutines
assembly-time generation of instr sequences, names for symbols local to macro
optimising assemblers
exa Atari ST Turbo C [Franklin3] minitos.s
on CISC processors often multiple instr do the same work at diff speeds
optimising assembler automatically replaces slower with faster ones
structured assemblers
converts if, while structures into recommended instructions
also generates symbol names for implied jump targets
knowing assembler is still relevant today, every programmer should know it
not for programming in it, but for understanding what the machine is doing
only know HLLs vs know Assembler is like stone age magician vs engineer
anec Ammann people don't understand what a pointer really does (LD indirect)
Comments and Code Layout
code is read more often by the programmer(s) and other people than the computer
design programs for human to read, execution by computer only as side effect
[Brooks], [Raymond] "program (3)" is failure if others can't understand it
programs are a kind of literature for others to read [Knuth], [Levy] p118
software can last long, don't expect original writer to be around to ask
exa Bremi CDC Waerme program from 1960s was used until 1992
to help reading of the program use comments
explain why something is done, not what happens (the code says that already)
comments are not a replacement for learning language syntax
anticipate questions of reader, explain the code (why is this code this way?)
vs "usefull" program comments, are more practical jokes
anec [Levy] 1750 RIP JSB
anec "My mother taught me never to write code like this" in RSX source
[DECUServe] 9?-?pDS-18
anec /* you are not expected to understand this */ in Unix 6th ed source
[DECUServe] 9?-?pDS-18, [Salus] front page
[Raymond] "You are not expected to understand this"
anec /* aren't we clever? */ in 4.2BSD source [DECUServe] 9?-?pDS-18
anec the IOCCC was triggered by the /bin/sh source code
use sensible symbol names to explain what variables and constants are for
comments use time without improving code, better use descriptive names
variables are data things, use substantives to name them
procedures are actions, use verbs as their names [Knuth] p241
build all code related documentation into the source code
this avoids losing it or forgeting to look at warnings in it
"put it together and keep it together" [Brodie]
separate docu is unliked because often redundant information, sync problems
specially where you tripped over because obvious code produced a bug
when you have corrected code put in a comment why code is that way
this knowledge is in your brain, why forget it, write it down
literate programming narrative comments with inserted code [Knuth] p125
numerical measures for comments (so many percent of code) are stupid
"they just need to be there", leads to comment babble, exa ChS PlasmaDat
not amount of comments counts but their usefullness
understandability counts, clear logic, sensible naming
to help reading of the program use code arangement
group code that does one thing at one place, same also collect subroutines
splitting code into subroutines scatters it in the source code
this increases scrolling, only split if for reuse or modulisation
but not just to reduce the length of a subroutine
literate programming code layout in discovery order
row in which the programmer thought it up
routines that fit together are arranged together
especially good for scattering initialision to where structures are used
filter out and arrange code for compiler with WEB tangle tool
format the whole thing for easy reading with WEB weave tool
readability information hiding, unload the programmers brain
direct tell what you want, not let reader infere from how you do it
more code on display allows seeing more of it at the same time
don't waste your limited visible screen space
as this reduces the amount of code on page, reduces overview
it also increases the amount of scrolling, breaks thought process
allows use of programmers visual brain to discover relationships of code
anec Brad Cox (invent of Objective-C) talk "never mind man behind curtain"
classic computer science ignores effects of programmers abilities/limits
no begin/end or {/} on separate lines, use only indentation, like Occam
also indentation only 2 columns, gives less loss of line length
gives less broken lines, which use up more screen lines
no boxed comments as they use a lot of space
same avoid too many empty lines to divide code
anec Glance remark about Kompal source being easy readable
despite traditional rules of layout being broken
anec C cpp uses # for marking preprocessor statements
not used for comment lines like in all other tools in Unix
this makes cpp useless for preprocessing other tools files
exa X resource files must use ! for comment lines, so that cpp works
exa this also forces C++ to use // for comment lines
Modular Programming
subroutines are not just for saving code size on repeated operations
they add to the spectrum of instructions the programmer can use
with every subroutine level code expressiveness grows, abstraction level
all programming is defining routines, is instruction set expansion
in Lisp, Forth and Smalltalk this is explicit in language philosophy
subroutine collections allow reuse of code, save time, less bugs
really productive guys using reusability [Byte] 90-9p358
groups of subroutines can hide details of accessing data structures
information hiding, reduce side effects, leads to modular programming
but too many modules can lead to module spaghetti
design modules to have core set of routines and simplif aux access routines
also use this for backward compatibility, to support old module interfaces
use clean parameters, no hidden flags [Raymond] "hidden flag"
exa bad Unix login shell flagged by argv[0] string beginning with "-" char
exa bad PlasmaDat, output no 99 in Kompal outputs struct for nonprinting
prevents bugs by accidental use of these values, eventually by someone else
also hidden command options, exa HP 41C GTO..
but C pointers/strings usage of NULL/0 acceptable because everyone knows it
same don't missuse language definition or rely on implementation specifics
C programming model [Raymond] "vaxocentrism", [Dewar] unaligned pointers
bumming was first used to save size, but later for conciseness, reliability
bumming is not bad taste [Knuth] p10, but doing so prematurely is bad
on the other side crisping up code simpifies programming, less on mind
a lot of bumming is code size reduction, complexity reduction
[Byte] 93-2p286 software gluttony, [Byte] 93-4p98 fighting fatware
with 2 adequate solutions the simpler is the better [Brodie] p60
cyclical repetition of fatware, consequences of it [Plauger2] p153
also return of the colossal code [Byte] 90-5p380, entire systems are big
will manufacturers never learn the value of simplicity
despite power HW compact low require progr advantages [Byte] 96-5p10
Web PCs will have low power, real PCs of secretaries often low power
but also simplicity vs multi faceted comfort [JamesG] p133
[Byte] 91-7p352 the X attitude, same also PS, both are resource pigs, bloat
"every time Andy Grove increases processor power, Bill Gates uses it up"
also with expanding hardware power economics make sloppy code cheaper
Xerox Alto design for HW expected in 5 years vs OS/2 1.x for 286 trouble
anec term bumming came from McCarthy from ski bums [Levy] p26
from same exhilarating feeling in bumming and deep snow skiing
as I do both, bumming and deep snow skiing, I know both are alike
programming success has also been compared to an orgasm [Raymond] "progasm"
Standard Algorithms
[Sedgewick], [Libes2], [Byte] 88-5p297 n-grams
[Byte] 89-1p376, 89-2p301 and 89-3p287 trees'n'keys B-tree, ISAM
[Byte] 91-4p315 combsort, [Byte] 92-11p281 agrep approximate pattern matching
[ct] 90-1p180 find string in text
[ct] 92-4p264 bsort, good when quicksort has its worst case
[ct] 96-12p326 tabu search, [ct] 97-8p292 text search
[ctk] 88-11p273 sort, [ctk] 92-3p263 sort
[PCW] 94-4p568 random gen
some types of subroutines keep on reappearing in different programs
these are for common subtasks, make predebugged libraries of these
look out for common subunits, make them into standardised components
like electron circuit modules, standard algorithms, add them up to whole
computer science has resulted in lots of experience in optimal algorithms
types of algorithms covered by comp science research are
sorting, searching, string handling, geometry, graphics, maths
well documented in literature, not repeated here, as I can add nothing
lots of experience, don't duplicate it, use existing sort [Plauger1] p71
teaching loads of students how to write sorters is a waste of time
instead I will show a few techniques that are learned by experience
or unfortunately often not learned at all
Libraries and Linkers
small programs fit into one source code
the assembler can directly produce complete executable code
larger programs are better split over multiple sources
first multiple files and include statement
later seperate assembly of the multiple files
originally this was for assembling speed improvement
because most alterations only change a few related routines
but also to circumvent machine limitations on assembleable program size
and to have multiple programmers writing different routines of one program
it also allows collection and reuse of already written and tested routines
this leads to subroutine libraries [Levy] tapes in drawer
multiple partial sources give multiple incomplete binaries
written in special format, object files [ctk] 92-4p281 MS-DOS Intel OBJs
with a list of exported and imported symbols
mem layout blocks of bytes (segments) with symbol addrs (segment+offset)
some languages only export specially marked symbols (.PUBLIC)
this reduces object size and linker memory requirements
for error check some lang require special declare of imp symbols (.EXTERN)
libraries are simply collections of multiple objects files in one file
to reduce tape/card swapping or file clutter on disk
these must be linked together to produce a complete executable binary
a linker adds any object which contains momentarily undefined
external symbols in it's public symbol table to program
and adds its undefined externals to the existing list
if there are still external symbols left after all objects this is a error
seperate compilation leads to lots of commands to do so
need to be triggered int he right sequence, else old versions get linked
compiling driver scripts, or even better Makefiles which test for recompile
separate sources produce problems with conficting naming of global symbols
systematic naming of symbols as source+address
exa sssaaa or ssaaaa (Assembler, Fortran), ssssss_aaaaaa (Algol, C)
exa ssssss-aaaaaa (Lisp), SsssssAaaaaa (Smalltalk)
or list only explicitely exported names in object files, exa Modula
anec Wirth in Modula functions upper case, vars lower case
variable naming generally undervalued by comp sci [Byte] 91-8p131 hungarian
but hungarian critisized for badly readable, verbose, too low level
BSS (Binary Symbolic Subroutine) segment name from Fortran I [Backus] p41
High Level Languages and Compilers
exa Fortran, Cobol, Algol, Pascal, C, Modula, Ada
assemblers started quest for "automatic programming" [Backus] p25, [Baron] p205
users want to specify what result they want, not find out how computers work
let the computer figure out how to do it
this lead to increasingly higher programming languages
inventors claimed it "eliminates" programming [PCW] 93-1p409
but it only eliminates assembly language programming
one must still specify what the computer must do, that is programming
first also only a design help, converted by hand to assembler before entering
then also automated tools (compilers) were written
originally these generated assembler text, later directly binary objects
users want to be able to take programs to another computer and run then
this requires a machine independant programming language
machine independent standardised HLLs only appeared after user pressure
one of the gratest advantages of HLLs over 4GLs is their language standards
abstraction of operations as formula-like statements
program flow control via ifs and gotos
subroutine and variable names short (Fortran 6 char) vs long (Cobol)
variables first were all global (Cobol), later static local (Fortran)
anec all variables global is not so bad as it is often made out
exa dBase III used for CCW members database, requires naming conventions
subroutine call/return without parameters
just global variables or registers, as in Assembler (Cobol)
or with formal/actual parameters that then may be
pass by reference (Fortran), value (Pascal), or name (algol)
by reference more flexible, is an lvalue, [Pest] fortran, [Brodie] pointer
vs by value safer, original not modifiable
but discipline is better than force, does not prevent use when right
in Algol for passing parameters by name use thunks
[Aho] p428, [Byte] 88-2p223 by name vs by value/reference
thunks are code that guarantes called routine [Abelson] p164 footnote 36
that callee will evaluate parameters if the called wants to use them
this results in lazy evaluation, good for large data sets, no men use
history of term thunk [Abelson] p317, [Raymond] "thunk"
anec syntax of Cobol was supposed to be manager readable for checks
this didn't work, problem in reading of programs is not the syntax
but abstraction, complexity (side effects, lack of predictability)
it just made programs more difficult for the programmers to write
[Raymond] "candygrammar", [Baron] p179
the comp industry keeps on repeating this error up to today, exa Hypercard
language elements
[Baron], [Kernighan], [Byte] 88-8p205 C, [Byte] 90-9p276 Kurtz on micro Basic
[Byte] 91-9p147 Fortran, 91-10129 Cobol, 91-11p165 Lisp,
91-12p141 APL, 92-1p149 Snobol and 92-3p155 Basic
[ct] 89-1p50 lang and 89-1p58 lang elements, [ct] 89-4p106 lang
[ctk] 87-4p163 Datentypen, [iX] 93-11p148 Fortran 90, [iX] 96-2p140 Fortra 95
early HLLs were specialised later more universal, special purpose vs univers
universal requires more work (already built in special) but can do more
Fortran weight on calculations
Cobol weight on file operations and data formating
Algol claimed to be universal by CS professors, but bad for data processing
it was not intended for general use, intended for numerics [Perlis] p85
for numeric anal, scient comput [Naur] p100, not universal [Naur] p115
CS profs generalised maths notation for computers, classic "reins for v"
is case of valuing beauty of maths over usability [BrownP]
test of a languages power is whether its compiler can be written in it
but also, has it compiled more than its own compiler [Raymond] "MFTL"
syntax for assignment vs equals test, PL/I A = B = C [Radin] p563
vs NPL SET A = B = C vs Algol A := B = C vs C A = B == C
in C A = B == C is a serious missfeature [Raymond] "gotcha"
== is often forgotten by programmers, no error message, but bug
anec Algol conference dot vs comma [Perlis] p80, [Naur] p94
lead to publication/reference/hardware lang mess
semicolon statement divider (Pascal, awk)
vs statement end (C, perl) [Knuth] p129
case structure is a computed goto, multiple decision [Knuth] p28
error handling special return values and tests vs on error do routine
exa Fortran in read/write command got label for error handler
C strings bad, use fixed length 8 bit integer arrays [Garfinkel2] p190
but strings not vectors, as Brooks thought, Radin against [Radin] p568 PL/I
standard C char copying loop inefficient on wide processors, use str(n)cpy
wide copy when allign, else offset copy, run in/out code for wrong offset
which to use dependant on data amount/offset, easy, complex, str(n)cpy
wastes programmer time to find out, or more likely proc time because not
using 0 as string terminator prevents better alg, no improv poss, incompat
also problems with strings containing 0 as character, ASCII dependant
strings must be allocated as large stack arrays or explicitly malloc/free
programmer lasiness leads usually to large arrays and no overwrite tests
fixed length affects programming style [Raymond] "C Programmer's Disease"
because it is hard to avoid without lots of work, ususlly not done
language restricts possibili, determines thinking range [Garfinkel2] p191
same computer type has strong effect on thinking [Byte] 92-4p368
HLLs should hide memory managment from programmer, automatic allocation
with automatic garbage collection to prevent need for tracking
note that automatic garbage collection is cheaper then explicit
but in the many C programs this is not the case, Pascal/Modula neither
anec see what the Unix kernal (written in C) does to buffer typed chars
uses an entire own string package, based on records and continuations
anec C strings are actually slower than Basic strings (length+char)
given relative time on move vs rest C can be slower than Basic interp
anec C string array[index] = index[array] only for sizeof(arraytype) == 1
from [Libes2] taken over without noticing in [Garfinkel2] p192
C is not machine independ Assembler as claimed, is PDP 11 Assembler shorthand
from typeless BCPL and B, ext with types for PDP 11 bytes [Byte] 88-8p205
K&R C float/double always processed double because PDP 11 [Libes2] p127
fits good with VAX because it was an upgraded PDP 11, similar architecture
also fitting with 16/32 bit microproc because they have VAX-like design
anec Albin calls these microprocessors pseudoVAXen
C only provides the programmed with machine data types (integer/float)
restrictions on structs and unions, no real strings at all
use only as asm replacement for kernal code, for user progr use better
C prevents evol of HW check support [Garfinkel2] p191, [Byte] RISCs unsafe
C even has lower semantic level than 80386 Assembler [Dewar]
anec some claim that C is the real reason for RISC processors success
but RISC is no success in PCs because of compiled C sold in binary form
anec TSP "C is a shit language, but best available"
different languages for diff programmers cognitive styles [Byte] 85-5p458
Hopper languages success comes from users accepting it [Perlis] p165
Backus Algol thrown out by SHARE, prefered Fortran [Perlis] p166, [Baron]
many languages hinder the programmer to fullfill their designers ideas
get in the programmers way, is "like pushing on a rope"
the main reason C became the standard is its lack of this
compilers
[Aho], [BrownP], [Byte] 85-8p139 parsers, [Byte] 94-2p77
[PCW] 88-9p154 code compilation
lexical analysis, parsing, semantics, code generation
general analyse source gives a parse/syntax tree, sythesize code from that
HLLs are slower than assembler
HLLs save computer time despite being slower, less debug runs [Kurtz] p516
optimising [Dewar], [Dowd], [Byte] 87-10p165, [ct] 90-12p272 C optimisations
difficult to do, fails often, see [Raymond] "pessimizing compiler"
limits on optimizing [Knuth] p55, do it at source level
orthogonal processor architectures make this easier
Fortran is today fairly fast due to much optimising experience
exa Fortran I, first compiler, strength reduction, invariant [Backus] p34
optimising takes time, fast code vs fast compiling [Backus] p42
C is designed for compilation to fairly fast code [ct] 90-6p334 hohes C
[ct] 91-1p180, 91-2p264 and 91-3p302 C Optimierung an der Quelle
HLLs have difficulties with programs for directly accessing IO hardware
C (systems language) has no IO syntax because of machine dependancies
devices needed for standard IO are eventually non existant on system
anec ANSI commitee "can't run this on a toaster or elevator controller"
selecting one representation for lang would be inefficient, not portable
instead libraries, mostly compatible [ctk] 92-1p221 C Portabilitaet
anec the same reason is also given for no IO in Algol [Naur] p163
for writing libs C uses address constants casted to pointers for access
newbie from Basic micro "how do I peek and poke in C" [Raymond] "peek"
only memory addresses poss, no IO addresses, because C comes from PDP 11
such code is completely non portable, use #ifdef, #else error
const to pointer conversion may be problematic on some machines
anec graph.c OS smash because of QuickC A000 vs 000A docu bug
altern include small Assembler routines as data [Libes2] p19 first IOCCC
also system dependant libraries, to hide these GNU Autoconf [Byte] 97-11p45
Structured Programming
exa Algol, Pascal, C, Modula, Ada
when progs became big they quickly became non understandable/maintainable
code full of gotos programmers intentions invisible, is difficult to read
anec goto has no come from [Raymond] "COME FROM"
too many gotos lead to program spaghetti
specially if they are applied hazzardly, without any order
attempts to solve this problem through better methology lead to struct prog
new programming languages with structured constructs appeared
later old HLLs (Fortran, Cobol) were expanded with structures
anec what we will be using in 2000 we will call Fortran [Baron] p212
variables
typed vars, user definable types, records, variant records
visibility/accessability in block they are defined in (local) vs global
semi-global variables hidden with modules/packages, selective exporting
but problems with tool (compiler) intervening in naming system
systematic naming by hand often less trouble, at least if long names
lifetime while executing code they are defined in (dynamic) vs static
dynamic memory, alloc on heap, exa Pascal new/free, C malloc/free
requires a pointer type to point to mem, ptrs in alloced mem gives lists
[Byte] 89-8p279 heap mem man
code, statements
block oriented procedures, functions, ifs, while loops
source code layout with block structured indentation
block delimiters reverse word (Algol), begin end (Pascal)
end word (Modula), { } (C), indentation (Occam)
anec Occam problems with indentation when editor replaces spaces w tabs
C switch fall through as default is losing [Raymond] "fall through"
is source for many a bad bug, is illogical to a structured thinking mind
actually switch labels are clearly goto derived, not block derived
for clear language definition BNF or syntax diagrams
use BNF or similar notation to drive compiler for language
exa compiler generation tools lex/yacc, flex/bison [Aho], [Levine]
anec grammar based compilers have bad error responses
[BrownP], [Garfinkel2]
anec BNF originally stood for Backus Normal Form, not Backus Naur Form
later changed [Aho], [Naur] p162
anec what is used today is actually Cobol notation [Sammet] p233 and p255
bondage and discipline languages
[Raymond] "bondage-and-discipline language"
exa Algol, Pascal, Modula, Ada
these appeared together with structured programming
these languages enforce the "right programming" ideas of their authors
but the forsight of those authors is limited
often these languages are not sufficient for general purpose use
b&d lang are "made in the ivory tower for ivory tower problems" vs
C was written by professional programmers for professional programmers
compiler enforced rules often prove to be too inflexible
exa compiler will not allow to run progr with non fatal error
can be very disturbing when user wants to test run an incomplete progr
non fatal error should only give warning, but only run when neccessary
[Raymond] "Finagle's Law", [Raymond] "Murphy's Law"
strongly typed = gets in the way [Plauger3] p88
it is like having a bureaucrat inside the computer who gets in your way
and then has the cheek to claim that this is being done for your own good
this comes from their belief that they know your good better than you do
legislating programming morality [Knuth] p78
is not right, it is my code, my responsibility, should be my choice
compared with a police state [Griswold] p635
[Raymond] "code police" will get you, [Raymond] "fascist (2)"
beware of people trying to sell you some form of "Snake Oil Miracle Cure"
programming is more than manipulating symbols along fixed rules
if it were so simple that a methodology or tool could solve it
then we would not have the trouble with it that we have
[Byte] 90-10p223 silver bullet OO, OBA, OOA (Yourdon)
a intelligent programmer knows better than a dumb programming tool
a good programmer can do everything without tools
the tools are here to make life easier, they should not get in the way
on the other side tools can guide an inexperienced programmer
note that these people are often well intended, don't want to rip you off
but they have blinded themselves to the real problems with toy problems
they may be well intended, but result bad [Raymond] "Hanlon's Razor"
anti-goto puritanism
bad programmers used goto often
because it is easy and they don't know any better
middle good programmers ones use goto not at all
because the professor says it is bad to use them
some struct lang have no goto any more, but in most goto is still there
anec Widmann added goto to Wirths Modula compiler
good programmers use goto at the right times
structured constructs are actually hidden gotos, quasi domesticated gotos
therefore structured style can be emulated with gotos, but with more work
sometimes raw gotos can be used to construct missing complex structures
to escape the limited structures offered by most programming languages
exa break a loop with conditional test in the middle [Knuth] p47
while block and block until, where are until block and block while
where are loop block1 while/until block2
same also if block, if block else block, where unless block
flexible structures in a production language [Wall] p93
exa loops with continuations, Zahn indicators [Knuth] p41
elaborate structures [Brodie]
anec procedure calls and returns are also gotos [Knuth] p52
sometimes elaborate interleaved structured constructs are less readable
anec structure to avoid gotos with p=*, but p=* is a goto [Knuth] p39
sometimes error recovery is easier and more readable [Knuth] p29
effect of relative size of work and error recovery [Knuth] p126
see also C setjump() and longjump() functions for this
sometimes speed requires goto and readability don't drop too badly [Beck]
anec Kompal output musing on goto lead to cleaner struct (without goto)
only happend because I was prepared to accept intermediate vers with goto
I actually haven't used a goto for over 5 years
but insist on it being there, like emergency brake on public transport
bedevilling gotos stupid, loses ability to use them when they offer advantage
readability and predictability of code is proper criterium
real problem in programming is complexity, not untyped data and gotos
predicting the side effects of code is difficult
code for implementing one functionality spread over different places
exa NeXT DoMail script slipup, wait, sendmail, pop, slipdown
for wait use a flag file, preventive clear, generate, wait for, clear
human forsight is limited at its best
programmer knows enough to choose direction, not enough to be sure
only trying a program out will show whether it will work
correctness can't even be guaranteed then
code chaos vs design is true problem, this is real world, not ivory tower
laws of nature apply, not oversimplification and wishful thinking
the same also with claimed need of data structures
like block struct code, changed thinking is important
not syntax additions for declareing structures in progr lang
Fortran mmmvff named arrays vs C mmmvvv[].fff
the same also applies to similar critics of self modifying code
it is actually run time generated or finalised code
and every compiler is a program that generates code
cleanly structured relationships are also crutial here, not dogmatism
the same also with anti-globals, anti-assignment, anti-pointer [Knuth] p19
all come from stupid bureau selecting easy targets, not right ones
structured dogmatism critisised [Perlis] p146
theoretising vs working language (Fortran) [Perlis] p161
Dijkstra goto considered harmfull [Raymond] "considered harmfull"
was intended as a satirical jibe at anti-goto puritans [Plauger1] p178
don't make religion of no goto [Knuth] p18, but minimise need [Knuth] p23
real importance of structured programming is changed thinking [Brooks] p144
Nassi-Schneider diagrams, are good for teaching structured design
but later no use for producing or doc code, direct code just as readable
flowcharts are graph represent of code, no better to read [Knuth] p21
good for visualising code behaviour in early learning situation
but after that no value in production work
useless for designing/documentation [Brooks] p168, [Raymond] "flowchart"
Functional Programming
[Byte] 94-8p183
"data is just a dumb kind of program" [Levy] p117 Gosper to Sussman
I prefer the alternative form "programs are just a smart form of data"
because functions execute and return transformed data as result
normal data simply returns itsself unprocessed as result
a major problem in programming are undesired side effects of variable modificat
unpredicted modifications can come back and send unexpecting progr off course
assignments make value of symbol variable, progr can't be analysed as maths
programs are functions, running them is eval a function [Raymond] "LISP"
FP demands that programs have no side effects, no assignments
allthogh often the side effects of code are the desired result
computers are run for the side effects, exa an edited file
having no state would make FP only as powerless as combin logic, no seqenc
FP can only be an ideal to strive for, not a holy grail
minimise side effects to neccessary, make the neccessary ones predictable
really important is not exterminating but controlled use [Perlis] p145
insistance on illusoric "no side effects" makes FP difficult to get into
attempts to find sufficient but not too powerfull constructs is research
FP research has led to special lang embedding FP concepts
but FP can be used with any lang that knows funct w param and return values
no variables (= visible state)
FP hides variables, is one step beyond structured programming
is actually domesticated state, like structured domesticated flow control
anec "help stamp out variables" [Brodie] p210
exa funct have state, on stack, in instr ptr or execution context of a loop
but hidden from programmer, like struct progr hides gotos
anec functional if thrown out of Fortran I [Backus] p30 and p54
later included in Lisp, copied into Algol [Perlis] p85
anec progr new to Lisp warned of proced style, but no def of what that is
exa recursion instead of iteration hides iteration counters
[ct] 99-0p234 philosophy of recursion
return instr back to prev recurs level or to caller, no decr and branch
exa print-int-to-str, if int > 9 recurse with int/10, then prt modulo
is most likely the algorithm discovered in [Levy] p44
recursion requires multiple sets of local variables, frames in memory
malloc a frame on every call, with frame ptr to old, gives frame list
on call add a new frame at the list begin, remove it on exit
this gives a push down list (pdl) [Raymond] "pdl"
or run time automatic dynamic allocation on a call stack, automatic mem
no time loss from calling malloc but static limit on stack depth
if too many calls you get a stack overflow, memory smash, crash
anec because of size limits stack swapping in MS-DOS kernal, STACKS=
anec Occam language no recursion but the expression parsing algorithm
in the Occam manual (described in Occam) is recursive [Dewar]
this was done because of the static stack size allocation
compiler calc max stack depth and moves it to front of Transp cache
better would have been Transp with moving cache, register stack
recursion (can be slow, waste mem) vs iteration (loop syntax, more code)
some time recursion gives easier algorithms, sometimes just more work
tail recursive convert to iterative loop, goto begin, faster, less mem
convert non-tail recurs to iterat with 2 gotos, to begin and to after 1st
these gotos are a case of bummed code being less readable
but replacing with struct constr would suggest wrong design, worse
convert data from call parameter stack->array->list [Knuth] p56
anec comp sci profs like recursion because hidden state is "elegant"
anec joke dictionary entry recursion "see recursion" [Raymond] "recursion"
vs iteration "something done again and again" [Wall] p425 glossary
exa recursion to handle a special case, code before or after normal case
do correction, recurse with modif param, normal case, undo correction
when only special code before normal case, do it and recurse with mod param
exa Unix shell scripts which modify parameters and then exec themselves
also no aliasing of variables (diff names point to same variable)
values and definitions vs variables and changing state
no execution order, conditionals or loops, row of evaluation is not fixed
programmer must order avoid order dependency, loses one error source
FP is clothed in lots of mathematical terminology
it can be made easier to understand by non mathematically inclined people
by regarding functions as filters that process data
nested functions as chains of filters, output from inner = input of outer
forward and backward chaining, nesting control struct (buffers and calls)
Top Down Design
is also known as stepwise refinement (N Wirth)
analyse the problem, split it into subproblems
recursively do this until subproblem is a single statement
but top down is only possible if target is exactly defined
top down requires you to know what you are doing
this "should be so" according to ivory tower professors, managment theory
but is often not so, because users and designers don't know what target is
they only discover what they really want while trying to build a system
anec "if you don't know where you're going with a piece of code" [Beck] p17
requires experience from previous jobs, only good for repeated work
top down leads to very rigid designs, small changes are a big job or break
theoretically the entire design should be repeated from top
every change from changed user ideas requires beginning from scratch
often the designer to save time falls back to bottom up
but believes that all is still good because he is "using" top down
result is total lack of caution resulting from bottom up methods
result is a very brittle methodology, it breaks when under fire
great intellectual constructs based on many assumptions
exa atlanta/denver baggage system, flight control [Byte] 95-12p48
exa nearly failled IT office movement, net admin notif 4.5d before holiday
these big collapse as soon as a false assumption is violated
top down fails from bureau errancy, from them not being workers
slow to come up, fail target, long to correct, exa X.400 1984/88
get out of the way before they hatch their dinos, jurassic park style
anec toaster overengineered satire
top down vs bottom up is classical case of planned vs market economy
it is also classical case of intellectuals vs pragmatics/practicals
exa mainfr big design vs PC iterat growth
exa OSI big design vs TCP/IP iterat growth
exa railway big design vs car iterat growth
same TokenRing complex order vs Ether simple chaos
same ATM complex order vs CATV simple chaos
CASE tries to avoid errors by putting weight on metaprogram (specification)
[Byte] 89-4p221 CASE, methodologies explained, Warner/Orr, Gane/Sarson,
Yourdon, Entity Relationship, Structured Design
[Byte] 90-10p223 silver bullet OO, OBA, OOA (Yourdon)
[Byte] 91-9p88IS3 VIPER chip demise, formal method failed
[Byte] 91-10OLp69 future of software techno, p74 CASE just say no, go back
exa Transputer designed with formal methods, but T9000 late despite that
CASE tools were an attempt to speed up this principially broken method
slow "recompiles", inefficient, same badness but faster than by hand
often tools only solve part of design, low level missing, by hand
or even worse constrict possibilities, get in way, circumvention needed
the tools are also too complex to understand, too inflexible to use
takes time to get in to, result in errors by omission, missunderstand
[Byte] 97-5p40IS15 CASE repositories to share metadata
[Byte] 97-11p47 the quest to standardise metadata
CASE became a big bureaucratic white elephant, resulted in CASE failure
which technique to use should be chosen on cognitive style of programmer
analytical (top down) or constructive (bottom up)
better even mix both methods, use the strengths of both [Plauger1] p2
learn both and which to use when, in end instinctive jump to result
anec Stuecheli (top down fan) demand first design before coding, PC only then
I (bottom up user) simply coded on paper, overwriting, copying, wasted time
Bottom Up Construction
is also known as b u implementation [Raymond] "bottom-up implementation"
good design requires experience, experience requires running system
running system requires design, is an endless loop, like hen/egg problem
but it contains process of learning as implicit part, getting experience
real humans (user and programmers) are not omniscient
[Byte] 88-2p207 stratified design, [ct] 2001-3p182 extreme programming
the human brain works toward a solution, discovers pieces, backtracks
this places limits on planning, human foresight [Brodie] p42
top down breaks because of this lack of forsight
bottom up is incremental, for the human mind, is compatible
break this cycle with iterative improvement, multiple revisions
[Byte] 90-9p264 computers and writing, painless revisions
do twice, first mock up, then final [Byte] 95-10p100 sandwich method
exa BRS/OPAC written twice, first prototype [Byte] 95-5p63
anec sister video tape, like most jobs better the second time round
SW is like a waffle, be prepared to throw the first away [Kay2] p250
analysis/coding/debugging/improving [Knuth] p77
quick hacks are unrealistic [Levy] p352, only for throwing away, experiment
life and learning are incremental
learn from experience, fix where it is broken, gives robustness
iterative getting a design right [Norman1] p29
exa Sholes getting typewriter right [Norman1] p141
program and code design is an iterative process [Licklider1] p132
leads to iterative development of programs, explorative programmig
planners aim at make order but instead make chaos
organising/planning on great ideas and central control fails to meet target
it just gets in the way, makes a bigger chaos, fails at its target
better accept that there will be chaos, aim for making the best chaos
build better local structures that are capable of working together
anec planning is way to arrive w big effort where you would anyway by chance
the real question in program design is how to cleanly construct bottom up
exa Pascal row content, loop, terminat, index (creates bug) [PCW] 89-3p182
use design methods and tools to support construction, modifications
use incremental programming tools, techniques that are maleable
begin with most visible stuff, allows seeing effects of changes, feedback
also seeing the program develop stimulates programmer [Brodie] p88 fun down
I say better the best mess possible than design that becomes a bad mess
don't design something too big, make something simple, then grow/revise
great spectacular top down designs often fail spectacularily
better find neuralgic points, select on cost/gain, eliminate, iterative
let user requests drive work, managment moderates, programmers mediate
use a small but long time budget, few people, slowly getting better
this is not spectacular, but it works, is effective and reliable
programmer reality vs the others dreams [IEEEsoftware] 94-5 p90
when expanding existing SW, rewriting it or making a replacement
don't go over the top, don't become too grandiose with ideas
[Brooks] second system chapter, [Raymond] "second-system effect"
bureau often make great plans based on user wishes [Raymond] "gang bang"
but without knowing what's possible, what trade offs will occour
this leads to feature bloat, unreliability, late projects, failure
exa Zilog Z8000 not Z80 or 8086 compatible [Byte] 85-9p214
and Z80000 "kitchen sink processor" [Byte] 85-9p215
anec the Ford Edsel was also a result of this type of behaviour
good bottom up requires experience from previous jobs
know which components are important, efficient, which to implement
inexperienced programming is neither of these, is chaos
version 1.0 of anything is usually not optimal, except for pure chance
all pioneering machines failed [House] p433, because first attempt
design folklore is often lost on brash new generation, they must regain it
exa phone off switch protection [Norman1] p144
exa multi-sequence processor [Thacker] p340 Wes Clark vs Alan Newell
make it known to them, document it, tell the story how solution arrived
good bottom up is a time consuming method, good designs must have time to ripen
exa Emacs 30 years, Unix 25 years, MS-DOS 15 years, X 12 years
top down amounts to forcing a fast solution
the result of this is often unripe and unreliable software
quickly draws into overtime, loses saving, but still no stability
anec effect of top down design on Shuttle reliabil [Feynman3] p135 and p170
all programming is development, is a experiment, something not done until now
can not be estimated like production (no X times done the same thing)
if it were exactly the same thing, then one would simply copy the disks
users allways want something bigger and better, more impressive
designers can not work on previous experience, must first learn new stuff
nearest thing to production in programming is making a derivative job
exa early Innodat from PlasmaDat, but later ChS again development
expect time estimates to be overrun
this gives trouble with managers that bet their reputation on commitments
applies specially to them for who to impress others is their only strengh
specially critical for those with internal power struggles, exa Kompal
if software tools are used these are most likely to be used only once, be new
bugs in them hit unexpectedly, as they are not yet known
exa dBase IV bugs in PlasmaDat, delayed project, drove up costs
exa XVT in Kompal 1/3 work (=time/cost estimate), 1/3 deficit, 1/3 bugfix
XVT because target VT 100 and Macintosh [Raymond] "defenestration (4)"
pre-project testing of XVT failed, bugs only showed when trodden on
managment chose XVT as "policy product", make world "easier" for them
it took long to convince them to drop this, to accept that it was bad
they should let programmers chose their tools to use, it is their job
in the end the Kompal project grounded by XVT bugs, programmer frust
my experience with these and other peoples suggest this to be norm
from such experiences lack of trust in commercially offered libraries
hackers try to do their best to write good programs
progr from building blocks, only as good as ingredients [PCW] 93-11p477
they don't like building on code from "as good as necessary" industry
is main reason why most programmers don't want to use commercial stuff
result frustrated programmers and users, programmer burnout
you only need such experiences and then bureau-made frustration problems
then vanishing programmers, projects go into indefinite frieze, fail
hackers know these problems, they expect overruns to happen, from beginning
[Raymond] "Ninety-Ninety Rule"
hackers unlike bureau are honnest, don't like to lie and cheat
don't like to promise things, they don't know if they can do
don't promise more than that they are going to give their best try at it
this give language style in [Barry] p97, later copied by markering
admit that progr is development [Plauger1] p67, but customers won't accept
often claims that one should not develop own software, better buy standard SW
but configuring standard SW is also programming, has similar pitfalls
limits in the SW used found in mid of a project can crash it
claim that own is desired because of unique job is wrong
real reason for self written is independance from vendors, no lock in
ability to fix bugs or add features without vendor [PCW] 95-8p384
but price for this is that it is more expensive, but no very much
3rd alternative is to share costs by modifying free SW
you can always make it better, improve it [Levy] p126
exa ITS debugging over decade, adding features, never finish [Levy] p125
Unix also developed so, same also science, is an open end process
new must grow from the existing, this is the main reason for free SW
so that source is available, can be improved, improvements collected
but once started on a system users demand backward compatibility
once system becomes standard everything had to be compatible with it
as anything incompatible with old sys will not be bought, will fail
new systems must interact with old ones
and must offer advantages over simply buying another old type one
install of new machine type only if advantage is greater than cost
this applies even if the cost is only the work time of replacing old
so old machines will often stay in use until they fail to work
result multiple qenerations of machines running parallel
there are still XTs with DOS 2.11, Unix V7s, PDP 11s running
"this new technology will replace all old" always fails on this reality
it only adds yet another new system type, increases the mess
improvements can only evolve so long they are backward compatible
mending must stay compatible, costs more in the end, never really good
result is even worse design, process repeats itsself recursively
"every program becomes first rococo then rubble" [Raymond] "rococo"
program silting up, losing elasticity [Plauger3] p166
[Byte] 93-8p268 "its not users fault", but it is, soley, they demand
firms notice and don't innovate, success unfortunately gives them right
leads to old designs surviving, despite technical better alternatives
compatibility dominant over techn ability, exa QWERTY [Dennett] p122
but claim QWERTY ever had technical reason wrong, only convention
exa QWERTY, IBM360/370, Intel 80x86, IBM PC, MS-DOS, Windows
anec IBM also had a 68000 based microcomputer in 1983
the IBM 9000 Instrumentation Computer [PCW] 93-3p178 hindsight 83-3
it lost like everything else because it was not IBM PC compatible
this not just in computing, is a general feature of evolution
evolution creates kludges [Norman2] p122
exa mathematical notation [Bush] p243
exa weaving machine frame holes not movable
exa biology DNS-SW eye wiring in way of light
if something is wrong put it right properly
putting it right once costs less than many small changes, incremental
one big switch to right thing would be cheaper than many small steps
cost of converting often less than accumulat loss [Byte] 89-10ISEp276
calc costs investment vs sum(earn_no-cost_now)-(earn_after-cost_after)
what counts is future cost vs future gain, past is dead, money is gone
don't throw good money after bad, but that is what bureau do
wrong "gain will not be full cost", the past is lost, forget it
wrong "cost so much we must continue", accept that orig plan was error
but that requires mentality of accepting self not omniscient
on the other side incremental spreads costs, one big change expensive
hackers understand the relationship between investment and profit
exa I have changed system or OS 4 times, to get a better fitting one
Dragon->C64, C64->PC, PC->NeXT, NeXT->Linux
hackers understand the law of return on investment (ROI)
is the result worth the effort, and is something else better worth
difference to bureau is that for them cost/gain only consist of money
bureau don't understand it, despite that being their job
that hackers must tell bureau this is a shame for them
they keep on uttering phrases like "protecting investment"
exa [Byte] 93-8p268 Mossberg in Wallstreet Journal wide echo
they complain about comp not working properly, but is their fault
they claim to be intelligent but are not as smart as they claim to be
they don't behave is if they were, repetitively fall for appearances
exa getting repeatedly fooled by marketing and PR
the entire marketing and PR industry lives from fooling them
everyone makes mistakes, but intelligent people learn, get better
stupids repeat, for being so stupid they deserve to lose
anec SoftRAM [ct] 95-11p50 test, [ct] 95-12p3 legal, [ct] 95-12p100 disas
Syncronys with one dud/con product made biggest business success
elected manag of year for profit, shows how businessmen are trickable
[ct] 96-1p8 readers letters
"for a virtual world fitting products with virtual power
ideal prod for people who pretend to be doing something"
"election manag of year right, millions for nothing, good marketing"
[ct] 96-1p25 Microsoft stops Syncronys for copyright violation
test labs VeriTest, XXCAL try to do image repairing
[ct] 96-3p28 what does Win95 logo on a product mean, nothing
anec similar con attempt [Byte] 92-6p45 WEB techno, infinite compression
[Byte] 92-10p20 refutal and company phone disconnected
Systematics
concentrate like stuff, repeated structures
exa BSD and Linux select next task and task switch central in return to user
exa PlasmaDat object numbers, case-s in object type files, event loops
exa Kompal all access tests in table_access(), all user questions table_ask()
exa Kompal fields, Ctrl-W lists, Ctrl-L lists, Ctrl-T buttons form elements
exa Kompal DB fields use/owner, parent, name, data, foreign, stamp
exa Unix .xxx in users home dir vs MS-DOS *.ini in program dirs or env var
is problematic for backup strategies with just all user changed data
exa Unix IP subsystem in kernal with mult HW dependant drivers
vs MS-DOS/Windows IP subsystem built into driver as winsock DLL
if mult HW then a new DLL with support for all HW types is necessary
order code according to explicit rules, ev with flexible variations
this prevents forgetting to apply an alteration to all relevant places
and it also increases comprehensibility of code
use natural behaviour of existing subroutine collection
exa Kompal Ctrl-L on Ctrl-T field
don't force program unneccessarily, use what is there
programming directed by logic in progr, not appearances [JamesG] p55
but beware of dependencies on internal structures and bad user interface
every program resists changes due to design systematics
this is specialy so in binary only library distributions
multiple systematics in a program may be interlieved
clash of systematics can lead to problems
view systematices as multiple views on a multidimensional set of data
exa Kompal form descriptions in DB still using old number system as keys
instead of using form/field titles and unit names as keys
exa Kompal user database owner and primary key name clash, both called user
result user database can't be edited in forms system, must use SQL shell
exa Kompal Ctrl-T/W/L/E, field_getactive and MOUSE_DBL
merge multiple systematics to more powerfull ones
exa clean Lisp, Forth and Smalltalk vs messy HLLs (specially structured ones)
old chinese proverb: for knowledge add daily for wisdom subtract (merge)
analog: for features add daily, for elegance subtract (merge)
finding systematics requires the creativity of the programmer
doing so is based on heuristics [PCW] 93-11p452, requires discovering them
exa Kompal should use record access rights for user dependant form layout
doing so only occured to me after leaving project, did not get implement
requires immersion in to the code, overwiew of entire code
after changes to one place find similar places and systematically change
keep code clean&crisp, revise program regularily, throw away old code
Henry Spencer (C News) [Hauben] "int_pioneer"
it is easy to be sloppy, but it will haunt you.
the only way to clean code is constant effort in that aspect.
if you need a quick fix, go back and do it right as soon as possible.
main reason for lot of todays SW bloat/complications/bugs is no care.
rewrite a change or even entire sections when inadequacy is detected
be prepared to write off work done as experience
keeps code systematic, crisp and tidy, no spaghetti, exa Linux [Beck]
anec classic untidy Linux device driver major/minor number mess from old code
systematics are not part of language, not obvious, belong explained in comments
write down rules of such systematics as soon as they are invented
not when the prograam is finished, because you will not remember them all
Declarative Programming
the programmer tells the computer what he wants to achieve, not how to do it
a program is expression of characteristics of behaviour [Ross2] p78 (1955!)
programming tying together units of computer bahaviour, reusable components
design subroutines to allow such expression of desires
design declarative data structures to record and procedures that evaluate them
concentrate all description of variable properties of an object in one place
allows easier and faster adding, modifying and deleting of objects
convert large part of definition into data structures
declarative programming is also known as table driven programming
exa Ken Williams representation for Mystery House [Levy] p298
exa Kompal struct of arrays system, *_make() functions
in the end entire DB and form definitions in RDB, user modifiable
anec Microsoft mouse.com driver to add SuperEGA modes I RTFBed it
I expected a table of parameters and routines
with the intention of replacing one line by desired mode
but I found a hardcoded chaos, code like that from a junior programmer
I gave up altering it, switched drivers mouse cursor of, did own drawing
if this is representative for Microsoft code then I know why it is so
big, slow, unreliable and takes so long for them to modify
since then the newest mouse drivers have grown over 100%, guess why
generalise data structures to an interpreted procedural language
exa Ken Williams ADL for Wizard and Princess [Levy] p301
exa Columbia Commander single keypress driven graphics program
my first program, was a graph program for speeding up drawing design
exa C64 SOSP (sound and sprite) commands as strings to interpret
exa Tcl one basic interp instead of many diff weak languages [Ousterhout]
is an interpreter with basic commands and hooks for additional commands
convert data structure processing procedures into commands of an
interpretes descriptive language, leads to special job specific languages
fourth generation languages (4GLs)
the desired program is then written in this job specific language
declarat progr also known as metalinguistic abstraction [Byte] 88-2p214
general purpose tool and one usage vs special purpose progr [Ross2] p103
declarative programming and 4GLs speed up programming
because code lines per hour is constant for a given programmer [Brooks] p94
note the constant varies by factor 1000 (!) [Raymond] "superprogrammer"
independant of the programming language used (Asm, HLL, declarative/4GL)
and declarat/4GL require least code lines (more integrat, hidden detail)
but tools can be very restrictive of change, specially binary-only 4GL sys
also problems with product terminations, because of proprietary languages
anec cast in binary analog to cast in cement, only changable with much work
for expandability of interpreter code use hooks [Raymond] "hook"
hooking is also called vectoring [Brodie], is a form of controlled SMC
exa C64 Kernal and Basic jump vector tables vs 1541 floppy none
easy to add drivers to C64 Kernal vs rewrite entire floppy for drivers
raw machine code is still the easiest language to implement hooks in
you can patch any routine in memory, by replacing its machine code instr
but most HLLs do not allow easy hooking
exa in C use indirect call via an function pointer, must be anticipated
nice would be the ability to hook a function name, redirect it to new
OO comes fairly near with subclasses "hooking" methods in superclass
but hooks only for obj of subclass, not for superclass and other subc
declarative vs procedural is actually only a question of point of view
Fortran was once regarded as declarative (statements, not instructions)
desired target, concept, plan, operations, formulation, execution
Object Oriented Programming
[Byte] 89-3p231 what is in an object, [Byte] 90-10p206 object lessons
[Byte] 91-9p325 are Windows and PM OO systems
[ct] 93-3p202 OOP-systeme, [ct] 96-4p330 objects, program design
[ct] 2002-23p218 Ruby
[Uo] 95-2p126 Perl 5 objects
objects are chunks of data with the routines that act on them
anec OOP originally invented for discrete simulations, Simula [Baron] p347
objects are state machines, each object in memory has a separate state
they have routines that operate on them, modify them, called methods
methods of one object trigger methods of other objects with messages
objects of same type are grouped in a class, each class defines methods
objects belonging to one class are called instances of that class
objects of diff classes may have equal named methods, called polymorphism
exa Kompal ptr to table-form-window in window, to column-field in form
proper method chosen on message send, is form of data driven programming
OO rotates modularity of code in datatype/operation matrix
objects reduce "if"s, hide decisions in indirect calls via class pointers
this leads to more readable code and less bugs
exa plasmadat many if tables vs main set procedure
is analog advantage of [Brodie] maker/doer, but fundamental, needs virtual
related classes share code with class hierarchy, subclasses, superclasses
multiple superclass problems with conflicting variable/method inheritance
exa CLOS first name in superclass list has priority [Abelson] p198
fragile superclass problem, if subclass variable offsets in an object change
all subclasses must be recompiled, except in sys with dynamic binding
pure OO languages vs hybrids
the first only have objects, OO syntax, the later are extended procedural
exa Simula ext Algol68, Smalltalk pure, C++ ext C
one of OO greatest claimed strengths is ease of code reuse
reuse is not a OO invention, contrairy to the claims of OO fans
good programmers have reused code since the invention of subroutines
OO simply makes it easier to arrange code for reusing it
biggest barrier to reusing existing code is not knowing about its existance
programmer will not look for reusable code if they don't believe in finding
will only if finding is percieved as success [Byte] 91-5p26 letter
note that the programmers perception of situation matters, not reality
exa MIME mail BASE64 decoder, I wrote it in 3.5h, Davids answer took longer
with ever better (faster) coding systems reuse becomes less realistic
in the meantime I have found that the Linux uudecode also can do base64
often simply assume a manufacturer has all, dependancy, exa NT SW slave
I asked about this in ETH OO training, the professor had no answer
real reuse is out of question, only in-house where good documentation
OO is supposed to save code and space by faciliating code reuse
OO as all encompassing sys must serve every need, requires very general code
objects and subclassing is supposed to be flexible
but subclass methods only pre-/post process, no access of internals
"flexibility" fails when for example x/y graph treated like Corel objects
lack of integration, separate applications are bad
real OO needs expandible system, code patches like Lisp
but base objects must already have flexible mechanisms, exa coord adjust
gives all the famed closed SW problems, but user loses his guard
fails to do this, must be extended, often not possible because closed
leads to a veritable explosion in system size, problem of no standards
OO requires all routines to be associated with classes and so object types
seems to be an "everything is an object, so we only need methods" attitude
this is as annoying as an "everything is a nail, so we need only a hammer"
attitude, forces users who only have a hammer to treat everything as a nail
this leads to lots of "pushing on a rope" style contortions to get code going
but tools are supposed to help a user, not get in the way
not surprisingly quite few programmers dislike OO stuff been forced on them
anec switching to OOP is not a magic cure for all programming illnesses
[Byte] 90-10p209 silver bullet, [Byte] 95-8p74 OOP design methods
[EDN] 92-7p138 HP OOP experience, 38 guidelines
OOP allows more complex structures to be managed by the programmers
better systematics lead to real OOP power increase, exa MVC in Smalltalk
anec first OO concepts hidden behind jargon, as something totally different
was result of completely opaque language [Byte] 91-10OLp72 doublespeak
the evolutionary process that lead to OO programming style was invisible
this made OOP a lot more difficult to learn than neccessary
I had to wait until objects implemented in C article [Byte] 90-10p226
Debugging
[Byte] 85-3p350 history of word bug, [Byte] 94-4p308
or does it derive from medical terminology
[Byte] 92-2p344 real time computers out of control
[Byte] 94-7p191 Pentium code execution collection
[Byte] 95-12p48 reasons for bugs, attempted corrections, exa air traffic ctrl
[Byte] 96-2p18 leter about air traffic control situation
[Byte] 98-4p60 why PCs crash, [Byte] 98-7p52 Y2K problem survival
[ct] 97-14p102 Y2K problem, [ct] 97-16p74 troubleshooting not working PC
[ct] 98-19p156 software bugs, [ct] 99-1p60 Y2K, [iX] 99-3p130 Y2K
computers do exactly what you tell them to do, not what you intended to do
the result of this will often surprise you [Dawkins] p51
seldom it is a nice surprise as for Dawkins, mostly it is undesirable
computers execute programs like cooks execute cooking recipies
programming is like writing a cooking recipy
to get it right the recipy writer must know how to cook
same programmer must now how to execute a program like a computer
debugging makes you a realist, else you drown in bugs, crash [Zopfi]
anec similarity cook/progr is why many woman in comp are progr, Ada first
with exeption of trivial programs, no bug free program has been written
this can not be expected to change in near future
as soon as you write first non trivial program, you will encounter bugs
this happens to every programmer, not just with bad luck or no talent
only those that do nothing make no mistakes
but good people learn from mistakes, don't repeat
we can only try to be as cautious as possible, avoid known pitfalls
debugging is really what programming really mainly consists of
often requires largest use of time in a project [Ward]
in projects that grow towards an unknown end all programming is debugging
same also applies to projects where defined end keeps on being revised
anec programming debugging an empty file [Raymond] "programming (1)"
in a sense the job of a programmer is to get computer into a desired state
as computer is preexistant but incomplete programming is always debugging
because bug hunting takes so much time, doing it effective is important
finding bugs requires diagnosing situation, recognising what causes them
when writing programmer is in craft mode, for debugging in detective mode
diff type of thinking, we have got a program here, what does it do [Ward]
don't assume it does what it should do, that is only the ideal case
the most crucial ability of an effective programmer is not analysis or design
you can partially substitute bug hunting for a&d, not the other way round
this is comparable to good error recovery vs attempted prevention in mech
lots of brilliant thinkers fail at programming because of this
this is why most hackers are self trained, not from formal backgrounds
[Raymond] hackers educational backgrounds
anec hacker pick up details fast [Raymond] Personality Characteristics
comp not really random, just very complex, compare with medical training
mental models of a program are only approximations of true system behaviour
recognising the cause of a newly found bug is recognising effects
requires lots of knowledge about behaviour of diff pieces of code
designers can't entirely predict results of a program change
this is because a computer is a chaotic deterministic device
debugging is based on experience, detecting similarities with experiences
but for new stuff no experience exists, not possible to predict outcome
but there do exist a few usefull rules of thumb
prevent bugs while writing
use variable names that become illegal when a character is dropped
exa naming of references in this text, mult of same author all numbered
type in complete programming language structure, then the stuff in between
exa both parts of a bracketing code structure
while..end, for..end, malloc..free, open..close
for making this easier and less error prone editor with templates
inserts all of template with one key or expand a short code to template
then go to first field, user fills out field, then go next field
the template contains markers as targets for jumping through fields
LSE even has templates for filling in C library funct call parameters
unfortunately no overview of template relationships, diffic to learn
NeXT Edit templates, not used because disable auto-indent, more work
in the same vein also use cut and paste for entering already typed names
exa could prevent PlasmaDat dBase name in DB def and progr diverging bug
reduce amount of bugs at any time
implement program incrementally, iteratively, further reason for bottom up
expand functionality in clearly defined steps
divide extensions into cleanly divide functions
hierarchy of functions, give layers of code, start with lowest, build up
be cautious with code techniques known for bugs
global variables may not have the expected value, initialise them
never read a veriable that has not been written to at least once
before doing detailed init, set all globals to a known value
this value should be chosen to be highly visible, show itsself in dumps
anec [Raymond] "DEADBEEF", [Raymond] "fool"
lots of repetitous code is good at hiding lots of bugs
one set of heavy used code with parametrisation makes bugs visibler
this is a further reason for using systematics
also when one bug has been found, check other possib places [Knuth] p277
arrays have static limits, catch overrun errors with tests
array size and test size deviation problems, use symbolic constants
arrays are accessed via address arithmetic, leads to
fencepost err, zero/one-based indexing
off by one errors [Raymond] "obi-wan error"
more generally run away bugs, exa Kompal sizeof(menuitem)
dynamic memory all problems that appear with arrays but additionally pointers
many forms of pointer bugs, list in [Raymond] "overrun screw"
null pointers (never used or reset) may destroy data or protection fault
on processors with memory protection progr ev terminat with access violat
on processors without memory protection random overwrite, incl OS
exa graph.c wrong pointer initialisation kills MS-DOS IRQ vector table
after dealloc of memory dangling pointers, combat with resetting to null
else when memory realloced further use may give hidden bug
smashing the stack, data, code and similar things
possibly only exposed on different compiler or even different OS
memory leak from not deallocated blocks w no pointer (lost track of them)
anec ChS PlasmaDat TIFF2EPS forgot free, crashed MS-DOS on second run
pointer aliasing bugs (dual pointers to same memory block)
dealloc when one of them is still in use gives a danglin pointer
exa Plot.c freed memory still used by clipboard, 10 crashes in 2 hours
until I saw that Windows releases mem, not the program calling
mem managment is one of the most common bugs in computing [Garfinkel2] p205
increment pointers at stable times [Brodie] p81 editor display messed up
also right beginning value, terminating value [Raymond] "obi-wan error"
catching bugs
use locality of case to effect
lexical, execution time, memory address
mistrust compiler errors messages
line number of message no guarantee for place of error
only shows when compiler detected something amiss, error latest that line
same caution also applies to the type of error claimed in message
good compilers don't say "here error..." but "here I'm expecting..."
especially right when cause is a missing ;, {, }, /* or */ in C
distrust messages after first even more, cascade errors [Garfinkel2] p182
use "can't happen" tests, generally sanity check [Raymond] "sanity check (2)"
[Byte] 88-12p299 credibility to spreadsheets with simple validity tests
small time loss vs great increase of reliability [Byte] 90-12p420
they show up much more frequent than expected [Raymond] "can't happen"
use torture tests, extreme cases [Knuth] p266
TeX exposed bugs in every Pascal compiler [Knuth] p268, [Raymond] "TeX"
for tracing how a program is getting along, for debugging output use
variable dumps by print instr built into progr [Raymond] "bread crumbs"
home in onto a bug with a binary search technique
to avoid editing and recompiling program use debugging tools
exa on Whirlwind mistake diagnosis routine (MDR) [Ross2] p61
exa on IBM 360 TESTRAN [Brooks] p57
make clearly visible interruption in detected error case
abort with clear error message when a error is detected
even better log all detected errors, is wide spread in mainframe world
exa BSD syslog, NT error logging [Byte] 96-4p183
include info about code to edit (source file, array name) in message
in C preprocessor #include non existant file and error message in /* */
but these techniques of course require programmer forsight to be inserted
why testing fails so often
people expect programs to be bug free
when they find bugs often remark "but the programmer should have tested"
programmers try to test for and detect all bugs
but they can only test for bugs predicted from newly written code
"what may be influenced by this change"
debugging driven by the programmers assumptions about possible bugs
is limit from preconcieved ideas about failures that counts
every experimental measure (incl texting) driven by imagined faillure
all predicting of effects of a program edit requires experience
chance side effects only known after chance discovery later
exa Pentium bug FDIV, table transfer not recognise as possible error source
[Byte] 95-3p163, [ct] 95-1p20, [ct] 95-7p186
every non trivial design has bugs as result of this
exa Hubble mirror bug, measuring equipment not recognised as pos source
all complex chips have bugs
exa NC4000 interrupt loses 2nd word of 2 cycle instr, crash [Ting]
exa Intel 586 FDIV, 486 IRQ, 386 MUL32
286 stack expand [Dewar] p347, 186 MUL [Dewar] p348, ...
but most manufactures publish bug lists, not Intel
the real problem was Intels secrecy and slow reaction, not bug itself
Intel tried to hide bug reports instead of publish them
is part of general problems with Intels behaviour in the 1990s
con chips [ct] 486SX Intel-ligenztest, high pricing, litigation
announce long before availability [PCW] 93-4p502 Pentium
anec managers guide to Internet from Intel employees [PCW] 95-3p641
anec PR desaster "unlike other chips ours don't need recall"
[Byte] 95-3p10 mutant chips
exa [ct] 97-13p30 Cyrix 6x86 hidden CLI bug
exa [ct] 97-14p24 Pentium F0 bug
program bugs vs design errors in other engineering dicipines
SW bugs (and HW logic errors, exa Pentium Fdiv bug)
are digital, either 100% right or 100% wrong (= 0% right)
contrast this with traditional engineering, exa mechanics
are analog, errors slow degradation of function, exa fabrica tolerances
also traditional engineering has lots of experience with systems behaviour
exa materials, today reliable forcasts of behaviour
but not long ago, exa De-Haviland Comet 4 (or 5) wings breaking off
in SW not possible because constant change due to rapid progress
SW also problem with complexity, stuff spread all over the place
beta testers, users can only test randomly, also only chance discoveries
for recreating bugs found by users record user input into a log file
impossible to "test in" reliability into exist code [Raymond] "test (2)"
it must be designed in while writing the program from scratch
but doing this also requires programmer predicting possible problem causes
this will also never lead to guaranteed bug free programs
but also [Feynman3] p176 NASA SW testing success, no bug in space
vs [Byte] 91-8p72IS31 ESA software design cycle, but Ariane 5 bug
[ct] 99-5p108 NASA on board control computers
[ct] 2000p21-92 Voyager on board computers
automatic test tools (regression testers)
simulate user input and compare actual output with expected
require the programmer to generate test sequences, also experience
problems with change of desired output (often the reason for progr changes)
tools often such a bind that programmers doesn't want to bother with them
theoretical attempts at mathematical program proofs fail, only in ivory tower
correctness proofs themselves bugy [Knuth] p269
finding all bugs is therefore only an ideal to strive for, no reality
designing for bug recovery
expect programs (specially new ones) to fail every so often
expect users to make mistakes, crashing programs as result
reduce the bad consequences of failures, simplify recovery
store date in humanly readable form (ASCII, not binary) if possible
this allows the users to diagnose error and write repair programs
if not possible build in ASCII export/backup procedure and use regularily
also use humanly readable (ASCII) network protocols for tracing, exa SMTP
use humanly readable config and initial files, like Windows, not WinWord
this is not only important for in case of bugs striking
but also to allow conversion of data to new system, avoid vendor lock in
it also allows them to add quickly needed extensions
data is most valuable part of a comp sys [Byte] 90-9p323 Grace Hopper
users don't see this, [Byte] 91-5p169 how do you value your data
prepare yourself for recovery, with backups, test on scratch data
don't use live data else big damage [Raymond] "scratch monkey"
in cases of severe failure damage run multiple systems in parallel
have each designed by different teams independant of each other
exa aircraft or power station control systems
Documentation
design/review info, remember unsolved stuff while writing, work methodics
prevent forgetting things you once know you've got to do
lots of bugs when found lead to remark like "oh I saw that and forgot it"
strategic use of comments while programming
use a special comment form for easy finding with grep or similar
also a todo.txt file for stuff you need to do, helps avoiding forgetting it
or included in source file as todo comment section at beginning
in projected row of doing it, should tell reasons for doing in that row
show dependancies of various job to be done, priorities for them
not only for program changes, also sys admin, user group jobs, writing book
also to not forget physical jobs, I put stuff todo on a shelf in my room
also use notes in a palmtop note database for portable remembering
is portable, can be updated at any time when a idea strikes
using agenda to not forget is one thing hackers should learn from manag
engineers have a similar tradition, engineering notebook [Clark] p361
anec did you know that the Filofax was invented by a nurse in the WW I
record what you have done and why in a separate done.txt file
keep it up to date as it records experiences, reasons why you did something
also tells you what you did with the time when manager wants justification
logging such information costs a negligeble amount of time [Knuth] p261
is a nuicence to remember, breaks flow of work, but important like backups
when a project is finished archive all of the stuff produced
just leaving everything on an overfilled HD will give space problems
also will be deleted when new person takes over the computer involved
store all files produced on floppies/tape and put into folder with paper docu
also binaries, the old source, the tools used, the machine configuration
don't forget effect of new program versions not reading old files
success criteria can you recreate exact state of progr delivered long ago
all stuff (bits and paper) store in office, run out of space, no one can find
when new person in office no one knows, later it all gets thrown out
requires good central archive for storing, labeling for refinding by others
then either check out or make copies, copying devices should be available
archiving for later referral, store and publish all milestones
even better tracability all versions, diffs for space, RCS for comfort
but beware of intrusive bureau documentation systems annoying users
exa IT QS rules how to divide docum into chapters, chapter heading titles
but I prefer to arrange all documents chronologically, avoid categorisation
most of the other intended users also boycotted the system
exa IT QS error form to "help" engineers to not forget things to do
but it violated their social expectations
forms are for answering questions of bureau, notes are for reminders
none of the intended users of this form were asked if they wanted it
nor were they informed of the intentions this form was for
the forms were to be handed in for storing by boss, not personal storing
vs notes should be treated as personal memory, not public record
many complained that this was a system for looking over their sholders
disguised as a QS, that it expressed misstrust in them by managment
generally users didn't make use of QS, find "reduce time waste" methods
a system that the intended users try to avoid is a clearly a failure
forcing something on intelligent workers is hated, it usually backfires
everyone sabotaged this system that was intended to help them
better spread suggestion, let users implement method fitting to their use
when time for reevaluation arrived, users were not questioned either
anec when I left the firm I had a talk with the designer of this form
after hearing problem he said he would publish better info, forgot it
perhaps he should have logged the complaint using one of his forms
actually perhaps he did and put it into bosses folder and forgot it
anec "quality in managment" meeting, presenter forgot his foils
their idea of qualitiy does not include error reduction to this effect
Programming Teams
big jobs can not be written by one programmer, they require a team
this brings in problems such as team size and work distribution
use small teams of good programmers [Levy] p88
exa Algol group of 8, no formal structures, just common sense [Perlis] p79
exa Basic and DTSS developed by students, few of them and fast [Kurtz] p520
exa Macromedia (Director) optimum size 5, maximal 10 to 12 [PCW] 96-4p196
good programmers are central to good SW [Byte] 96-1p218
not human wave of unskilled droids [Raymond] "Mongolian Hordes technique"
because large organisations get bogged down in organisational quagmire
too many programmers on a project, takes longer, ev infinite [JamesG] p47
adding manpower to late projects makes them even later
programmers are not fungible (chunk of workpower, replace/addable at will)
same as 9 women can't make a child in 1 month
known as Brooks's law [Brooks], [Raymond] "Brooks's Law"
some people actually slow project by requiring others to do damage control
[Byte] 91-10p330 Gordon Bell on startups going belly up
for large projects with many programmers Brooks operating theatre [Brooks]
exception TX-0 assembler convert to PDP 1 [Levy] p54, [Raymond] "gang bang"
this worked because of hackers skill, motivation and a clear target
exception GNU project, Unix tools and Linux kernal
this worked because of many independant parts, clear interfaces
divide work by the abilities of the programmers involved
let programmers organise themselves along abilities and interests
this gives good motivation, then high productivity results [Levy] p121
let them arrange interfaces between themselves, exa Fortran [Backus] p34
many programmers and few managers gives productivity [JamesG] p87
exa Alto project [Thacker] p268 environment success
[Lampson] p294 milestones/millstones, [Lampson] p331 no detailed plan
exa ITS, Lisp, Emacs, Unix and Linux development
Bureaucrats and Managers
good bureau serving vs bad ones ordering [Plauger2] p127
hackers see two types types of people in the world
those that do real work, produce wealth, inluding hackers themselves
and those that impose themselves, but contribute nothing to wellbeing
bureau split along these two types
usefull, help workers by offloading stuff that they can do, liked
exa secretary, post service, material supply, janitor, good manager
annoying, hinder hackers work by getting in the way, hated
exa most managers (esp upper), book keepers, jurists (patents!)
usefull/annoying from techie sociology, meritocracy
the more ability/usefulness one has, the higher one stands
bureau are cheaper than equal amount of techies
more efficient for low work that would be a waste of the expensive techies
but when bureau waste techies time and do wrong stuff, gain is lossed
relative views of their importance are not compatle
bureau believe: hack 1 (alone 1), h+b 10 -> bureau +9 (alone 9), 1<9
hack know: hack 1 (alone 1), h+b 10 -> bureau *10 (alone 0), 1>0
compare HI-FI phono and amplifier, phono (source) alone works, amplif not
anec sister (bookkeeper) satiric "but we are ones who get the money"
many bureau hide behind arbitrary rules, designed to control [Levy] p41
they lack acceptance of things not under their control
attempts to control others [Levy] p41 prevents them from being self
result wastive fights for power, no good
in Europe we have a term for such control freak bureau, corporatshik
but such attempts to control are a delusion [Shea] aneristic delusion
bureau try to rule where they don't know the land, its rules
vs should offer service to those that know what they are doing
Peters Principle, go up career ladder until become incapable, then stay there
then blabla, to defend their fiefdoms, damages techies/cust/firm, everyone
this problem comes from the bureau career ladder, is a null sum game
vs techies used helping each other, because all gain from it
hackers spend time fighting technical problems, learn to help each other
vs bureau spend time fighting each other and customers, no helping
Woz at EO party complains of secrecy and stiffling bureau [Levy] p387
Woz complains that IWM chip is not freely available [Byte] 85-1p168
hackers are forced to do things right by crashes when they are done wrong
hackers learn honnesty from be found out vs easy macho [Feynman2] p342
honnesty becomes part of persons nature, shows in all situations
vs bureau can often make excuses, are far less forced to think correctly
profession has also effect on social abilities
bureau conflict human-human (evolving) drives them to more subtileness
vs hacker human-computer (dead) doesn't drive them in that direction
profession has effect on experiences in life, views of world, behaviour
anec the French have a nice term for this, "deformation professionelle"
for profession-related damage to the behaviour of a person
desire for control vs serving leads to bureau reliably doing wrong
in commercial businesses profit vs serving increases this tendancy
hackers could tolerate bureau if they didn't keep on getting in the way
why bothered by uselessness so long untroubled programming [JamesG] p105
good managers know their relative strengths, programming vs infrastructure
exa the lower level ones I had at IT, but not the top ones
understanding technology behaviour is main knowledge of a hacker
it is the precondition to being able to design a successfull product
programming is mainly debugging, hackers aim at being good at it
understanding peoples behaviour is main knowledge of a manager
it is the precondition to being able to run a successfull business
managment is mainly people relations, managers should aim at being g a i
anec Rokoff half time personel, exa get heating right [PCW] 93-2p451
managers that fail to understand how people function regarded as failures
anec Brooks from Brooks Law was a manager (of IBMs OS/360 project)
the entire [Brooks] is about human limits, about getting best from them
work is split, hacker knows technology and how to put it to use
manager knows business and how to find good techies with solutions
managers should shield hackers from market fighting
same as hackers shield managers from technology details
anec [PCW] technology awards, critic hackers for not going into business
but hackers regard becoming businessmen as the worst thing possible
want to hack, play, if you want their input give them better sand box
what about these critics building a business interface layer to help them
working together, interface between hackers and managers is a project
exa Sutherland seller-inventor relationship w Sullivan [Levy] p291
Sutherland was then a good manager, knew his limits [Levy] p293
but after MBA he became ignorant, failed in Sierra [Levy] p361
formal management training is mental mutilation [Raymond] "lobotomy"
some managers criticize this view of job splitting
claim it is techies fault when they are disappointed from expected service
but they are wrong, techies are their customers, they should serve
firms customers doesn't buy managment, buy product from fabrication
fab "buys" design from engineering, eng "buys" leadership from manag
managers talk about quality, define it as "what the customer expects"
but they themselves don't even recognize who is their customer
despite being exactly those constantly complaining about cust satisfact
result managers are one of worst professions at customer satisfaction
good managers recognize the importance of their technical workers
exa Bill English recogniz as who gets things done [Engelbart] p201 and p203
exa Macromedia Colligan spends lots of time with engineers [PCW] 96-4p196
good managers know they can't underst techno arguments, no common experience
evaluate techies for trustability of their ablilities and ideas
learn which techies have a history of successfull ideas, trust them
and then rely on the hacker to know technology better than the managers
if they don't know techie in question, find manager they trust who does
for techies in other departments find out who that depts managers trust
learn which other managers have hist of success choice, trust them
unfortunately many don't, have no trust in hackers, require arguments
hackers must waste time explaining to them or live with wrong decisions
often better technology can not be explained, because managers don't have
the knowledge base to understand the arguments the hackers know
exa Grace Hopper difficulties getting compilers accepted [Hopper] p14
also hackers usually have fairly weak social talent
too weak to present arguments for better decisions, exa Ris at IF
it should be job of manager to anticipate this and help bridge gap
also requires hackers with good ideas to also be good at selling them
hacker must know technology, its application and how to sell to manag
while manager believes he must only know business, nothing else
but with sales dishonnesty and hackers hating selling behaviour
do not want to behave like that, it is against their value system
the result of all this are missed opportunities, frustration
innovative workers with vision are available in inductry
but the bureau infrastructure prevents them from acting, doing their good
exa me failling on Internet project because no finance, no support
exa my desire to use Intenet SMTP mail instead of MS-Mail
as result the only visions left in indust are the pipedreams of managment
the sort of "we are going to be the market leader", without idea how
2 types of persons in firms
those who understand the technology but are not allowed to manage it
and those that manage the technology they don't understand
problem with competencies given to without competence = understanding
decisions are made by those who know the least about how to decide
firms where this happens too often are ill with bureausclerosis
bureausclerosis is like cancer, spreads until it causes death
can seems to be only slowable, no curable, or only with large revolut
IBM near death, Intel and Microsoft still have it in front of them
hackers should not take managers technological decisions as serious
when they are not based on in-depth understanding of the issues involved
exa Heinz critic of me dropping Christians scan interface
soley on base of this being a rewriting, but only 1h work for better UI
after I changed it against explicit order he agreed change was worth it
unfortunately some can't be circumvented
exa Heiny critic of me wanting Foxpro to replace DbaseIV for PlasmaDat
good managers create an environment in which techies can do their work
exa Bill Keister sandbox philosophy
talent, facilities and then leave allone [Griswold] p612
begnin neglect [Griswold] p652
exa same with Unix developers, do what you want [Salus] p299
exa Alan Kay for innovation rub smart people and money together
don't disturb them by overmanaging, getting in their way
innovation requires creative workers in an innovative climate
managment that gets rid of bureau hurdles, frees workers to innovate
not like in IF and IT where workers founder on bureau hurdles like money
exa IBM PC team use of a manager to ward off superiors [Byte] 90-9p414 PC cre
anec PC project not regarded as important, no managment dirigism
when PS/2 project importance was known to managment, they screwed it up
no technology leads to nowhere, but managment has more chance of sinking it
successfull firms are often so despite managment getting in techies way
failled firms usually do so because of managment getting in techies way
anec Hannes Keller success = techology * mangment^2 = content * show^2
anec fathers claim managers not idiots, are intelligent, hardworking people
but all my colleagues report seeing the same mess as I have seen
and hardworking is useless if it only gives hectic trampling on the spot
good managers give a clear description what is wanted, and why so
explain success criteria so techies can check for reaching them
bad managers check, worker changes, m recheck, arbitraryness, frustration
Programming for Others
if a program doesn't do what the user wants it to do
then even the best written program will not be successfull
general rule for good design is to write the program you want yourself
the programmer is stimulated when the result is personnally desired
try out ideas, consequences on real systems, not toy systems [Thacker] p269
designers/implementors as users gives fast and detailed feedback
generally all innovative programs came from new user type entering computing
these know what they want to accomplish, that is not yet accomplished
existing users already have what they want or want incremental improving
but no guarantee that such a program will spread to other users
exa Augment difficulties with spreading, lost on others [Engelbart] p229
exa programmers are good at designing OSes, filers, editors, mailers
exa Spacewar hackers wanted joystick operation
as they were the authors they could easily add it [Levy] p64
exa ITS designer implemented and user designed [Levy] p127
exa Arpanet, TCP/IP, Internet from scientists who wanted them [Roberts] p170
all other users discovered how good it was and also used it
vs OSI classic case of big bureau design missing target, failing
exa Arpanet/Internet Mail quickly biggest bandwidth user vs X.400 failure
exa Unix 1969..79 under control of designers and used by them
kept ideas in hand while accumul competent users [Hauben] "evol_unix"
exa BSD Unix, VM, vi and fast TCP/IP from Bill Joy at Berkley
exa sendmail Allman "write the program you want to use" [Salus] p145 and p230
exa GNU tools are written by people who want improvements over Unix originals
exa Alto effective design if designers use their own systems [Lampson] p296
exa HP calculators "solving problems for others like us" [House] p433
exa TeX designer must participate in implementation [Knuth] p250
and also be the user [Knuth] p261 and write the manual [Knuth] p262
exa early PC SW, by people who wanted it, knew aims, primitive but good
today PC SW by SW firms, "it is a $xxxx market, we want a share", no clue
exa CP/M from Gary Killdall, MS-DOS clone from Tim Patterson
exa spreadsheet not from Alto group, no use for one in a lab [Lampson] p299
came instead from Bricklin and Frankston [Byte] 89-12p324
anec finance professor thought it wouldn't sell, he had no clue of users
actually spreadscheets already on timesharing [Byte] 95-12p20 Omnitab II
exa good games from hackers who themselves play games, not pros [Levy] p411
exa Mathematica from Wolfram, Mathematician, for own purposes
exa Linux from Linus Torvalds, he wanted a Unix for his 386
exa HTML/HTTP/Web from Tim Berners-Lee at CERN, for his physics data
exa Mosaic from Andreessen and Bina at NCSA [PCW] 94-12p380, [PCW] 95-2p295
exa Java from Joy and Gosling at Sun [Gilder]
anec Bill Joy the really smart people don't work for you or anyone else
be prepared to find them externally, also fitting research finance policy
ideally everyone would write their own programs
but not everyone has the talent, knowledge and time for writing programs
so someone else must do it for them, professional programmers
users know the job the program should do, programmers don't, must find out
users of a program know their jobs better than managers or analysts do
find yourself a competent and representative user or small group of users
if you use a group specify exactly which issues you ask which user for
if you don't do this you will be caught up in their opinion wars
this interface user(s) should have a broad knowledge and good connections
more important than having deep knowledge, that can be gained from others
also this user should believe in using the computer to ease their job
user involvement right from the beginning, exa Cobol [Sammet] p239
not just "user feedback" after finished, then it is too late to correct
ideally design team should be lead by users, programmers as their helpers
users often don't know what they can expect from computer, or its limits
beware of users dream features list without relative importance marked
mostly programmers bounce ideas off of users [Brodie], but also other way
don't trip over ideas how progr should be from last project, users differ
beware of trap of trading off usability for lower cost [Norman1] p156
complexity of design, many trade offs, everything programmable, but cost
customer pays or loses feature, must have full decision control
everone else in between (managment, marketing) is in way
both must learn from other (programmer users job, user computers abilities)
in such a situation good design results from evolving interaction
between a programmer and an user [Raymond] "creationism"
exa Apple from Stephen Wozniak and Steven Jobs
exa Microsoft Basic from Paul Allan and Bill Gates
exa PC word processors from programmers and authors, exa Jerry Pournelle
exa Visicalc from Bob Frankston and Dan Bricklin
exa Mosaic from Eric Bina and Marc Andreessen
exa Java from James Gosling and Bill Joy
this goes on while entire project, expect targets to change as result
don't trust old waterfall programming method (spec, design, code, run)
jump back and fore between the tasks, nearing target, spiral method
a specification is a attempt by the programmers to collect the users knowledge
[Uo] 95-5p124 specification/prototyping methods
the users must read the spec to verify that this has happend properly
for this spec must be written in a language the user can understand
write specs in a language or symbolism that derives from users world
if this fails the best progr skills will not prevent project failure
"specify desired result objectively", how, there is no common language
this is also why great diagram drawing tools are a bad thing, mislead
anec this method screws up so reliably that it is used deliberatly
[Raymond] "math-out", [Raymond] "MEGO"
exa PlasmaDat
first a big formal spec was produced by managers on both sides
no one understood it, neither the users nor the implementors
first I developed an form based DB viewer/editor
which worked declaration driven, independant of the form and filed names
I had learned at CSD that DBs change often, progr need this flexibility
relations and DB schemas were only used as internally
for designing a temporary database, not shown to user
then I did user questioning for real specification
the end user was asked about desired outputs
these were in the form of user written example outputs, used as spec
later the user even directly designed new on-screen forms
then the definitions in the program code were adjested to fit
PlasmaDat liked by lab workers for its helpfullness
but the project was axed by their managment because it lost belief
it should have compared future costs with gain, not incl past costs
exa InnoDat
was a derivative work from PlasmaDat (structure, tools, name)
the only spec was "it shall work like PlasmaDat but with our database"
the database required was designed by ChS, while I stripped PlasmaDat
then I entered the new definitions into the resulting shell
ID was delivered quickly and worked from begin to the users satisfaction
later it was extended by ChS with many special functions
just as final vers had been in use 6 months, IT was downsized, ID died
the secretaries that used it claim that it was better than new sys
anec ID replaced late and unfinish progr, users said they couldn't use that
how am I going to remember usage of something so complicat [Norman1] p188
exa Kompal
customer wanted modification of existing program, written in house
this exiating progr was spaghetti, only orig author could modify, no time
IT declined doing modification, only offered to do a rewrite, new system
this should not only do new calculation but take over all existing
Kompal became a victim of 2nd system syndrom, perfect system syndrom
official planning phase to draw up a specification
was terminated by customers manager who wanted to stop open ended process
customer cost pressure to stop specing [Plauger1] p65
"there is never time for proper design, but allways for mending it"
bureau demand the cheapest possible, then complain about it being bad
Peters only interest in the specification was the maths, input data for it
spec failed because contents (an ER Diagram) was not user readable
users don't understand cybernetics or data/process analysis
but social factors lead to none of them complaining
biological flee/freeze/fight in human society leads to freeze
no one wants to admit publically at failing to understand spec
everyone just nodded, this was missunderstood as acceptance
then the programmers implemented, the catastrophy took its course
then everyone complained when 1-n relationships were chosen wrongly
avoid formal conference settings, trigger social fear [Plauger1] p219
interface to be "based on" PlasmaDat, not regarded as great development
customers manager only interest was no function keys, that not Mac like
no word about how the intended users work, no visit to them
later I asked 4 times (twice in front of the customers top manager)
to visit users to watch them work with old system and interview them
to find out how they work, how they thing, what they need
my request was never granted, so I wrote what I thought would fit
later everyone complained that user interface didn't fit work style
anec others have made similar experiences with that manager involved
custom software is like custom clothing user must go for fitting
if you want custom software made you must go for fitting, like clothes
user involvement in programming work
split the writing of a program between programmers and users
this is known as the toolsmith approach [Raymond] "toolsmith"
see design rules in declarative programming chapter for rules for splitting
this is a further reason for using declarative programming
programmers write the difficult stuff, complex routines that do the hard work
core code and data structures operated on by this
exa kernals, device drivers, shells, tools
these routines do the heavy work, fast because efficient compiled code
they are expandable by other programmers
design these so that the scripts are as simple structured as possible
is triggered by user code, scripts, macros, query routines
not just set variables to constant, set to a function, progr code
exa Emacs M-Lisp [Cameron], TeX [Goossens], [Walsh], Lotus 123 macros
extend this to an interpreted script language, exa Tcl [Ousterhout]
task oriented language with embedded tools
interpreters simulate a virtual machine
is most flexible organisation of any control system
programmer includes prebuilt scripts, modifiable by user if desired
slow because interpreted, but not much work to do, so it doesn't matter
users write/modify the easy stuff, scripts (such as form and page layouts)
[Kay1] p262 feature ridden inflexible (cars) vs maleable medium (paper)
[Kay1] p262 Dynabook divide problem, medium by designer, finishing by user
[Byte] 91-2p203 Kay Dynabook revisited
[PCW] 89-2p185 EuroPARC user tailoring SW
this avoids programmers doing boring and bug endangered work
often easier than user writing spec and programmer converting it to code
also gives users feeling of control over project, helps make them satisfied
also gives users a better feeling for what is possible in programming
programmers will have to fight less requests for impossible stuff
exa PlasmaDat me main.prg, printsub.prg and initial print.prg
users expanded print.prg after a few hours of training
anec at DEC RDB training this method astonished bank programmers
to make modifying easy design user script lang to be similar to users data
text processor code, spreadsheet formulas, database records
exa Kompal form layouts stored in RDB as data records
a colleague of mine has since modified these without any recompiles
but here also a case of systematics not tidied up
I should have used descriptive titles for prim key, not artificial nr
but include a number field for sorting row of appearance
config file (dBase, Windows) vs .rc file (Unix shells) [Raymond] "rc file"
config can only set variables, .rc can run commands, incl set cmds
stages of configuring built in, /etc/rc, .rc file, env vars, cmd options
modifying scripts belongs to computer literacy
[Byte] 90-8p211 end user progr, [PCW] 93-3p177 new progr methods letter
using closed programs vs self writing of programs is like
speaking from a phrasebook vs making own sentances
compare situation programmer vs user with human languge
not everyone invents new words, but everyone makes own sentances
extreme case of this is programmer writes generic end user development tools
[Byte] 90-8p235 user programing
initiative users then do the entire local job in the tools language
Free Software
first software was delivered free of cost and freely usable with the hardware
or written at universities, often for their own use
there were no professional software producers
as soon as software has a commercial value
the owners interests get in the way [Licklider2] p124
turf fighting of manufacturers makes users suffer additionally
exa commercial Unix and the "open systems" industry standards war mess
[Byte] 92-1p406 ESR standards eveywhere, look before you leap
AT&T closing up [Salus] p151, leads to Unix clones
Xenix was written by Microsoft, marketed by SCO [Byte] 89-5p228
prevented Unix success [Salus] p225, claims deliberate by Microsoft
some say that this was a tactical strike to get people against Unix
Sun/AT&T vs OSF mess [Salus] p216
even DEC that dropped its Ultrix for OSF/1, but now calles it DecUnix
open systems mess [Salus] p203, [PCW] 93-1p463
yet annother non-aliance (COSE) [PCW] 93-6p198, [PCW] 93-6p520
and it fails [PCW] 95-6p347
there are no real open systems in Unix industry [Salus] p210
the "open systems" industry is actually worse than Microsoft
same bad bureau but market slime tries to cuddle up to free SW ideal
users saw this and have prevented the "Year of Unix" for 10 years
[Byte] 92-1p406 Raymond rules for standards war survival
pressure to be first on market leads to rising bug count [Byte] 95-5p260
and pressure to produce at low cost reduces personnel, work in product
commercial SW bugs from time pressure, features, cost cutting
vs non commercial no compromise, personal reputation is on line
anec Martens "software gets worse and worse, must be law of entropy"
feedback from users to designers in the industry doesn't exist
exa [PCW] Servasure, early Japanese photo copiers kept on breaking down
always the same parts broke, local improvement, HQ never heard of it
bureau process hinders good design [Norman1] p158
collecting user feedback seldom exists [Norman1] p143
exa NeXT not even Mamakos serial bug report inclusive patch got heard
what chance would my interface improvements list have
no waste time, result not sent it, result they can't get it
even if manufactures managers want to get feedback from users
the flow is severly impeded by the firms bureau, 9 to 5 mentality
better let designers and users get together, then good stuff happens
GNU and Linux tools better than all commercial Unixes because of this
test in iX (from CMU?), commercial 20..35% crashed, GNU/Linux 5/7%
corrections (and extensions) must fit the software owners business plan
exa Microsoft Windows desaster vs OS/2 2.0 that was near finished in 1990
Microsoft software great design marketing blabla but fails on usage
SW industry is driven by getting user to make updates [PCW] 93-2p178
update mess, no licences for old tried and trusted vers [PCW] 94-3p273
software distribut must fit the restrictions of sales department bureaus
software must be sold as big packages to reduce code, not small modules
software systems packaged as entire system with slow version num changes
vs free SW no big all-in-one system upgrades like Windows
instead separate components upgraded when authors are finished
and installed when users have desire for them and are ready
individual components versions as needed
distribution via FTP server not possible because no payment guarantee
this prevents a software module market from evolving
the software crisis is largely a crisis of organisational economics
OTOH webcomics and open source have learned to live with donations
packaging is only for SW industry distribution organisations benefit
source hidden in manufacturers organisation because competitive advantage
divided up into fiefdoms, jealously guarded by corporate lawyers
even worse also hiding ideas and look-and-feel [Lampson] p343 Kay Xerox
hackers retain some childish behaviour, curiosity, openmindedness
bureau retain some childish behaviour, possessiveness, like 7 year olds
"this is my possession, you are not allowed", juristical battles
cooperation and sharing would be a lot less wastive, better
exa Atari acting as a bunch of babies [Levy] p326
exa AT&T Unix dept more lawyers than technical people [Salus] p139
U.S. vs Japan only 1500 lawyers in entire country [Byte] 92-8p95
exa license hassle with AT&T lead to BSD numbering 4.* [Salus] p182
anec disclaimer in [Garfinkel2] pXXXIII
user has paid entire license fee to get software, no reason for service
businesses exist to make profit, customers are a means to get it
customers that complain make costs, reduce profit, that loses reason
why put up with them, only cust that are easily satisfied may apply
this results in the attitude shown in [Garfinkel2] p81
buinesses only provide help and bug fixes because of market pressure
also cost is same for each user, independant of amount of use
Brad Cox suggests a software metering system, pay for use, not aquisition
only usage costs, that would be dependant on amount of time/work
also allows fine splitting of payment for individual features
also split payment for authors of subsystems, SW component market
would allow superdistribution of commercial SW via FTP servers
similar suggest in [Byte] 96-2p248 comment, [PCW] 96-2p237 components
see http://web.gmu.edu/bcox for book preprint
but problems with reliability
both of the system resisting attempts to break it
and of the system functioning on unreliable networks (if net is down)
I would never depend on using such SW nor offer my SW in this way
also will customers take it, bureau want fixed costs for easy budgeting
"copy protection" measures
is actually copy prevention, producer protection, bureau twisted language
anec derived from here the term data protection, similarily twisted
crashes machines, prevents backups, harms users [Raymond] "copybroke (2)"
exa Norton SpeeDisk doesn't move some blocks, may be save c p schemes
anec Lotus 123 was rumored to check for an unmovable "bad" disk block
exa MS Office upgrade tests for existing, bad if you want to wipe clean
this attracted hackers who break such schemes, "mend" the software
are known as crackers, today real cracking rings [Raxmond] "warez d00dz"
these mended versions called cracks, or falsely warez [Raymond] "warez"
anec Dani's FTP server missused for distribution warez
today copy protection is mainly dongles
but they still make lots of trouble [ct] 95-12p122
fail to be recognized when a printer is plugged in but switched off
multiple dongles on one port signalling system colliding, no detection
requires using multiple LPT ports, but max 3, also config trouble
multiple dongles on one port sticking out, get in way, break off port
this is particularily obnoxious on notebooks
anec "dongle port" card from dongle manufacturer, dual LPT ports
one internal in the chassis, dongles pointing forwards
but what about notebook users, they have no slots, space
SW makers are slowly learning that customers dislike dongles
and as result avoid programs that are "protected" by them
related to copy protection encoded pay-TV/radio, rent for needed decoder
also related is embedded signatures in images, audio, other data
[Byte] 96-4p40IS5 digital watermarks [Byte] 97-1p40IS7 digital watermarks
[ct] 97-8p162 digital watermarks [ct] 98-4p47 digital watermark deletable
[PCW] 94-1p515 ICE code in inaudible part of audio spectrum
use of gains from one product to monopolise other markets
squeezing out competitors, reducing choice for users
exa Microsoft licencing for monopoly
stepdown [PCW] 94-9p218, but is not real [PCW] 94-10p219, prevent split
[ct] 97-14p84 Microsofts anti trust troubles
[ct] 98-1p18 Microsoft monopoly problems
[ct] 98-11p16 Microsofts legal troubles
[ct] 98-12p22 Microsoft internal mails on loosing
[ct] 98-25p17 MS annoying judges, Billy forgetfull
[ct] 99-24p16 MS loses process most likely, only question of punnishment
[ct] 2000-8p16 MS process, [ct] 2000-10p22 splitting MS?
[ct] 2000-13p24 MS process resolution
exa Intel chip information monopoly
[ct] 98-13p27 Intel monopoly law case
producers (deciders) benefit is customers loss, Grudin's law [Norman2] p113
run for managment [Byte] 90-9p252 Felsenstein desovjetising the SW industry
Windows was designed to please accountants [Garfinkel2] p164
Smith (in Wealth of Nations) "manufacturers are men whose interest is
never exact same as that of public, decieve, oppress" [Hauben] "netizen"
false and self serving econom arguments of mercantilists [Hauben] "immin"
"you don't want a product that competes with an existing product"
exa II hobbled to not hinder III, III failed at stopping IBM PC success
later III died, II became IIc/IIgs, built into 1990s [Byte] 85-1p173
exa IBM PCjr hobbled to not compete with PC, failed
exa IBM PS/2 386 hobbled to not compete with AS/400, lossed market share
anec on my visit to IBM question if cheap for cust vs expensiv for profit
"sale is the aim, anyway cust will grow to use expensive"
vs "you don't want product that doesn't offer anything more than existing"
this is what messes up customers life, what they don't want
desire for safe profits also leads to customer control tactics
think of damage if english language were copyrighted to some firm
you need a speaking license which limits you to sentences in a phrasebook
"copying" a sentance someone else uses would be breach of licence
copyrights prevents people from getting the most from SW [Levy] p419
relative costs of design vs fabrication
in production (both agricultural and mechanical, anything made of atoms)
repeated production cost is major part, cust must pay this for every copy
design cost is only a small part, can be spread over the many copies
in service industries work time for individual customer is nearly entire cost
so the situation is the same, the old structures work as before
in books, music or films, reproduction and distribution is still bigger part
these are often compared with software, but no cheap copying, also losses
in software and any other digital information (anything made of bits)
production is reduced to only copying, design cost becomes dominant
reproduction costs next to nothing and is lossless, copy identical usable
reproduction can (and will!) be done by interested users
anec computer industry suprised how quick pirates distrib SW [Levy] p227
PD, freeware and shareware all ride on same method as SW pirates
[ct] 96-5p154 shareware and others, software overview
anec piracy from price percieved as too high [PCW] 94-1p237
anec design expensive also the reason for upgrades cheaper than new price
when a user upgrades, only part of design is new, rest already paid for
only pay for additional design and 2nd distrib vs new user pay for full
anec stupid bureau "you don't expect upgrade price for new automobil"
but that is because you can't type "diskcopy garage1: garage2:"
bits vs atoms key difference is users ability to cheaply make lossless copies
using only the existing standard PC hardware as reproduction devices
this is a physical property of digital data, of bits
all digital data is far easier to duplicate than make
bits have no weight, move fast, are copyable
applies to all bits, exa multimedia, digital encyclopedias [Norman1] p215
not just to programs, as many still believe
bits vs atoms is like the world of science vs business
in atoms/business the others gain is your loss, result is fighting
note that business can create (and sometimes actually does)
but the majority of activity is dividing the spoils
vs in bits/science both can have a copy, no loss, result is cooperate
the spoils can be duplicated ad infinitum, everyone can have a copy
copying bits can not be theft, the owner still has the original
only damage to owner is loss of design cost recovery, not using design
damage to other users is unfair distribution of design payment
even if bureau claim piratin to be theft, exa fed against SW theft (FAST)
anec bits vs atoms problem started 1840s with Samuel Morse
invented telegraph while on sailing ship EU->US
industry is a organising principle that was optimised to solve the problem
of mass production financing, production, marketing and distribution, sales
todays econom (firms) and jurist (law) structures were designed for this
hardware is manufactured (in industry)
mental techniques are taught (in shool) [Norman2] p5 cognitive artifacts
software is in between them, third method, third organisational form
software is more like human language or culture than a product
[Dobbs] 96-4p22 Knuth on copyright for algorithms, public like maths
software is a problem of paying for complex design, requires diff solution
forcing software (and other bits) into industrial structures is big waste
exa SW reprodust/distribution/sales mechanism costs more than development
more work time wasted on administration then used in benefitting users
anec average book also 10% of price for author, 90% for publish/print
same CDs, Fr30: artist 3, manufact 3, suisa 2, publ/distr 11, sale 11
unlike with books we can avoid this waste in software, make it cheaper
people pick it up, use it, modify it, don't pay for it
exa Unix free distr success [Garfinkel2] pXVII Norman foreword, [Salus]
FTP/Web is good because you can get SW without going to a salescritter
why assume that solution to a computer problem lays in buying products
why make computing as frustrating as the rest of todays economy
unfortunately there are many people educated to regard indus as natural
but it is only natural in the world of atoms, in bits it is unnatural
no production/tooling/capital/sales/buying/accounting/salaries/firms
will lead to many salescritters and other bureau losing their jobs
generally net makes end of service industry, computer is a job killer
[ct] 97-15p132 jobkiller
[ct] 98-23p118 jobkiller vs empty jobs looking for personel
most hackers could not care for what happens to bureau, from being hurt
badness and frust main reason why hack don't care for jobless bureau
for once its them that is losing, for once the bad ones, thats nice
actually computer is a work time reducer, it is up to society
to either translate this into shorter wor time or into jobless
anec MS success from being the best at bringing industrial style to
SW reproductuction, marketing and distribution
the copyright problem
before publishers existed individual copying was the norm, exa antique age
only after press, mass reproduction, capital need, professional publishers
need for protection of X from cheaper Y who payed nothing to author
copyright is publisher protection, not author protection
claim that copyright protects authors, so more authoring is done is wrong
there allways were too many authors, even those with no chance of publish
claim that copyright/patents "to protect authors/inventors" is rubbish
is to protect publishers/producers investment in (re-)production organisat
but this is allready protected by other pub/prod having same set up costs
authors/inventors do it for satisfaction, not money
if they wanted money they would chose other more profitable time use
authors can rely on real job, or public support, exa Internet
inventors can get employed, exa by producers R&D department
this meany that publishers become distributors, network vs CD-ROM vs Book
this offers end user more choice, and lower price form mult of each
this is less profit for them, but law is not here to safegard profits
tieing recovery of development costs to exclusive distribution of copies
exa traditional paper publishers demand distribution restrictions
exa Jargon File on net only ASCII, no layout or graphics, only in paper
they are used to being the sole publishing medium, owning authors work
classic case of entire copyright system outdated, failing new media
central problem is paying the authoring by a charge on
the data carrier copies reproduced/sold by one distributor
and not as a separate reward by users who think the work worthy
that will have to go, is too great a obstacle to societies development
eliminate copyright-related restrictions on using information
copyright is outdated, superfluous and damaging, we will have to abandon it
but lawyers (lose job) and publish (lose profit) do everything to prevent
today individual copying is growing, becoming dominant mode of distribution
from low cost of copying technology and basic human act of helping/sharing
simple, flexible, fast, immediate when you want to use it, no order delay
popular culture is taking up copying, the situation will get worse
jurists and their clients will have to accept the public will
reactionary policy of trying to rurpress the peoples behaviour
WIPU treaty, US DMCA law, ECD [ct] 2000-14p22
add to this in computing incremental copy/paste usage, copyright in the way
exa [Byte] 95-4p32 legal landmines cloud multimedia
exa [ct] 94-12p186 electronic publishing technology vs payment dilemma
[ct] 97-15p128 copyright exploitation plans
[ct] 98-1p122 music on demand, [ct] 98-6p162 end of free internet
[ct] 98-15p122 music on demand, expensive, unreliable, closed
[ct] 99-6p192 e-books, fail because formats, license enforcing BAD
[ct] 98-22p56 rocket e-book and similar, are copybroken, fail
[ct] 99-6p192 still same situation, [ct] 99-20p216 same in science publis
[ct] 99-23p226 print book on demand, [ct] 99-24p206 OEB standard
[ct] 2000-15p178 book on demand of historical works
exa [Norman1] p215 gigabyte laserdisk, 100 books, recovering authoring cost
exa copyright damage RSA vs PGP, Barnsley fractal compres, Parcplace Smallt
exa OO 20 years no standard language/class libraries until Java came
exa copyright damage Adobe PS fonts, Sun NeWS window server
exa NeXT DPS server onlr renders for screen and their print engine
for real printer external PS needed, no using of Epson or Laserjet + DPS
exa copyright damage from SCMS on DAT, CD-R [PCW] 93-3p403, [PCW] 96-1p253
exa CD-ROM drives audio-CD sound first only over separate analog out
not over digital line to CD-ROM controller, sound card DAC, copy prevent
exa fans not allowed to tape concerts to remember atmosphere
not allowed because it violated record firms copyrights, called bootleg
exa [ct] 97-8p34 German scanner drivers slowed because VG Wort charges
[ct] 2000-16p28 same lobbying groups want payment for computers
[ct] 2000-20p20 reaction against extending payments
in Switzerland similar charges on photocopiers by Pro Literis
exa [ct] 99-17p22 UCITA allows remote shutdown/deinstall
exa in this text there are many references, I would prefer to include orig
but problems with intrusing on the owners copyrights prevent that
same also digitalising video images from TV documentaries, not possible
only way to use would be license them, costs, make me demand money
to ensure software free of restricting commercial interests
it must be free of the insane practice of owning concepts [Levy] p311
ownership of design is bad, reduces flow of informatio, duplication, amount
reduces qualtity of generated information, user satisfaction
neat tricks disseminated, quality of all software will rise [Levy] p311
law giving firms rights to own employees ideas restrict them being usefull
firms really only buy employees work time, right to use result of it
[Griswold] p625 and p655 allow software to be free, without restrict/charge
also lead to de facto standardisation by a portable implementation
exa free copyright better Unix, Linux, X, Java
this will have to lead to new form of economical organisation
industrial->new as agricultural->industrial in 1800 [Hauben] "immin"
it has been called the post-industrial society
networks will force this to happen by breaking enforcability of laws
days of producer dominated society are over, now the users select
anec Marx social structures follow from production methods
production revolution gives social change, today postindustrial
related bogosity is the patent system, hinders others in offering better
particularly abuse of patents, which are basicaly anticompetitive device
to wipe out competitors, reduces selection, harms users
exa [Byte] 91-1p305 Hyatt microprocessor, XOR graphics
exa Compton multimedia patent
exa [ct] 96-5p14 IBM PC patent abuse, mostly trivial
in particular software patents, as no revenue stream to pay licenses with
exa Amazon one-click used vs B&N
[Byte] 90-9p232 Alvy Ray smith software patents, airbrush patent
[ct] 95-3p29 GIF license, [PCMag] 95-3-28 SW patent trap Unisys/CIS/GIF
[ct] 96-8p57 patent danger to downloadable digital products
[ct] 99-16p72 software patents hinder small ones
[ct] 2000-12p40 open source threatend by software patents
[ct] 2000-25p264 german supreme court enables software patents
[ct] 2001-17p170 fight over sw patents use vs damage
[ct] 2002-23p108 software patents situation
also related bogosity is the trademark system, prevent others using name
[ct] 97-13p142 Intel inside campaign
[ct] 98-1p26 legal trademark bogosities
anec naming of 586 as Pentium because of numbers not trademarkable
anec German trademark incident with Intel Triton chipset
lawyer Gravenreuth hurt many PC dealers
[ct] 95-8p26 first, [ct] 96-1p28 goes further
[ct] 96-4p62 expanded to Asus board manufacturer
[ct] 96-5p20 but not Microsoft, they were too strong
[ct] 98-6p20 Gravenreuth strikes again
[ct] 2000-10p42 shooting back at Gravenreuth
for project names don't use trademarkable names, use geographic names
same type of guys sued for using inches in adverts [iX] 94-1p26
but this is not see so by the courts [iX] 94-2p12
anec did you know that using (C) for copyright is not legally recognized
but without income authors (and following them new developments) will disappear
software written piecemeal, additions by whoever needs them
this spreads the development cost, puts them is the range that is accepted
for whiting in house stuff to use, for adapting the system it use
all people doing this adds up to enough development power to make software
software is a cultural artifact, not an industrial product
just think of folk music, no one was paid for its development
[ct] 98-12p88 free SW between commerce and chaos
it professional writing is needed, support authors producing free software
public support from taxes, would require getting bureau to do propper thing
but they only trust each other, and people with titles given by bureau
so this can be forgotten, requires private funding of free SW
make it user supported software, grant system [Keogh] intro FSF/GNU
exa TeX supported by TeX User Group [Goossens] intro, [Walsh]
exa bash, Unix tools and Emacs by Free Software Foundation GNU project
exa X-Free by X-Free consortium, Linux by Linux International
exa Apache by apache.org
exa Netscape as Mozilla [ct] 98-9p96 source overview, qtscape
anec shareware is often not paid because of no mechanism [PCW] 95-8p566
anec LUGS failed attempt to establish mechanism for supporting free SW
this could be expanded to hardware circuits, proc instr sets, chip layouts
exa Definicon PD32 32016/32 [Libes1] p241, anec TSP 32k was one of these
and expanded to authoring in general, both technical and literary
who arranges support for writers of new texts
GNU only supports writing of new software (and its documentation)
Project Gutenberg [ix] 95-5p130, [PTP] 94-9/10p3
only digitalises existing texts, that are free from copyright
for this I am trying using a support page with cost calculation on it
and list of supporters with their home pages and date/amount
in hardware customer owned producers are partly the case
exa IBM has shares in Intel, Compaq has shares in Conner
exa many car firms have shares in their suppliers
generally the idea of customer owned suppliers is good for relations
customer has decision power, cost vs quality decision ends at customer
not as it often is, cost decison at customer, quality at vendor
supplier has more safety because customer does less vendor changing
interests of both overlap more, less fighting each other
anec AMD advert "we are not your competition (unlike Intel)"
in SW this would mean millions of customers owning the SW firms
this is impractical with traditional industry, capital and shares
but free SW allows users to own the software, pay programmers
free software is freely distributable, not free of cost and author reward
"help stamp out software obstructionism ("ownership") by using,
writing, and sharing free software!" at end of [Stallman]
FSF explained [ct] 92-3p62, [PCW] 94-10p550, [Uo] 94-8p74 German FSAG
anec Bill Gates misunderstood word free [PCW] 94-1p579
answer of RMS, this is a classic missunderstanding [PCW] 96-3p272
typical for him, anec software flap over copy Altair Basic [Levy] p229
vs Allison participatory Basic, Texas Tiny Basic, Pittmann [Levy] p231
also "free software allwas existed, no threat" [Byte] 96-3p50
some users can't tolerate the lack of buying guaranteed support
for these commercial support firms would be the solution [PCW] 95-10p284
exa Cygnus (GNU support), MT Xinu (BSD support)
intelligent cooperation and sharing vs stupid greed and competition
cooperation instead of dog-eat-dog competition [Levy] p416
fighting each other is the mark of the loser, behaviour of stupids, barbars
better cooperate, intelligent people do this [Brunner]
exa exchange information about disk manufacturers [Levy] p311
intelligent people work together and share end result, build up by adding
tricks for good software known to all, all SW better [Levy] p311
if competition is required do it on service (good for users, not damaging)
lately Ray Noorda from Novell has coined the term coopetition [PCW] 94-9p571
[iX] 94-4p126 Noorda interview
seems that he understands relation between cooperation and competition
as result of that he was declared "unfit" to lead Novell against Microsoft
now as CEO of Caldera fighting MS with Linux and DR/Novell/Open-DOS
anec in times of difficulty (catastrophy, war) governments enforce cooperat
but as soon as it is over they let competition reign, better keep it down
it seen that only in danger will people accept restrictions from cooperat
as soon as they are safe they go for comfort and freedom to do anything
distribution of programs as source
[ct] 2001-20p176 + 2001-21p270 learning from open source
source allows corrections, you can't mend bugs in closed software
exa dBase IV and XVT crashes due to bugs
exa old car radio trafic info decoder bug
exa Transys SLIP timeout reset bug, dropping line bug
exa Linux POP client kept failing, droped mails once it had downloaded them
source is only complete and reliable documentation of what a program does
"the source is what the processor uses to know what to do next"
use the source Luke, UTSL [Salus] p45, [Raymond] "UTSL"
so I RTFSed it [Raymond] "RTFS", it does mail -d
that drops mail because /bin/mail in Linux is a link to /usr/bin/mail
Linux has no real /bin/mail (with -d), uses deliver for this purpose
I therefore used popclient -o, better would be to patch to use deliver
anec NeXT man binmail doesn't document /bin/mail -d, despite having it
comp are here to serve us, not producers, we must have control over them
this requires ability to fix anything broken [Levy] p62 torpedo behaviour
anec desire to fix [Dewar] most likely triggered writing of this text
anec desire to send correct articles, letters page
most people will not mend bugs themselves
but source means that those that can mend and need it mended will do it
rest will also profit through feedback of the fixes, never see the bug
source allows improvements, instead redo, can't expand closed SW [Levy] p126
exa Neuron Data rewrote GUI toolkits for better object model
exa Transys SLIP non variable timeout system, but Linux dial-deamon has
exa Opel power off closes open windows, but only if both doors closed
exa HI-FI sound off with automatic on after 5min
propriet SW requires manufacturers designers to anticipate all users needs
this would require them to be omniscient, they are not, fail at it
for limited domains such as office SW this may perhaps work sufficiently
but not for the entire range of computer usages
closed SW problem, users want to participate in design [Licklider2] p124
anec Pournelle Vulcan infuriatingly excellent rating and Tate dBase deal
free SW allows improving and distributing, someone else improves and so on
this leads to iterative improvement of SW, in the end better for all
why reinvent the wheel when the existing one can be bettered
do it right thing once it is known, spread the knowledge
information should be free, so you can make use of it [Levy] p41
free manuals, users better programs and industry gains [Levy] p356
anec Diamond PC graphics cards docu only under NDA, so no Linux drivers
frustrated users, bad publicity, now they have given up, give free docu
what have they to lose from more SW, from more people using their HW?
no one is going to steal anything, drivers are copyable anyway
and they are useless without HW which must be bought, gives money
now Xircom (LPT LAN) is the favourite firm to be ridiculed for NDA
has ensured spreading of the supported D-Link under Linux users
source teaches reader how to program, spreads ability
distribution by FTP or Web servers, CD-ROM publishers and paper publishers
paper books will still survive because reading book is easier than screen
get and learn from others, share what you know
exa Albin learned how to set a Motif wait cursor from xv source
but in traditional industry this is not desired, blunts competitive edge
also more comfortable (read on sofa) and portable (bus, train, aircraft)
electronic media are for now better for referencing (search function)
but this will require paper publishers to accept different structures
to take a text from the net and publish it, like CD-ROM publishers do it
but market differentiation of publishers will prevent using raw text
will require authors to make exclusive work for them
this wastes authors time if multiple publishings are desired
anec bureau stupids when sending data on floppy customs duty on disk value
but when sending letter on paper you don't pay duty on the paper
when importing software on tape/floppy duty on media or on licence cost
today use internet Web/FTP/email, no atoms, no duty, no bureau stupids
also NeXT sale stopped by customs bogosity
marketing by word of mouth and recommendation, not by marketing people
this will get rid of that bunch of hype-ridden liers, marketing slime
[ct] 98-6p410 getting others time beats getting money ecomony
exa Unix was in its early days nearly free of effective copyright restrictions
allowed users to chose between existing components or new ones, flexible
"pick one or roll own", not "love it or leave it" [Scheifler] p7
grew by 100s of authors and 1000s of users, they rubbed off sharp edges
is a "virus", is evolutionary superior, is human psychology compatible
by this it became robust at handling the real worlds requirements
robustness more important than performance, elegance or concise design
Unix created to help develop a community of programmers [Hauben]
popular "despite" grassrouts distribution [Hauben] "evol_unix"
McIllroy "therein lies genius of Unix, enthusiast adopted without sale"
has essence of an OS, cumulative progr, not platform for 'solutions'
but no coherent design, user must take time to learn what to use or avoid
little plan in naming [Garfinkel2] p147 digest noise, [Barry] p221 grunts
was actually no plan, every tools designer independantly deviced a name
this is the real world, user must learn to live without master plan
it is not user friendly as it was not designed for consistency
anec Nutshell books "Unix tools can be unruly beasts, we tame them"
makes trouble sometimes, due to its evolution [Garfinkel2] p6
but it is still better than the alternatives [Garfinkel2] p9
also than MS-DOS, despite [Garfinkel2] pXXVIII, exa filename, mem, task
also than IBM 3090, Hinni needed IPL to restart online processes
after online had to be stopped to manually shorten files from editing
but a bad progr that works is better than good one on paper or none at all
the critics should make something better or shut up
[Garfinkel2] p176 complain better sys forgotten, now users only know Unix
but most of todays users grew up on micros with what life offered, DOS
Unix is lot more then that, why assume that there exists even better
those that knew about better systems didn't spread knowledge [Levy]
if anyone is at fault then them, incl the authors of [Garfinkel2]
I'm bit better off because I knew Commander, Basic micros, interactivity
criticism no other industry would sell such faulty product [Garfinkel2] p23
but Unix is not a product, it is a collection of program folklore
when let out AT&T said no prod/no advert/no support/no fixes [Salus] p59
first next to no license limits, it spread, first unis, then businesses
improvements published, iterative, no lawyer control [Salus] p143
no Unix industry, only a WS industry, they gave out Unix with their HW
SunOS was a port of BSD Unix from the VAX
using Unix that was widely known in unis, made Suns and Unixes success
Unix did not become pervasive because techni ability, but easy to get
lately marketing has tried to present Unix as if it were a product
tried to position it as business software, result adopted business behav
part of business behaviour unbundling, first C compiler, then more
anec AIX even man pages are a "cost option" for £310 [PCW] 96-2p302
for this they substitute development in comitee
this constantly violates the traditional Unix development style
result oversized, bloated, complicated [Salus] p211
exa Solaris bloated by trying to merge BSD, System V, many extensions
has become administ nightmare, "Sun, no Fun, and nothing gets done"
or even OS/390 and NT certified as XPG4 Unix 95 [iX] 96-12p3
X/open introduced XPG4 as a brand name to "help" user buying
but Unix only really open if source available, public development essence
better finance universities, like the ARPA did with Berkeley
universities then share results with everyone else [Salus] p200
but that would not be usable for marketing [Raymond] "FUD wars"
exa GNU from MIT-AI/LMI/Symbolics fight over Lisp Machines [Levy] p419
[iX] 93-7p162 state of GNU in 1993, [iX] 95-9p108 GNU, Linux beat commercia
[iX] 96-4p102 PD software better than commercial
designed by hackers, but as soon as in business they betrayed their roots
behaved like bureau, business behaviour lead to shism [Levy] p424
Symbolics declared its OS propriety instead of sharing it with LMI
lost the free flow of information, wiped out the AI lab culture
the 2 firms wasted time reinventing, instead of adding [Levy] p426
lead later to failure of both firms [Garfinkel2] pXXIII
anec in this situation the Jargon File 1.x was frozen for first edition
of Hackers Dictionary book [Raymond] pXIV GLS, [Raymond] p6 foreword
RMS, still at MIT, reverse engineered Symbolics for LMI [Levy] p427
lead to foundation of FSF and GNU to do the right thing [ct] 92-3p62
GNU project to build an OS free of restrictions, Unix as only poss base
name GNU stands for GNU's Not Unix! (has no Unix license) [Raymond] "GNU"
is a continuation of the Emacs commune, of the TECO days [Levy] p416
was aimed to eventually produce an entire Unix-like OS
called Hurd [Uo] 96-1p108
but with Linux Stallman has declared the target of GNU achieved
[iX] 94-12p152 Stallman interview, is Linux GNU?
anec better name XINU for Xinu Is Not Unix, would be UNIX reversed
but already use by Mt Xinu (Unix TM reversed) since 1983 [Salus] p209
and also Xinu OS, used as basis for TCP/IP implementat in [Comer2]
GNUs Emacs "editor" is actualy a Lisp Machine for Unix [Raymond] "EMACS"
is a full Lisp system called M-Lisp, [Lampson] p296 for name
Emacs supports edit(dired/mail/news/development/... [iX] 96-3p188
exa Linux
[Byte] 92-11p24 letter mentioning Linux, with X but without TCP/IP
[Byte] 94-9p167 Linux test, 95-12p207 FreeBSD
[Byte] 96-2p123 Linux matters, [Byte] 97-1p49 state of Linux
[ct] 95-8p206 Linux 3rd generation, [ct] 95-10p294 Linux/68k
[ct] 96-5p128 Linux/SMP, [ct] 96-7p54 Linux/Mac, [ct] 96-9p64 Linux/Alpha
[ct] 96-11p366 free Unixes Linux vs BSD (Free, Net, Open) vs GNU
[ct] 97-4p368 a look at modern BSD, Unix history, [ct] 97-5p308 business L
[ct] 97-7p236 Mac MkLinux, [ct] 97-8p276 kde, [ct] 97-9p115 GIMP
[ct] 98-3p156 Linux developments, [ct] 98-7p132 state of Linux
[ct] 98-9p146 Linux for beginners, [ct] 98-10p166 Linux Windows emulators
[ct] 98-12p230 LAMP Linux Apache Mysql PHP, [ct] 98-15p67 FreeBSD
[ct] 98-19p176 distributions, [ct] 99-4p87 Trinux
[ct] 99-5p252 Linux as AppleTalk server with netatalk-asun
[ct] 99-6p184 Linux making trouble to WinNT
[ct] 2001-14p214 Linus Book first 3 Chapters
[iX] 93-7p86 SCO 2.0 vs Linux 0.99pl9, [iX] 93-7p158 Linux net only WD80X3
[iX] 93-10p6 reades 6% office, 29% home use, [iX] 93-10p152 SCSI drivers
[iX] 93-12p128 Linus Interview, [iX] 93-12p170 Linux /proc
[iX] 94-4p82 Linux 1.0, history, [iX] 94-4p180 XFree 2.0
[iX] 94-7p158 Linux NCR53C800, [iX] 95-4p60 FreeBSD, [iX] 95-7p34 state
[iX] 95-8p46 ELF binary format, [iX] 95-12p168 VoxWare and PCSP sound
[iX] 96-2p92 Linux ports, [iX] 96-5p110 NetBSD, [iX] 96-6p68 commercial L
[iX] 96-6p138 RedHat Alpha MILO, [iX] 96-7p68 MkLinux, [iX] 96-8p86 POSIX L
[iX] 96-9p92 StarOffice porting problems, [iX] 96-10p144 LyX WYSIWYG TeX
[iX] 09-12p70 GIMP pixel editor, [ix] 96-12p142 isdn4linux
[PCW] 92-6p430 DIY Unix Linux 0.95
[PCW] 95-6p347 last chance for Unix on desktop systems
[PCW] 95-7p530, [PCW] 96-5p200 revolution explained
[Uo] 94-9p14 Linux people, [Uo] 94-9p96 SLS 1.0.4 install experience
[Uo] 95-2p60 Kernal Korner, [Uo] 95-3p bdev drivers
[Uo] 95-4p48 interrupts, [Uo] 95-5p50 driver optimising
[Uo] 95-6p70 ELF, shared libs, [Uo] 95-7p61 ELF
[Uo] 95-8p54 memory alloc, [Uo] 95-9p50 new kernal calls
[Uo] 95-10p52 Paradis Alpha port, [Uo] 95-11p68 Paradis 2nd part
[Uo] 95-12p72 Alpha Blade distribution, [Uo] 96-1p76 Alpha MILO
[Uo] 96-2p71 keyboard driver, [Uo] 96-3p53 loadable drivers
[Uo] 96-4p70 driver central routines, [Uo] 96-5p58 driver waiting
[Uo] 96-6p60 kernal DMA, [Uo] 96-7p44 mmap() internals
[Uo] 96-8p95 Linux SMP, [Uo] 96-10p106 StarOffice
[Uo] 96-10p110 Linux 2.0, [Uo] 96-11p74 Star portabilit, [Uo] 96-12p92 GIMP
is a Unix clone for PCs running under the GNU GPL/copyleft license
is based mainly on GNU stuff, therefore better than normal Unix stuff
many file systems and net protocols, shells, tools, Xfree
is what todays hackers want, made from their own time for themselves
is the best OS for hackers since demise of ITS and the Lisp Machines
PCclone + Linux + XFree + GNUtools + Emacs = Unix WS and Lisp Machine
anec with Linux RMS has declared the aim of the GNU project as fullfilled
Slackware distribution enormously good install and deinstall program
anec is implemented as a /bin/sh shell script with dialog box tools
is enormously stabile, few crashes, in my case 1 install, mult S3, 2 SCSI
also NeXT only 5 or 6 from first Quantum HD firmware bug
this is in normal production use, of course crashme has worse effect
has already destroyed some cheap Unixes, exa Minix, Coherent
anec Linux grew out of Minix, because Tanenbaum was against 386 version
and is already showing effects on expensive ones
exa NetNews SCO install trouble, bank comment on NeXTstep at LUGS
also potential to pick up some of OS/2 fallout if/when it fails
but momentally no chance to grab normal office users from Windows
this would require easy config via forms, like Windows control.exe
modify traditional Unix scripts with a sys derived from Slackware
many think that in few years there will only be Microsoft and FSF/GNU
anec Gartner Group claims "end of Unix", but no mentioning L [iX] 96-9p40
anec Albin in Motif training Suns as X terminals on to a Linux notebook
anec Linux 486 has beaten Sparc+Solaris on NFS and RS/6000 on Maple
anec IDL on Pentium-90 65% faster than SparcStation 20 [Flugs] 95-5p9
IDL on 486-33 with 12MB better than Sun IPX with 32MB
anec claim major of NetNews servers Linux because >64k Inodes in filesys
still problem of trust ("that cheap, it can't be good"), doubt security
but because source available has the best worst-case scenario of all OSes
no chance of vendor lock-in, allways possible to fix it yourself
anec escrow contracts for custom programs, not for OSes, here source
you can check source for back doors, have policy of only self compiled
high secur sys require code audit [Garfinkel2] p245, is poss with Linux
anec according to Lubich the Bank Julius Baer uses Linux for firewall
real question is can you afford to have less security than with free SW
Thinking Methods
the most important tool a programmer has is not software, but his brain
programming is a mental process, to improve it improve your thinking
improve your understanding of the brains requirements, how it works
improving this has more influence on work ability than all other effects
so attempts at formalising these, but these usualy are miserably described
lack info to see hof they were arrived at, buildup of discovery
only show the conclusions in abstract from, awfull to read and adapt
[ct] 2001-23p86 TRIS
following methods of thinking have proven usefull, influence hackers thinking
all of these contain important points, but only together are they complete
children
playing is discovering, learning, enjoy fun
playing lays base for knowledge, can lead later to usefull stuff
having fun animates to further playing, to learning more
essence of hacking is the experience that discovering/learning is valuable
the "I can get something to happen" mentality
leads to desire for more learning, lots of knowledge
hackers love to experiment, to make things happen, to understand them
result childish discovery instinct not getting destroyed when growing up
approach the world with open eyes, watch what happens [Zopfi] p91
hackers retain some childish behaviour, curiosity, openmindedness
unlike most grown ups who lose this ability by focusing on safe gain
a hacker is a person who instead of using technology for percieved ends
plays with it because doing so is reward/fun in itsself
profit is only indirectly the motivation, but is acknowledged
don't hide behind preconcieved rules and formulas like adults [Zopfi] p91
don't ask "what's this good for" but "what can I discover here"
don't become victim of limit of only being able to learn
what is regarded as usefull in light of your previous knowledge
anec toy so clever construct even adult can put together [Norman1] p83
once this is stimulated hackers only need the right environment
exa MIT AI lab, SAIL [Levy] p144 less intense, Homebrew
exa Kanti [Franklin1] with Columbia Commander, Technorama, user groups
anec Kanti computer room was a small size replica of AI Lab
in Switz in 81 you still needed interest in techn to get into computing
public image was still that of big brother, also anti-techno environ
quest for knowledge means more than degree [Levy] p20 or grades [Levy] p35
classes in proper relatio [Levy] p73, chess progr over degree [Levy] p89
but GLS didn't let studies suffer unlike many others [Raymond] pIX
anec I was thrown out of Kanti for too much hacking, 10% in math stay
anec class colleague nearly thrown from TWI because of hacking
unlimited access to computers, information, knowledge [Levy] p40
access machine at any price [Raymond] pX free reign, kicked, back again
anec stayed on at Kanti on afternoons, Saturdays, later in Technorama
anec at SR told off for using CAD computer, later reference guru
outside world irrelevant, state of Williams office [Levy] p360
hacking can change your life for the better [Levy] p45, [Levy] p305
because of learning that you can control it
feeling of power, getting something to work [Levy] p33
the computer is available at any time to do anything [Levy] p67
people manipulate comp, realise they can make things happen [Levy] p337
hackers control only for exploration, not for exploitation [Levy] p51
Univ of Altair, degree soldering, digital logic, improvising [Levy] p196
teach yourself, figure out how to do it, hack [Salus] p77
but public buying finished systems has no hacking effect [Levy] p303
though also Tommervik [Levy] p309, but she at least enquired how it works
Williams getting sucked in [Levy] p289
Sullivan real programming [Levy] p291 vs card walloping
hackers were often loners with techn interest [Levy] p83, [PCW] hackers socio
TMRC mindset [Levy] p23, technical interest from child up [Levy] p158
bad at relating to others [Levy] p83, [Raymond] Weaknesses of Personality
social handicap is perhaps needed to concentrate full [Levy] p138
not used to audience larger than a table full of electr parts [Levy] p215
Ken Williams no macho [Levy] p285
Sullivan not good at relationships [Levy] p291
Harris social outcast [Levy] p313, nerd [Levy] p321
Duchaineau [Levy] p375 loner, little patience with bores
RMS [Levy] p416
GLS nerd, hackers don't need to be nerds, but it helps [Raymond] pXI
but not hard harted and feelingless, as the stereotype claims
see [Levy] p138 and also the importance of fun in hacking
I certainly am, first born, no neighbours, move to foreign lang country
didn't understand language, children at shool behav, intimidated easily
at work I often disliked something, only after a break I found reasons
hackers value fun at work, know that it stimulates them, gives better results
[Abelson] intro fun, [Clark] p399 work for fun, key to success, [Levy] p402
[Feynman2] p173 science out of playfullness, for fun of it
[Plauger2] p129, [Raymond] "programming (3)" is biggest fun
[Raymond] pXII hack done mostly for fun, own sake, pure joy, [Salus] p142
[Byte] 92-10p348 PC greatest adult toy, programming for the fun of it
satisfaction (includes fun) is part of a hackers aim in life
hackers often chose their job on the fun to be expected
more than money or status to be got [Raymond] personality charact
not financial reward or promotion [JamesG] p95
money only needed for getting food/clothes/home/computer [Stallman]
money is not important [PCW] 93-10p246 Dima interview
but hackers have need for income, like all other workers
this is a problem, because it stops them doing maximal fun stuff
playing also expands hackers knowledge which benefits the customer work
Japanese understand, anec Mazda "do what you would like" minimal car
job not just get money, not just 9 to 5, has meaning, emotional bound
not work because necessary for money and cram fun in afterwards
leads to splitting of resources, reduces both work and fun, bad
fun of getting a hack to work is the main reward
most programmers work for satisfaction, esp good ones, exa AI lab
need to be interested in a job to keep up doing it
exa Kompal was repetitiva job from PlasmaDat, no new experience
only change was reimplementat in C, optimisation, XVT failed that
lack of interest in job, only working forcedly for income
leads to doing minimal needed, main reason for customer = disturbance
with resulting customer disapointment, going away, firm collapse
many managment courses say that fun of workers at work is important
conciously they accept it, but back at home it is immediately ignored
I assume their subconcious panics from deadlines and budgets
panic is overpowering instinctive reaction that stops rationality
bureau deride fun as "happy engineering", call it a waste of time
"we bought the time from you, you must deliver work for it" mentality
"your not allowed to spend our time on having fun"
in the name of cost cutting bureau do fun cutting, demotivating, big loss
exa IT 16.00 parties, workers came because 1 hour from firm, exchange
managment "efficiency" pressure against it, stopped, no exchange
instead official exchange meetings, cost more, less spontanity, lossed
when managment critisized answer "meet after work", point not seen
but at the same time they do "happy bureaucracy"
they organise the firm for their convenience and prestige
make life awkward by prefering prestige projects to sensible stuff
waste everyones time to fullfill largely symbolic actions [Levy]
get in everyones way without bringing any benefit to the customers
jobs cost more to get done (bureaus salary and others time increase)
anec marketing "professionalism" costs more [Levy] p363, should less
fall in the trap of beauty of organisational structures
this is like trap of beauty of maths [BrownP]
organising should not be done just for its own sake, only for benefits
bureau should serve workers, the same as workers should serve cust
exa TWI over 10 years for Fachhochschule title (and slight "meaning") chang
in text introducing change remark that "technology not for itsself"
exa IT QS stuff came from drive to ISO 9000 "quality" system
[Byte] 97-4p40IS15 ISO 9000 for software quality, [iX] 94-4p160
[iX] 94-11p162 V Modell, [iX] 96-6p88 V Modell, [iX] 96-9p140 V with obj
is actually only process tracability system, nothing about quality at all
results in a general work-by-the-book mentality, more droids
anec Albin HP manuals, 1h on phone, 10 times ISO question list
then in end connected to Elbatex, no ISO, fast solved
this is supposed to increase quality, customer satisfaction
only bureaus claim it to make quality, shows how they live in dreams
anec Albin rule that no rule applies is sufficient for certificate
but then you must make sure noone goes near it with measure equipment
anec doctor "is only documentation for bureau", not improving service
does not measure and assure quality, just make transparent for bureau
allows them to cut costs, no regard for desires of patients (=qual)
if not a fundamental reorganisation of firm it is just a PR exercise
SQS "most firms are clearly ready to think over internal structures"
transl: manag want play reorganisat, but does the actual work change
for worker it means risen bureaucratic hindering, droped fun and moral
enormous amount of paper pushing instead of using common sense
is bureau reducing working efficiency at time workers must increase it
for customer no change in service, just than risen costs
no guaranty for better work, just more paper, cust doesn't get that
actually quality may drop from workers having less time and motivation
forces contractors to also do it, have added costs or lose orders
we have seen chain letters, computer viruses, this first bureau virus
all in all it is simply a great bureau white elephant, happy bureau
anec Albin here at PSI we have 2 acceleators, particles and paper
is also great income source for managment consultants, such as SQS
anec Heinz first great fan of quality, then later "means nothing"
more general [iX] 94-2p3 lean missmanagment
real workers work for what motivates them
either personal achievement, fun in getting something done, usually good
or because they need the money, usually the minimum, 9 to 5 workers
bureau that believe in intelligent workers being motivated
just because the firm is styled as a demigod by PR are daydreaming
bureau may be dull people with no desires for fun, only job [Levy] p391
"follow the rules" and bean counter mentality [Raymond] "droid"
closed minds resulting in no progress, exa [Feynman2] p28 bean cutting
but unlike bureau, hackers are not robots
preventing hackers from doing a good job stops their satisfaction
also applies to all other workers in a firm
not just with hackers but with most workers, fun makes work better
exa Seatle FAA office +7% work got done [Norman1] p152
at same time critisized for "lack of formal strictness"
anec Ernst fun at work is an essential human need
it is the bureau desire for robots that lies behind much automation
bad managment gives burn out, resignation [JamesG] p93
effect of managment ignoring workers, demoralisation [Feynman3] p126
leads after a while to hackers desire to leave the firm in frustration
but see that others have the same problems, all firms, no better
why botter changing to an other firm, no hope for improvement
result is resignation, in German nice term for it, "innere Kuendigung"
exa Harris problem with Williams, silent defection [Levy] p403
result Sierra lost star hacker, manag couldn't care, but others noticed
after decision to defect he told him the reasons, what was bad in firm
same when I left IT, first decision, then talked about it with others
exa me, I have seen above where I worked, got frustrated, depressed
after 6 months "how long do I have money to search for job after leave"
the answer to that was 3..4 years, so "why am I wasting my time here"
the answer to that was I left work and started writing this text
result IT also lost me as hacker, left a hole difficult to fill
exa Ernst looking for new job, will create chaos, 3 replacements
only reason he stays is that he can't find a new job with same payment
and many others of my colleagues, more than half
losing many designers loses experience, knowledge, has destroyed firms
exa Atari towel designers, Zilog Z8000 not finished, Commodore Tramiel
anec I allways felt that wasting future for short term profit is stupid
but bureau are so stupid that they waste future without any gain
also customers following todays "customer is king" mentality
forget that kings are also dictators, take no interest in subordinates
also forget that workers need fun to be motivated, also gives frustration
artists
[Byte] 83-10p94 programming as art, criteria, organisation
artist is a physically grown up who has kept childs creativity
difference between normal people and geniuses is that the later
keep on learning all their life, conciously do so, as result know a lot
uncreative people have learned to avoid creativity, by being hurt for it
most of society regards creativity as a threat to established order
creativity is a reaction of the unconcious brain to extern or intern stimuli
result of interaction between experiences, the mediums possibilities
and the challege of getting to the desired result [Ross2] p112
even artists dont create ex nihilo, just use warped filters
creativity doesn't run straight to desired end, raw creativity uncontrolled
exa ideas appearing in a conversation and altering its direction
rational sieving of output gives refined creativity
leads to iterative use of raw creativity alternating with sieving
unfocused free running inspiration, meditation
vs focused concentrated sieveing, thinking
while writing this text many times asked how many chapters I have done
questioner missunderstands creat, I drew up frame, the add everywhere
I am continuously improving on all chapters, not writ one at a time
to increase creativity you must collect more raw ideas
wait for opportunities, collect ideas when they fall
don't lose ideas when they come, write them down
anec I allways have a palmtop laying against bed, for catching ideas
ca 15..20% of this text have been concieved while in bed
collect details, cross relate them, gradually build up a knowledge store
human memory is bad at storing arbitrary things [Norman1] p68
but hacker can absorb lots of potententially usefull "meaningless" detail
because they understand intimately the basic structure of computing
can interrelate all the details to known stuff, make it non arbitrary
to give the unconcious brain this ability
know how to use the unconcious brain, what can be done with it
but also just as important limits, what it can't do
experience leads to intuitive understanding and new ideas
experience counts a lot, isn't easily gained, but rapidly lost
necessity of hands on experience [Levy] p68, important to not speculate
programmer reality vs the others dreams [IEEEsoftware] 94-5 p90
exa machine vision AI students speculated vs hacker did it [Levy] p109
exa Resource One intellectuals vs Felsenstein hands on [Levy] p165
exa Albrecht remedial Fortran for those from IBM course [Levy] p168
anec Beat "IBM training gave network recipy, I dug in, now I understand"
anec ETH knows why his bridge just collapsed, HTL no clue why standing
"we sell to a market" instead of "we sell technologic knowledge" mentality
destroys usefullness of existing experience, therefore strongly disliked
there is art and beauty inside computers [Levy] p43, hackers are artists
not just in output of music program, but any programs code is like music
computer is a infinitely flexible artistic medium [Levy] p116
hackers artistic programming style [Levy] p322 Harris replacement
beauty is the absence of disfiguring features, contradictions
hack programming style based on aesthetic of code, instinct right/wrong
programs are works of art, programmers are artists
they are important, treat them as stars [Levy] p366, [Levy] p385
Hollywood has learned to live with actor/regie stars
Trip Hawkins "EO is structured like Hollywood" [Byte] 83-10p94
Roberta Williams also wanted to promote them [Levy] p370
but Sutherland doesn't like "his" programmers being software stars
Hollywood is going in this direction, no roles for real actors
creativity requires special type of person, driven out
same music industry, only optimises profit from safe winners
innovation outside ind, every so often a new style revolutionises
real art is done for arts sake, for achieving intellectual satisfaction
exa YSL artist should make beautyfull stuff, not whats fashionable for sale
also an artist should work when inspired, when creativity is here
not for the next show termin, sales opportunity, pull back from world
vs modern artist who says if you don't lauch a trend, nothing on art market
only success at selling self is regarded as good art, but os faillure
same hackers often hack "just" for hackings sake, not for the usefullness
if it turns out to be usefull all the better, but not do it because use
mystics
[Hofstadter], [JamesG], [Raymond] "has the X nature"
[Raymond] "the X that can be Y is not the true X"
programmers must know where the bits are, predict their effect [Levy] p37
correctness is vital in programming, else you drown in bugs
teaches advantages of orderliness, effect on thinking [Levy] p38
attain full understanding of life and self by concentration
read, reread, meditate on themes for insight, reread for freshening up
hacking pure concentration [Levy] p37
is Zen-like [Hofstadter] Zen, [Raymond] "hack mode", [Raymond] "zen"
but also load brain with information [Raymond] "grok"
masters beyond designing, use subconcious [JamesG] p25
masters don't need superficial structure, understand program [JamesG] p39
when in hack mode do not interrupt because of state loss
wait for state to be swapped out, else annoyed [Raymond] "swap (2)"
this state is the contents of short term memory [Norman1] p66
anec background music doesn't disturb hack mode, no state loss
this must be because of 2 separate processors (right and left brain)
it actually helps [Levy] p283 stereo, [Raymond] "troglodyte mode"
perhaps because it stops one brain half from interfering with other
but perhaps simply because it helps relaxing, by concentrating on it
helps unjamming brain, this would make it form of active recuperate
night working comes from desire for uninterrupted concentration
life style, habits, work time [Levy] p29
time phase, wrap wround, problems [Levy] p74
leads to 28 h, 6 day week [Levy] p101
work time noon to the wee hours [JamesG] p99
later came user group evenings, today evening/night get to work
hacker wrote game between midnight and 8 [Levy] p283
Andreessen appears at work after 8.30, pm that is [Gilder]
CCW members gamed through night at computer weekend
I wrote this text largly (90..95%) between 3 pm and 3 am
hacking leads to philosophical questions [Levy] p111
leads to brain hacking, part of applying hacking to life
Gosper "the world consists of little pieces with independant state,
which communicate with each other" [Levy] p118
blattisms, reflections on the nature of thought [Levy] p70
beauty of programming is internal, taoistic [Levy] p394
hackers apply their experience in programming to daily behavour [Levy] p61
bumming mental work, reuse existing design experience [Levy] p101 Nelson
Felsenstein debugging meeting structure [Levy] p215
Thomson problem solving lead to synthesizing jock speak [Levy] p396
in the same vein hackers are also learning to synthesize suitspeak
anec this makes bureau believe hackers are becoming more businessy
Heubi "I think we are victims of a non terminating search algorithm"
actually it was a slowly converging alg with an ineffient implementation
me to Bernhard back from holiday "now you know how a disk controller feels"
not being able to retrieve information from brain is a indexing error
switching between different tasks with intention to return felt as stacking
forgetting to return properly is regarded as having a stack overflow
change the position of a thing that others know is a coherency problem
if you move a thing to a new place coherent a update must be done
check if reciever heared you say something, sender is responsible
like TCP, retransmit after delay until positive acknowledgement
washing basket, stuff-to-wash request entered, batch washed, no free laying
artisans/craftsmen
[Byte] 96-1p218 the real software crisis, not enough good programmers
are born as it, just like good musicians
are artists who produce things for use, not only for creating [Hauben] "arte"
programming like most technical work is based on personal excellence
try/learn/improve, evolutionary improvement of craft [Norman1] p142
has lots of experience, results in instinctive feeling what is right
Tague Unix developers with Multics experience, better than first timers
no matter how smart the first timer is [Hauben] "evol_unix"
programming is an art form, it requires the craft of the programmer
good programmers treat the art of programming as a whole [JamesG] pXI
hackers take pride in their craftsmanship, exa Fredkin [Levy] p100
but academics against regarding programming as art/craft [JamesG] pXII
by the rules mentality vs mastering programming [JamesG] p59
quality is to aim for satisfaction, flawlessness, opposite of minimalism
"right thing" from experience with cost and frustrat of using bad things
do it right the first time to avoid such bad experiences
also "if you can't do it right don't bother doing it", bad is no use
importance of recogniz "right thing" crucial for being hacker [Levy] p118
perfection is the absence of [Raymond] "wart" and [Raymond] "crock"
hackers know that warts will, given enough time, come back and bite them
Antoine de Saint-Exupery on engineering elegance [Raymond] "elegant"
"perfection is not when nothing left to add, but nothing to take away"
anec my zero component machine, colleagues surprised at this notation
meaning of the word hack is a clever solution to a problem
executed with minimal fuss, understanding essence of bumming is crutial
bumming (min effort for good solution) vs saving (min cost solution)
originally job done for pleasure of doing it, not for result [Levy] p23
exa music program [Levy] p34, games [Levy] p57, Widman games disk
but beware of not knowing when to stop [Raymond] "Mars"
anec when I read [Norman1] at work, boss liked my interest in make better
for me it was simply that I hate bad stuff and its designers
I want my stuff to be good, this is a question of self respect
good work requires good tools
hackers hate things that stop then getting the job done, and in proper way
finging the right detail/tool/method counts, this requires wide knowledge
result of not being able to have right thing Gosper no navy [Levy] p86
strong desire for good tools, the right thing, not any old cruft
as near to perfect as possble [Levy] p54
inefficient, suboptimal ways are offensive [Levy] p315
this is also the base of fights over best tools
[Levy] p77, [Raymond] "holy wars", [Raymond] pers charact weaknesses
[PCW] 93-5p223 word processors inspire devotion
if tool A has a weakness and tool B fixes it but has an other problem
then only a tool C without either of these problems will resolve it
if no tool C is possible then the war goes on, often endless
but tools for making tools frustration vs NASA moon shots [Levy] p150
but NASA Apollo project also hackers, help each other [Feynman3] p159
hackers are intollerant of bad tools, of the "just good enough" mentality
bureau claim more feature counterproductive, customer won't see [Levy] p351
bureau "counterproductive" means it costs producer more than brings them
but that is not bad for the customer, when features are desirable
customer "counterproductive" means getting in the way when using it
adding the proper features comes from desire for better usability
customers see this also, exa Softalk Apple Frogger critic [Levy] p388
users feel quality, notice that designer did more than minimum
"as good as neccessary" mentality strongly disliked because frustrating
allways leads early or later to problems, programmers get into trouble
as good as neccess to save cost like eating seed-corn to still hunger
is interesting for shortsighted bureaus, not for responsible hackers
"mediocracy is profitable", "customers expect it" [Garfinkel2] p176
but customer expect it comes only from resignation, not from desire
"the right thing" vs "rise of worse is better" [Garfinkel2] p311
the ultimate case is the decimal number system
it had the roman military as its carrier, beat superior 12er sys
but clock/calender/angles 12er, french revolution all decimal fail
often more expensive is not better, just less efficie made or more profit
so customers buy the cheapest stuff, no market for more expens better
result of this is that only the "just good enough" stuff survives
problem detecting more expensive right thing vs higher priced rip off
ask others what product is good, learn from other users experience
but this runs counter the business competition-is-enemy thinking
bureau utter phrases like "in pursuit of excellence" [Levy] p384
but they don't live up to them, compromise as soon as fast profit to make
their pursuit consists of hunting and killing excellence
anec Sulzer quality dept Georg Sulzer "do it right the first time" poster
when "quality system" introduced "do right" posters were pulled back
replaced with "only as good as neccessary" ones
price was also claimed in QS to be part of quality
but it isn't, it is a second variable to make compromise between
premature optimisation is just as damaging here as in programming
scientists
is a person who searches for understanding of the physical world
aimes to find truth, way it really works, to understand it
good research results from knowing what is going on [Feynman2] p62
Newton and Gauss were hackers [Levy] p147, Feynman and Da Vinci were also
nature is a puzzle to solve, by thinking, exa fixing radios [Feynman2] p21
science is discovery, a creative form of playing [Raymond] "sandbox"
scientists are physically adults who have retained part of child in them
strive for knowledge as capitalists for money
anec a idiot is someone who looking up a word in a dictionary
and doesn't also wander through other words for expanding mind [PCW]
a bigger idiot is someone who doesn't even bother to open a dictionary
at shool "the only stupid question is the one not asked"
scientists uses deterministic models, but acknoledge chaotic effects
truth only absence of known disagreeing facts, never absolute [Hofstadter]
it is not possible to prove correctness of a model, only incorrectness
knows that models are only approximations of nature
doesn't fixate on one model, because programming is complex
requires many interwoven models
the more experiments, the more wrong theories are found out
try out behaviour up to most extreme cases possible
exa astronomy/kosmology at allways larger distance
exa particle physics at allways higher energies
critics of costs should remember that these theories are used for eng
compare also with building of cathedrals in middle age
hackers aim at understanding computers to the same extent, with same method
programs are like theories, bugy or bad ones like wrong theories
working together to this aim requires ability to trust each other
hackers value honnesty and truth, hate deception and lies
hacker ethics [Levy] 2nd chapter, [Raymond] "hacker ethic, the"
RMS behaviour towards others compromising hacker ethic [Levy] p423
reputation, recomendation, contracts vs trust [Levy] p401
Japanese do this so, is reason for them mistrusting American brashness
similarity of Japanese and hackers comes from common Zen and Tao
zen makes hacker Japan compat, misstrust buero, go on reputat, not blabla
Japan success is like hacker success, from reputation, needing reality
general hackish view of the state of American business [Levy] p311
bureau regard symbols and appearances as more important than reality
exa terminal not allowed, typewriter+TV are [Raymond] p471 TV typewriter
exa use of notebook computer in aircraft is not allowed, but palmtop is
exa "but you are dead" to person standing in front because comp says so
exa forced use of "office uniform" (suits) [Raymond] "suit (1)"
exa [Gilder] Andreessen must learn to dress up to impress bankers
because else no investment, bankers too stupid to use other arguments
even though everyone else knows that hackers don't wear suits
lead to using term suit for bureau [Raymond] "suit (2)"
despite suit being the preferd term for bureau with US hackers
I am using bureau here because the term suit is unused in Europe
this is because bureau (and even lower manag) don't wear suits here
also bureau is indepedant of the english language, also works in german
anec Swiss joke "what is the difference between a cows tail and a tie?"
"the cows tail covers the entire asshole!"
exa commission report colour more important than contents [Feynman3] p144
visuals count more than content, time waste on layout [Raymond] "macdink"
exa father hand graph convert to comp incr accept [Raymond] "GIGO (2)"
great sounding words instead of speech content [Raymond] "content-free"
exa usage of words such as vision or concept, nothing in them, bla bla
what they call an application is what hackers call a program
actually what they want as app is something fairly limited, a dbapp
what they call "legacy" applicat is a dusty deck [Raymond] "dusty deck"
or a crawling horror [Raymond] "crawling horror"
what they at IT called a QS was simply a production tracability system
great sounding titles to make themselves sound important
exa grandious job titles, make themselves appear great [Barry] p93
exa film "producer" vs in music industry producer is the real thing
exa HP small computer group did not want Wozniak, no degree [Levy] p254
Wozniac not accepted in Capricorn 8 bit calc project [Byte] 84-12pA69
Capricorn after HP saying that it has no interest in home computers
one should judge people by what they do, not by their labels [Levy] p43
is a principle in every constitution [Lundell], but not in practise
worshiping of numbers, the bigger the better
exa NSA proud of acres of computer [Garfinkel3]
vs hackers see details, proud of computer per cubic metre [ct]
only positive words are allowed, leads to "positive thinking"
exa salted potato crisps light (not weak) vs strong (not heavy)
it becomes impossible to speak or even think about bad things
things that can not be thought of disappear, cease to be detectable
anec loss of contact with reality killed off Commodore
anec MIPS managers thought ACE would make them the Intel of the 90s
they ignore data that doesn't fit the picture, try to suppress it
[ct] 99-4p16 BG myopia
as they don't know as much as those involved with the issues at hand
this leads to decisions based on false or incomplete information
lack the distributed knowledge of the locals, but act as if they did
don't underst, but push as if they did [Byte] 85-9p208 Felsenstein
[Toffler] p138 hierarchical communcation up/cross/down
is not only slow but also incomplete, imprecise or missing
this is show case of left hand not knowing what the right is doing
bureau behave as if they know everything, as if they were omniscient
not prepared to accept they are not and ask knowlegable for help
exa Leffler at Case Western had Harris HW pushed on him [Salus] p168
have built up their plans, don't want them to be foiled by reality
feel hurt when ripped out of their dreams, react angry
those trying to correct errors regarded as attackers, danger to peace
those dependant on them feel threatend by this, don't want to intruse
to prevent this locals muss missinform bureau of their real actions
result that bureau are even wronger, repeat errors, failure
to protect themselves the underlings stop trying, no information flow
result is reality loss of the bureau [Raymond] "SNAFU principle"
crazyness comes from SNAFU, surviving infighting counts, not properness
resulting bad mess is disliked by hackers, they dispise its makers
perhaps we should call them bureaucrazy
anec Minsky AI lab place away from bureau lunacy of th world [Levy] p68
exa when I left firm, I made essay on reasons, boss put it in folder
that QS manager heard it was accident, because also boss of personnel
exa BT multiple email systems failed, because no user feedback
managers don't use or install it, don't see badness [PCW] 93-11p239
exa NASA shuttle reliability estimates falsified [Feynman3] p134
didn't want to know data showing contradicting reality
pushed away those knowing it, destroyed communication
result they exagerated its possibilities [Feynman3] p159
exa commission trying to manipulate report to look nice [Feynman3] p148
if not stopped by Feynman this would have prevented bureau seeing
exa KAL007 shooting because INS setup error and return job loss threat
anec [Feynman3] p66 nobody has found the cause of government stupidity
but it has been found, the SNAFU effect of bureau interaction
it is not the ablility to missuse power that corrupts minds
but the bureau mentality, leading to life in a world of fantasy
anec Bill Clinton "it was bureau snafu" without understanding meaning
anec ants after 2e8 years use local intelligence and pheromones
and that despite not being individualists like humans are
which complicates demands on organisations to fit individual needs
as result they are often ignorant even of basic truths
they often don't know what and who the firms success is based on
destroy it without noticing, like sawing off branch one is sitting on
exa Atari programmers labeled towel designers by ex-textile manager
left the firm [Levy] p325, lead to collapse [Levy] p310, [Levy] p400
crucial diff of importance of towel design vs game design not noticed
anec the Atari downfall even made it into a book titled "Game Over"
exa Commodore palast coup against Tramiel
no leader, disorganised, customers fled, firm ended in bancrupcy
Commodore bought in Amiga, failled because developers with Tramiel
Amiga persecution theory [Garfinkel2] p141 wrong, victim of bureau
[Byte] 90-9p277 Jay Miner on IBM competitior vs game machine
anec bureau blaim failure on cust [Byte] 96-2p127, but are wrong
anec Commodore Switzerland mess up prevented me buying an Amiga
Tramiel after leaving Commodore had designers, product, managers
but no distribution, bought Atari corpse, rumor only 1 mio dollar
immediately scuttled old managment and outdated product range
anec Atari ST by same designer as Com C64, went with Tramiel to Atari
same style (keyboard computer), same cheap and success
vs Amiga graphic chips from Jay Miner who made Atari 800 and left
anec Amiga graphic chips were intended for Mindset, PC "clone"
anec Amiga orphaned when Commodore died, later Escom, also died
exa Apple bureau lost game [Levy] p299, Sierra repeated it [Levy] p400
Sierra too swept up in managment battles, lost game [Levy] p389
exa Ernst Slicer first innovative, then in 3 years bureau fossilised
often bureau don't know at all what is important, success criteria
exa science book picture of drum with formula on top of it
point object vs formula missed, only drum printed [Feynman2] p318
exa XVT mail answer 6 weeks later w wrong machine type, total useless
bureau processes flawed, exa book rating averaging bungle [Feynman2] p294
the rules need to be followed, whether result is usefull or irrelevant
naive belief in wisdom and functioning of the system [Raymond] "droid"
anec QS manager "aber darueber gibt es eine Vorschrift"
anec bureau-driven bungle leading to VMS becoming OpenVMS
government wanted open sys, GOSIP, demands Posix, VMS was not sellable
other vendor taken, big intervention, DEC lost, but other vendor also
is a typical case of the lunacy that bureau behaviour produces
anec [Byte] 89-9p404 pachyderm pers predic, hack parody of bureau method
anec [PCW] Soppyware skit on bureau power fights and marketing
because they think they are omniscient, they don't attempt to better
no experimental attempt to understand and to find better/best
they don't learn, exa 25 year AT&T lawyers vs users [Salus] p224
no attitude self improving, no learning from errors/critics
after that they are surprised that techies don't respect them
but life takes place in reality, not on paper, things must work there
exist 2 ways to attempt to live, learn how reality works or daydream
what the world seems to be vs what it is [Feynman2] p28
bureau only acknowledge failure after massive intervention of those hurt
then they grip nearest alternative that looks "right" and push on
selling forces bureau to behave as if they were omniscient
marketing slime and salescritters are worst
advertising incomplete information, only good, not bad [Feynman2] p341
marketing/PR sends premade "test reports" to magazines
[PCW] 93-5p604, [PCW] 94-9p593
anec test reprints with prospects, including 2 mags with same text
magazine pseudo test laboratory with christmas tree light "FDDI LAN"
describe stuff in hyped up desceptive adspeak [Raymond] "marketroid"
distrust products with content free ads, often those products are bad
the resources spent on making great adverts are not in the product
exa Cause 4GL, great sounding ad, no content, no trust, later failure
anec I thought hype is short for hypocricy, but is hypebole [Barry] p94
they often don't even know they are lieing, because they don't use stuff
Intel sales vs engineering views of 8088 compatibility to 8080 [Dewar]
salesman never knew what could be plated [Feynman2] p56
answer customers can-you-do-this questions (to avoid project faillure)
on the base of of-cause-we-can-do-anything (result they fail cust)
the whole purpose of asking has been taken ad absurdum
to see if you get competent answers test them with can-you-impossible
"used car dealer knows he is lieing, can drive" [Raymond] "salescritter"
anec when I was at shool the was a story about a flexible saleswoman
she was earnestly presented as an example of good behaviour
for claiming to 3 diff customers that the shoe will
stretch while breaking in to fit too large foot (customer 1)
shrink when it gets wet to fit too small foot (customer 2)
is guaranteed by manufacturer to keep shape (customer 3)
they are great at making promises and claiming how good they are
but they already fail when it comes to providing anything
even sending product to a customer who is willing to part with money
just look at often month long waiting times for orders "from stock"
exa [ct] 97-4p314 buying experience
exa CAC writer once tried to officially buy a game
he got it when colleges already had pirated copies of the next version
anec C64 programs cracked by semi professional GCS, own logo screen
no copy protection mess, often better than original state
exa QEMM/Deskview problems with gray import and German Windows version
we couldn't find official importer, so we got gray import, US version
it wouldn't work with german version of Windows, MS bodged it up
at a trade show we the accidently found them, asked them for help
them only "we know problem, we are now putting warning on US vers"
that is extremely useless for customers over here, no help at all
better put address of importers in adds in US magazines
people over here don't read the local mags as they are useless
also no offer of an upgrade to the official version
would get them money and the duped customers goodwill
[Byte] 96-3p216 claims that programmers should talk to marketing
claims that marketing talks to cust, knows their needs and wishes
but "communication" via marketing personal simply doesn't work
communic reqires information, marketing is device for desinformation
can only give discommunication, no use for working on
"lies, damned lies and marketing/benchmarks"
hackers see those hype-ridden know-nothing incompetent idiots
disdain them, have no respect for them, don't believe they have use
computer magazines are unique in trying to sell stuff, extended PR
instead of warning users, publishing experiences, being critical
exa magazine cover title xx hot new products to buy
as if buying stuff were the main interest of computer users
because of a history of being written by enthusiasts for their peers
they wanted to make the discovery known, exa Softalk [Levy] p309
from evangelising the discovery of the PC
later marketing and sales copied the existing style [Byte] 95-5p260
exa at Apple top marketing types are officially called evangelisers
exa at Javasoft also [Javaspec]
no-nothing readers don't notice, in land of blind one-eyed is king
engineers
is a combination between artisan (experience) and scientist (knowledge)
is a rationally planning artisan/craftsman
uses scientific knowledge to estimate behaviour of a design
is a analytic methodology, uses quantities, calculates based on them
like building engineer statics calc, machine engineer dynamics calc
also uses quantitive measurements to confirm calculations, laboratory
to understand something clearly select an example [Feynman2] p85
compares different approaches to a problem
evaluates advantages and disadvantages of each approach
ability of approaches to emulate each other as test of universality
choses the best one for the job at hand, but also expects job to change
if there are 2 ways to get the same result then easier is right [Brodie]
but beware of taking easy way out at cost of end result
software engineer estimates run-time of different designs
exa [Byte] 89-5p261 Xenix IO drivers IRQ vs polling timing
what optimise bring how much diff, measures time with instrument, profile
time effects on entire job, micro vs macro optimize [Garfinkel2] p279 FS
using top down methods or CASE is not SW engineering
more like an artisan using power tools without understanding them, fails
CASE is therefore missnomer, perhaps this is one reason for its failure
anec CASE an joke only understood by those who notice it is not engineering
anec art and science are today widely regarded as contradictions
artists are anti-science because they have lost contact with nature
exa Rheinfelder filmer scared by hackers jokes about [Adams1]..[Adams5]
vs TV filmer glad to hear science found out that the sun will also die
art/philosophy/intellectuals don't learn science, are getting overtaken
also therefore failling in spreading wonders discovered, their job
some artists say that scientific knowledge reduces the wonder of life
Wordsworth "scientist is murderer of beauty" [Dennett] p386
believe sci destroy beauty, because they can't see discovered beauty
but science adds to beauty, not subtracts [Feynman2] p260
scientists all find that their astonishing discoveries add to wonder
science increases not decrease beauty of nature [Feynman3] p1
artist later in film exa girlfriends breast think of love vs biology
I expect Feynmans answer would be "both", by separate brain parts
scientists are anti-artists because they regard them as know-nothings
irrelevant to life and human advancement
artists and scientists don't understand each other [Feynman2] p260
science vs classical education and philosophy [Feynman3] p69
result both split, big gulf in between, no bridge over it
anec satirically overdrawn story of noids and fluffies
but this is just a bad conception of our time [Zopfi] p139
in Leonardo Da Vincis days both were inseparatable, still with Goethe
still in 19th cent neoinpressionists, from painters and colour theorists
in the salons they mixed, discussed, result Seurat and the pointilists
both artists and scientists are interest in how nature is
the splitting between art and science is bad [Langton2] p801
today some scientists (incl all good hackers) are rediscovering the unity
scientists are rediscovering the basics of art/philosophy/intellect
result of scientific revolution, relativity, quantum, chaos, AI, AL
exa Feynman and artist try teach each other their jobs [Feynman2] p260
Feynman success in learning art, artist failed in learning science
but also a few artists are learning science
some avant garde artists are getting inspiration from technology/science
exa Brian Eno [Telegraph] art knows modern sci by Gould, Dawkins, Hawking
vs art still pre-Darwin, collecting, no theory, Eno offers one
brain research shows artist the possibilities of his medium
artist who reconstructed face from skul, also documented art process
science has had more effect than art and philosophy, made view point
but only dry explanation, not connected with exper, art installa try this
but still many artists no connection to science
exa one presenting self in scene as a "mad scientist" type
exa laboratories being used as places for creative inspiration
but don't understand language, just triggered by interactions, events
anec literat prof "in 50 years talk about beauty of math/sci, not culture"
already today kids on computer can solve complicated math problems
find 4 solutions, claim 1 more beautyfull, but no explanation why
--- Batch Systems
Batch Operation
[iX] 98-10p38 IBM S/390
early comp stood still while the user entered/edited a progr at the console
users increase from a few researchers to entire account or engineer departments
to optimise use of the machine eliminate the waiting time while entering
user now types program and input data on to tape or cards [Levy] p28
then hands in tape/cards or tape/card fetch/bring service
and receives result on tape/cards or as printout
programs and data are read in from the tape/cards with a reader
the results written to tape/cards with a puncher or printed with a printer
batch programs produce lots of wastefull printouts
exa on fatal error computer makes a core dump
is the corpse of a dead program (actually process) [Wall] p418
good for an autopsy, but difficult to use because of volume of data
anec DEC special core dump group, cust send dump of crashed machines
anec Martens cartoon with pre-screwed-up paper going into overflowing bin
machine operated by special operators, the priesthood [Raymond] "priesthood"
no access by user, no run time interaction with user or operator
as that would also cost computer time while waiting for it
this lost the interactivity of front pannels completely
this is known as batch operation (from the card batches)
this gives efficient usage of the hardware but is inefficient of users time
the users cycle time is measured in hours or even days
anec to save time programmer replaces a card before run, in wrong program
but it was the operation mode of nearly all computers until 1970
still used on many big systems until 1980
today this form of computing is next to dead
but on these systems many of todays hardware subsystems were developed
but actually mainframes still live on [iX] 98-10p38 IBM S/390
this method was mainly used in commercial computing
systems resemble the organisations that create them [Lampson] p296
organis of SW and SW team congruent, Conway's Law [Raymond] "Conway's Law"
IBM, corp taylorism, ignorance, closed minded bureaucracies and closed sys
batch not just becau vacuum tube technology, also thinking style [Levy] p41
but successfull systems also resemble the organisations that use them
computer customers for mio dollar machines in 1960 were big bureaucracies
results in successfull manufacturers becoming like their customers
while new firms aim for better technology, new markets, to compete
old firms aim for safety [Bell] p14 const price customers
anec NeXTworld hope that NeXT doesn't become like their customers
they did because had to, I'm not any more in user profile, give up sys
Teletypes
[Rochkind] p74 Unix TTY handling sgtty/termio/ioctl and # @ usage
printing output is easier, faster, less errorneous
than reading from a display and handwriting to paper
anec first expansion of Babbages DE was a printer [ct] 89-1p114
for connection of puncher and reader use 110bps 7n2 serial 20mA current loop
exa ASR 33 (noisy and hurts fingers)
mechanical bit decoding mechanism, finger (4*16 chars)
font is in metal types, control system simple as it only counts position
anec CRLF because of slowness of carriage returning, twice 100ms needed
later in computers use CRLF for output but accept only one needed
in Unix and Macintosh to simplify SW only use one Unix LF, Mac CR
anec end of user [Raymond] "EOU"
mechanical bit encoding mechanism
shift-0..9 keys bit vs typewriter paired [Raymond] "bit-paired keyboard"
anec SO and SI codes form ASR 37 [Plauger3] p188
exa Flexowriter [Levy] p28, [Ross2] p85
anec slowness of one of these (3 sec/line) lead meteologist Eduard Lorenz
to output 6 digit data from his LGP-30 rounded to 3 digits only
this data reentered produced deviating results on plotter
lead to chance discovering of what now known as chaotic determinism
exa older Baudot teletype, 75bps 5n1.5 line, shift-up/dn explicit characters
CCITT alphabet #2, () = common variant
lt00: blank E lf A space S I U cr D R J N F C K
lt16: T Z L W H Y P Q O B G figs M X V ltrs
fi00: blank 3 lf - space '(bell) 8 7 cr wru($) 4 bell(') , (!) : (
fi16: 5 +(") ) 2 (#) 6 0 1 9 ? (&) figs . / =(;) ltrs
for offline typing of program code to tape use a teletype keyboard
then read it in and work on computer to maximise machine time usage
later also used for typing data to tape, but not runtime input [Ross2] p85
typing in octal codes makes octal ASCII instead of binary programs
use a octal ASCII to bi-octal binary converter [Ross2] p84
automatic conversion of data by the computer [Ross2] p85
for different formats better automatic switching [Ross2] p86
later usage of assemblers and compilers made such converters superfluous
from this usage of teletype equipment descend
the usage of the ASCII code (extended teletype code)
usage of all upper case output on many systems (IBM, DEC, MS-DOS)
as the teletype only had upper case because only space for 64 characters
anec upper/lower case decision [Raymond] "Great Runes"
anec when computers with 2 cases appeared a..z added as ASCII 97..122
97..122 without shift, with shift now 65..90 are generated
but some manufactures had used 97..122 for graphics chars [Commodore] p136
to add a..z a second second char set in ROM, same codes in video mem
A..Z (65..90) -> a..z, graph (161..191) -> A..Z above [Raymond] "PETSCII"
Paper Tape Punchers and Readers
included with some TTYs, for off-line typing and then fast transmission
also for recording recieved stuff, for later replay, paper storage
can also be used for editing and reprinting text, paper edit medium
these were first used for program saving and reloading
to prevent bugs while reentering an already running program
saving and loading was controlled from the front panel
use punchers for writing to tape, readers for reading [Byte] 85-9p198 tape
reader mechanical or photo electrical (PETR, faster)
storing 36bit systems data as 6 punch lines of 6bit each
packing wide binary to be ASCII safe, ascii armor, uuencode, sixel, base64
once connected punchers and readers were also used
for writing intermediary data and for reading it back into a second program
this requires IO instructions for programs to trigger device access
the processor blocks while outputing a character
for speed pipelining, only block processor on 2nd char to transmit
input tape blocks while program is running, processor blocks when no data
here again use of pipelining to speed up operation
Card Punchers and Readers
cards speed up reading and writing program code and data
pipeline reads/writes entire card at a time, not character at a time
hardware reads/writes one bit of all chars at once vs all bits of one char
cards simplify editing program and input data relative (one card per line)
prevents work of splicing tapes and splice breaks while running
for writing source code and input data cards special keypunches are used
consist of keyboard, puncher and printer
also with a reader for partially modifying an existing card
for speed parallel interfaces from computer to device instead of serial lines
as interf are expensive and processor can only read or write one dev a time
single cable with multiple dev on it instead of multiple cables, channel
finite width of cards leads to fixed length fields, records [Wall] p46
but also fixed length programming style [Raymond] "eighty-column mind"
anec Bremi wrote first program on tape then advanced to cards
Printers
[ct] 98-16p110 printer technologies
to speed up output special fast printers were made
first devices with faster types than TTY finger
golf ball (4*22 chr) [Raymond] "golf-ball printer", [PCW] 88-4p132+p139
note contradiction [PCW] vs [Raymond] about deriving from Selectric
also Selectric typewriter on computer [Baker] p509
daisy wheel (96 chars)
faster dot matrix only requires small moving masses or none
font defined in electronics, more complex but mechanics simpler and faster
technology impact (hammer, needle, pin), thermo, inkjet, laser
[Byte] 87-5p178, [Byte] 91-10p139, [Byte] 91-10p149 colour
[Byte] 91-10p163 inkjet, [Byte] 91-10p177 thermo
[Byte] 91-10p185 electron beam, [Byte] 92-3p269 resolution enhancement
[Byte] 93-12p125 colour inkjet, [ct] 2001-7p136 inkjet
[PCW] 93-2p178 bubble jet history, [PCW] 93-8p399
line printers print one dot of each character at once [Byte] 87-9p215
one hammer for each character position, the print mechanism wriggles
exa line printer on SR CAD PR1ME
anec this was the first mini I worked on
anec IBM PC LPTx device name comes from line printer
though hardly any PC has ever seen a line printer in its life
page printers render and then print entire page, exa laser printers
because of limited memory for large bitmap use banding [Thacker] p283
part of image rendered at a time, printed while next band render
but problems with laser engine not stoppable, complex content req mem
modern printers are more than TTYs
more then 80 columns of chars, different sizes, fonts, placing, bit maps
exa Epson FX80, HP LaserJet [ctk] 90-2p309 Drucker
for graphical output use plotters
pen plotters simulate hand drawing, but are slow
to control them use ASCII commands for pen movement
interpreted in hardware, simple, often only straight lines
no circle, curve or text, require convertion to many lines on processor
for speed use matrix printer bitmap graphics mode (only for small drawings)
for large size electrostatic matrix plotter, exa SR Versatec
for speed parallel interfaces from computer to device instead of serial lines
exa Centronics printer parallel interface [ctk] 86-10p157 Centr Schnittst
Centronix original 36 pin vs IBM LPT 25 pin plug
anec Ernst PC Club ZH 36 vs 25 pin discussion
anec in dongle ad 36 pin called "Japanese-standard" [Byte] 94-9p166
note that plugs on the cable are symmetrical, but signals are asymmetrical
colour printing
[Byte] 93-12p125 colour becomes affordable, piezo, ink, laser, thermal
[ct] 99-7p114 printing colour images
Magnetic Tapes
[ct] 96-8p118 QIC tape sizes, [ct] 97-8p252 backup tapes
exa compact cassette, QIC, DAT/DDS [Byte] 90-11p323
anec C64 hack for normal audio tape recorder on Datasette port
also record player on cassette in with floppy records for distribution
all mechanical punchers are limited in speed, magnetic recording is faster
replace tape/card pun/rdr with tape recorder/reader
for data entry type to cards, transfer to magtape
for this small a computer is used, exa IBM 1401 [Tanenbaum] p7
multiple programs with their data on one tape, run under FMS [Tanenbaum] p7
for printing speed up data allways written to magtape
then printed if desired, this is called off-line printing
for this special printing computers, exa 1401 or EAM 407 [Levy] p20
sometimes containing considerable logic (counters, etc)
the same recording technology as used for drum/disk memory
recording geometry serial, byte parallel, switch tracks, helical scan
also endless tape, exa 8 track audio, Sinclairs microdrives
no hand editing of tape contents is possible any more
as result of this some systems returned to stream data formats (mainly minis)
others keep card-like data formats, but no fixed card length any more
flexible record lenghts (mainly mainframes)
anec on some machines even disk-like block access on tapes was implemented
exa TX-2, LINC [Clark] p362 on-line files, [Libes] p203 pdp-11
Disk Drives
[Byte] 86-5p161 evolution mass storage, overview
[Byte] 89-2p293 HD ST506/412, FM, MFM, RLL, ARLL, ERLL, ESDI, SMD
[Byte] 90-11p283 crystal clear storage, holographic
[Byte] 90-11p302 HD surface materials, perpendicular vs longitudional
[Byte] 91-5p201 storage media, [Byte] 91-10p255 HD smaller, smarter, faster
[Byte] 92-3p195 embedded intelligence, drives getting smarter
[Byte] 94-3p91 digital read HDs, [Byte] 96-4p48 holographic storage
[Byte] 96-6p91 new techno, timing, signals, [Byte] 97-12p44IS3 HD upcoming tech
[Byte] 98-2p121 infinite space, [Byte] 98-5p111 atomic storage
[ct] 86-8p60 HD FM, MFM, NRZ, NRZ0, ESDI, SMD
[ct] 89-2p110 HD fabrication, heads, FM, MFM, 2.7 RLL
[ct] 2000-24p114 old media becoming unreadable, digital amnesia
[ctk] 89-2p253 Festplatten MFM, RLL and BIOS problems
[ctk] 90-12p315 Festplatten disk parameters
[PCW] 92-11p386 HD fabrication
[PCW] 96-6p227 DMF floppy format, less formatting loss, more than 1.44M
disks descend from earlier usage of magnetic drums
smaller devices, easier handling for removing and storing
disk vs drum is like grammophon vs phonograph
recording methods
[Byte] 89-2p293 FM, MFM, RLL, ARLL, ERLL, [ct] 86-8p60 FM, MFM, NRZ, NRZ0
tone modulation (FSK) or pulse codes (FM, MFM, NRZ, NRZ0, GCR, ME)
sectors
for error recogn/corr CRCs over each sect
[Byte] 86-9p115 CRC, [Byte] 87-11p339 CRC, [ct] 96-7p264 CRC
sector begin hard (holes) vs soft (bursts), track begin index hole vs burst
tracks
stepper motors (require regular low level reformat because thermal expansion)
vs voice coil and servo (automatic recalibration, follows track)
recalibration periodical (interruptions) or continuous (AV drives)
cylinders
single platter vs multiple platters, servo surface vs embeded servo bursts
capacity calculation cylinders*heads*sectors*sectorsize, 1000 vs 1024
HD phys/bios/fdisk/format/chkdsk/sales sizes also diverge because of this
exa the 1.44M floppy capacity is 80*2*18*512 bytes, this M is 1000*1024!
it should properly be called a 1440k Floppy [Raymond] "quantifiers"
exa my Quantum Empire 2100 is according to the AHA-1542 BIOS
2006*2048*512 bytes = 2'103'443'456 bytes
it takes the SCSI sector count and zero the lowest 11 bits
also the loss by high level formating helps make them diverge
speed
access time from head moving (min, avg, max seek time)
and then waiting for data to arrive (rotational delay)
originally 3600 rpm, then 5400, then 7200, now even 10000
anec 7200 rpm drives make a lot of noise
disk controllers
anec microcomp floppy controllers originally supported 4 drives
on PC and XT IBM BIOS did also, with AT only 2, like HDs [Gilluve] p416
result for 5-1/4" and 3-1/2" drives and QIC tape switching is needed
anec IBM PC WD1006 controller bug makes drive active LEDs shine constantly
IBM "corrected" this with a shield before the drive LEDs
and a LED on the case which is switched by the HD BIOS
but they put only one LED on the case, for both possible drives
this loses the ability to watch a HD to HD copy as it performs
why not two LEDs on the case or make the BIOS use the drive LEDs
SCSI and IDE use drive LEDs properly, but case hides them
often they are often missing on the drives to save cost
embedded controllers [Byte] 92-3p195 embedded intelligence
speed not bound to an cabling sheme such as ST 506/412 or ESDI
for remapping defects extra sectors/track and extra tracks
also makes dual actuator drives possible, exa Conner [PCW] 93-2p261, Seagate
RAID
[Byte] 90-12p337, [Byte] 91-8p195, [Byte] 92-10p259, [Byte] 93-1p90IS3 Core
[Byte] 95-2p155 Veritas Volume Manager
[iX] 95-11p178, [PCW] 93-3p260, [PCW] 94-9p342
to speed up disk access, scatter sectors over multiple disk drives
to reduce data loss when one drive fails store it redundantly
disk block caching, disks are slow mechanics, RAM is far faster
first controllers only read one sector
after sector read processing time, missing next sector
must wait for entire revolution, to prevent this use sector interleaving
then buffering, read entire track, return when sector read but read further
next read if sector pre read no access, no wait, fast
today cashing (and embedded) controllers have multiple track buffers
[Byte] 92-3p175 what to stash in a cache, mem and disk caches
for speed keep part of disk content in RAM, block buffers, disk caches
cache blocks, tracks, dir entries, inodes
[Libes2] p278 cache alg, [Byte] 85-9p129 cache alg, [Byte] 89-10p297 eval
[Byte] 89-6p294 MS-DOS buffers cache/look ahead, fastopen dir/FAT
hashing for fast finding data in large spaces
[ct] 90-8p252 hashing, [Aho] p436 algorithm, [Dobbs] 96-4p24
every cache is a trade off between memory use (cost accumulating in time)
vs regenerating data from slow media (cost accumulating per regen)
this leads to timeout algorithms to retire long unused entries
disk buffering track is read ahead vs multi track cache is repeat
for caching special RAM on disk controller vs part of main memory
controller cache better on proc w slow mem-mem copy, or full mothboard
vs software cache better if mem-mem fast and RAM on board expandable
for repeated reading prefer buffering in RAM, can be shared, dynamic
MS-DOS config.sys blocks= only in conventional or expanded memory
not possible in UMBs, HMA or even extended memory (XMS)
XMS requires smartdrv, why not buffers=xxx /high similar to dos=high
using the code for in msdos.sys also for buffers in XMS
reason of himem.sys dependancy wrong, as EMS also requires EMS driver
when using smartdrive save conventional memory with buffers=3
cache only disk reads (safe) vs write back cache (faster, but shutdown)
write back cache power off problem, also disk eject cache invalid problem
floppy disks
[Byte] 85-1p167 Apple II disk, [Byte] 86-5p161 evo mass storage, PC floppy
[ct] 95-7p222 XDF 1840k format, [ctk] 87-7p169 Floppy-Anschluss Shugart bus
cheap and random access, a good compromise between tape and HDs in the 70s
since mid 80s too small, too slow, but they are standard, no replacement
anec use both sides of a 5 1/4" on a single sided drive [Raymond] "flippy"
anec once normal 8", mini 5 1/4", 3 1/2" micro [Raymond] "minifloppies"
high capacity floppies, megafloppies
TakeTen, [Byte] 90-10p301 ED, TwinTier, Floptical [PCW] 93-8p344 Floptical
[ct] 97-9p246 floppy replacements
not compatible, no standard emerged, failed, megafloppies became a megaflop
once again a case of greedy bureau preventing their own success
for distributing/installing SW a CD-ROM is better (cheaper, not deletable)
for backing up a tape or WORM or MO is better (large, standard)
[ct] 96-8p112 removable disks vs tape vs CD-R, [ct] 98-9p72 backup
best backup today is a copy to an other HD
backup HD is just as large, reliable, cheap, no special SW needed
ideally a cron job to an other machine in remotest corner of your network
or even over the internet to other site in other town
backup storage hierarchy [Byte] 91-5p191 RAM, disk, tape
for local data exchange many established rivals (Syquest, Bernoulli, MO)
CD-ROMs
[Byte] 86-5p164 CD-ROM bit level, ECC
[Byte] 93-2p116 CD-ROM publishing, do it yourself CD production
[Byte] 93-2p130 CD standards red/yellow/green/orange books
[Byte] 93-3p197 CD-ROM basics, spiral, CD-R, read head, sectors, IS9660
[Byte] 93-9p106 reading mechanism, [Byte] 94-1p231 CD-WO (orange book)
[Byte] 94-3p145 CD-R, [Byte] 96-6p105 CD-R, [Byte] 96-10p139 DVD multi-GB CDs
[Byte] 97-12p30 DVD
[ct] 94-9p228 reading audio CDs via ASPI
[ct] 94-9p259 Video CD, white book, Movie CD (CD-I)
[ct] 95-4p390 ISO 9660 CD-ROM file system
[ct] 95-6p150 format overview, [ct] 95-9p214 updated large HDCD formats
[ct] 96-1p226 Video CD 2.0, [ct] 96-4p390 digitally reading audio CDs
[ct] 96-8p262 Enhanced Music CD, was CD-Plus, multisession music + multimedia
[ct] 96-11p286 CD writable, [ct] 97-3p190 superfast CDs, [ct] 97-4p246 DVD
[ct] 97-4p252 CD-RW, [ct] 97-8p228 CD-RW packet writing
[ct] 97-9p240 CD-R reliability, [ct] 97-12p206 CD direct digital audio copyin
[ct] 97-13p190 CD-RW recorder, [ct] 97-15p260 UDF format for CD-R, CD-RW, DVD
[ct] 98-3p166 CD-R UDF format, [ct] 98-8p160 DVD Formate, [ct] 98-13p114 DVD
[ct] 98-19p214 CDs over 74 minutes, format [ct] 99-4p218 CD-Text
[ct] 99-5p176 CD-WR disk types, recording techniques, faillures
[ct] 2000-13p144 DVD basics, [ct] 2001-6p210 DVD recording
[ct] 2001-13p192 making (S)VCDs, [ct] 2001-18p162 SA-CD and DVD Audio
[ct] 2002-11p97 CD and DVD disk structures, [ct] 2002-11p108 DVD video format
[ct] 2002-21p168 CD-RW Mount Rainier extens, [ct] 2003-7p182 HD-DVD vs BluRay
[iX] 96-7p50 cdwrite for Linux
[PCW] 93-5p518 CD-ROM formats, usage, [PCW] 93-7p344 CD-R devices
[PCW] 93-10p459 high capacity CDs
[PCW] 94-4p267 CD standards confusion green vs white, NTSC vs PAL
[PCW] 94-9p497 CD 6 layer, CD blue laser, CD PWM
[PCW] 94-10p471 Video CD, karaoke
[PCW] 94-10p225 White Book needed for video, [PCW] 95-1p412 CD standards
[PCW] 95-2p323 CD Standards, [PCW] 95-4p426 CD techn, drives, issues
[PCW] 95-4p521 CD plus mixed formats, [PCW] 95-5p380 HDCD
[PCW] 95-8p587 CD+G, [PCW] 95-9p214 CD standards
[PCW] 96-2p94 enhanced (mixed audio and data) CDs
[PCW] 96-5p43 enhanced, [PCW] 96-7p244 CD-RFS multiple record without session
sectors CLV (CD, spiral, var revs) vs CAV (rest, concentrical, const revs)
CD drives with caddies vs drawer, is a matter of taste, I prefer drawer
originally only direct audio out, only later digital readout
[ct] 96-4p386 audio connector mess
anec multi CD drives or CD changers more expensive than copying onto big HD
optodisks
[Byte] 86-5p203 optical ECC, [Byte] 89-2p274 digital paper WORM
[Byte] 89-10p259 WORM, MO, [Byte] 90-11p275 Magnetic, WORM, MO, standards
[Byte] 90-11p289 phase change, [Byte] 94-3p107 MO
[ct] 95-2p76 phase change, [ct] 98-25p190 MO drives
[PCW] 94-9p497 Minidisk MO, [PCW] 95-12p145 optical drive technologies
with todays hard disk size increases optical has missed the boat
add to that standardised support for hard disks, not for opticals
use a hard disk for fast working space, tape for cheap bulk storage, tiers
optodisks are often associated with DIP systems, because of bulk size
but bad, size lower modern HDs, unreliable, special filesys, swapping
[PCW] 96-2p45, also PlasmaDat pictures later compressed on HD, faster
optical polymer memory [ct] 98-3p18 and laser holographic memory [Byte]
fixed disks vs removable, exa Floppies, Syquest
automatic eject after unmount, auto-unmount after pressing drive eject knob
exa Macintosh multi-floppy backup program, floppy ejects as soon as full
detection of disk insert, auto-mount after insert
exa Macintosh backup above needs no clicking OK after inserting next floppy
Virtual Memory
[ct] 92-5p178 modern OSes
load big programs only partially into memory
code and data not in memory is stored on disk
core/RAM+drum/disk gives speed (core/RAM) and space (drum/disk)
VM appeard early in history, even paged VM [Salus] MADM vs [Byte] Atlas 1960
disks (originally drums) were first used for virtual memory not for files
[Byte] 86-5p161 evolution of mass storage
anec in BSD the swap partition is still called /dev/drum [Raymond] "drum"
programs and data were still loaded from and stored to tapes
exa Whirlwind director tapes for CLI [Ross2] p67 despite drums for MDR
[Byte] 92-3p161 memory pyramid reg-cache-mem-disk-tape
[Byte] 92-3p183 storage managment, automatic migration and fetching
[Byte] 94-3p79 managing mass storage, pyramid
[Byte] 94-6p153 managing decentralised storage
split big programs into multiple parts with explicite loading, overlays
exa Fortran/Basic chain command, MS-DOS exec in overlay mode
this can still be done with multiple auto-rewinding tape drives
but it can still be done explicitely ba the programmer, but it adds work
automatic loading of multiple small program parts, segments
[Tanenbaum] p128, fixed segments p131, with paging p132
segments are linked in one file or in separate files
multiple segments can be loaded at same time
load on demand, when no space for new segment remove an old one
capturing accesses to not loaded segments
for accessing code with calls/jumps to it hooked to an autoload routine or
indir call to jump, trampoline [Raymond] "trampoline", [Raymond] "snap"
once loaded ev no need for reload, snap the pointers to loader
this is a fairly common usage for SMC, OS modifies unsuspecting progr
to conserve table space one pointer per subroutine or object file
typical code segments are subroutine level or object file level
for accessing data with handles to data and locking/unlocking calls
on locking convert handle to pointer, valid until unlocked (swappable)
automatic locking can be made by data access via dedicated stub routines
these stubs are compiler/linker generated, only LD/ST instrs and return
require space but so do lock/unlock calls, both only on large blocks
to conserve table size only one pointer per data segment
typical data segments static var of object files or dyn alloc memory
as side effect dynamic loaded libraries (DLLs), run time loadable libraries
save space on disk by not linking multiple copies of lib in each EXE file
Pr1me Primos on disk only OBJ files, no EXEs, all linking done on loading
Windows the entire OS consists of DLLs, despite EXE file extension
the kernal, the drivers, OLE, MAPI are all DLLs
also Oberon [Byte] 93-5p111 (and Mesa and Modula from which it decends)
and of course the Smalltalk classes, that started it all
and even the Lisp modules of functions, that are load time compiled
DLLs give most modern systems their power/flexibility
this comes from multiple entry points to code, unlike EXEs
DLLs are one of the biggest holes in standard Unix
this is one of the few places that DOS/Windows was long better than Unix
for Unix nearest thing is GNU DLD, used in Linux ELF?
exa Linux a.out only few manually alloc addr spaces, only now to ELF
DLLs can have version problems
[Byte] 97-11p87 Windows DLL clashes
exa VMS Motif 1.1 vs 1.2, exa MS DLL version mess [ct] 97-6p17
exa Linux libc.so.4.6.2 not accepted by Amaya, needs >=4.7
requires different versions to have different file names, exa Linux
exa Flow-Matic [Hopper] p17
exa Whirlwind group control drum storage [Ross2] p58
based on the batch runtime MDR debugger, hooking system
using a memory table for virtual mem entry points [Ross2] p104
exa VB (virtual B) [Salus] p34
exa Alto Smalltalk everything in memory is an object (inc code, stack frames)
virtual memory deref microcoded in the instr set decoder [Lampson] p305
exa Macintosh OS
[ct] 99-2p16 blue G3, [ct] 99-16p52 gray G4
Macintosh Areg+offset, code in 32k segments, even worse than Windows 64k
for accessing data handles are used, are pointers into table of pointers
to use memory ensure data is loaded, lock it and dereference 1st ptr
after using memory, unlock it for poss unloading, delete pointer
no automatic locking/unlocking for data, no autoloading stubs
the compiler/linker/loader should do this, not the programmer, hide it
anec unlocked handles are most common crashing bug on Macintoshes
since Macintosh System 7 use VM, "infinite" addr space, no segment swapping
68030 paging unit is used for all logical->physical purposes, paging
exa Borland VROOMM extension for MS-DOS [Byte] 89-8p344
similar to Macintosh, automatic by compiler and special linker
exa Windows 88/286
on 8088 Windows handles segment loading in SW like the Macintosh
uses 80x86 segmentation for managing code and data segments
converts segment handles to 80x86 segment bases, offsets never convert
progr use 16bit adresses where ever possible, gives many 64k limits
the segment registers belong to Windows, reloads them
[PCW] 91-12p405 for far calls fixed address trampolines, run time gen
Microsoft calls these segment address reload trampolines thunks
likes term, also calls Win32 converters from 16 to 32 bit thunks
[Dobbs] 96-4p42 programming with thunks 32 bit call 16 bit DLL
Geary technique only works when DS=SS, in user code, fails in DLL, OS
data is accessed via indirect pointers and lock/unlock
programs must contain calls for SW memory managment, same bug potential
this also slowes Windows down and prevented full use of the 286es speed
this was a failure because the 8088 was too slow for Windows anyway
nearly all users 286 where the 286 HW descriptors were used
anec error repeated by MS/IBM with OS/2 1.x 286 based instead of 386
actually Bill Gates tried to persuade IBM to go direct 386
on 286 Windows uses selector hardware for doing handle->base
286 microcode issues a trap when a non-loaded segment put in selector reg
no hooking of calls, no locking and unlocking data segements
dynamic loading of code and data without SW tricks, faster, less bugs
anec Windows 286/386 mode no lock/unlock calls, linker /t flag in EXE
on 386 Windows all segm are given an addr on first load, then left alone
the 386 paging unit is used for all VM purposes
Windows mem man has been expanded multiple times like 80x86, PC, MS-DOS
[Byte] 90-8p133 memory managment, [Byte] 91-9p38 Windows 3.0 inprovements
[ct] 91-5p114 modes, [ct] 92-5p106 intern, picture of 3 stacked buildings
code left over from many memory modes
real mode, HMA, EMS, EEMS, XMS, protect 286, 386, DOS extenders, VM86
anec because of this has been called mode museum [Byte] Win 3.0 test
Windows is bound to 80x86 architecture, that's why only NT is portable
using only Windows memory managem and swapping/paging in DOS, without GUI
is not possible, programmer must take it all in one or nothing at all
automatic loading into memory in fixed size chunks, pages
gives less problems when replacing them than with swapping segments
as all pages are the same size, no fitting into holes, no shifting around
a program can be bigger than the entire memory without using overlays
because of page limits not on logical structure borders
addresses must be tested by PMMU hardware for straddling page boundries
page tables large, in memory, for speed AM/TLB/ATC [Tanenbaum] p101
requires 1..5 table accesses before actual memory access, use TLB/ATC
page reloading in hardware, from special swap space disk vs
in software, via an page-fault trap when a non-loaded page is accessed
paging requires more data in processor, registers, reload form memory
for speeding up address translation cache (ATC), etc
[ct] 2000-2p260 translation techniques TLB, LRU, MTRR, write buf, stream
page replacement strategies instead of segment replacement
[Tanenbaum] p107 replacement algorithms
[Byte] 89-11p341 virt mem, NUR, clock, 386/486, Unix, Macintosh System 7
[ct] 87-1p64 Speichern wie die Grossen
forget/reuse non dirty pages, use r/w protection flags or dirty flag
scavenge for Not Used Recently, use r/w protection flags or accessed flag
pageout dirty pages for later reload, then non dirty, also only NURed pages
page faults can be used to load a program on demand, demand paging
reduces amount of disk accesses needed to load a program before execution
same also for non mapped memory zero on demand and copy on demand
page faults can be used for access control
page 0 can be made unaccessible to detect null pointer dereferences
exa VMS, Mach, Linux, but not used in BSD
exa PDP 11 (2*)8 pages of 8k size [Tanenbaum] p97
one level address mapping with 8 or 16 registers in MMU
exa VAX [Leffler], [Tanenbaum] p98
P0+P1+S+res, top quater of virtual addr is reserved, use for phys access?
would limit physical memory to 1 GB, not bad, as Qbus only has 64 MB
splitting user program space into P0/P1 because heap/stack, both growing
2nd level page tables for P0/P1 in S lead to BSD user process size limit
exa 68020 and 68851 PMMU [Dewar], [ct] 90-10p354
all addr multi level, BSD on Sun emulates VAX approach, 1 and 2 level table
exa 80386+ [Beck], [Dewar], [Byte] 86-10IIPp92 386 mem, [Byte] 86-10IIPp111
all addresses go through dual level page tables
the 80386+ uses segmentation and paging, layered [Tanenbaum] p135
same also GE-645 and Honeywell 6000 with Multics [Tanenbaum] p132
this is used by Windows 386, OS/2 2.0, NT, all PC Unixes
exa MIPS [Dewar], [Tanenbaum] p105
2+1+1, only ATC and invalid trap to SW, designed for emulating VAX approach
uses top 1 GB for physical addr, exa interrupt and trap routines
exa IBM ROMP, RIOS/POWER and PPC [Dewar] p397, [Tanenbaum] p106
inverted page tables and hashing
exa 88000 [IEEEmicro] 92-4p40
switch between behaviour like 80x86 or MIPS
exa Alpha [Byte]
like MIPS but code for handling invalid trap runs in special PAL mode
backing storage [Tanenbaum] p126
reserve space for all virtual address or only non recreatable from EXE file
BSD reloads only from page space, from EXE only first load on demand
Unix sticky bit to prevent del often used progr from memory [Wall] p370
sticky bit (save text mode) to keep program in memory [Frisch] p31
paging space on an raw disk partition vs in a file
on multidisk multiuser systems a separate small fast disk is prefered
on WS usually a partition is used (often there is only one disk in a WS)
but NeXT Mach Unix uses a file, preallocated but it grows if neccessary
on PCs usually a file, this makes the least admin trouble, is growable
but file is bit slower because of going through file system block managm
Windows choice of a growing file or a fixed preallocated linear file
linear is faster (same speed as a partition), but I didn't notice diff
Linux a partition or a fixed size file
file is supposed slower, but I never noticed diff on my system
page read in random access anyway, filesystem block tables in RAM anyway
memory size vs processor speed
every program has a amount of memory it is currently accessing
this set of memory cell wanders arount in the programs address space
every program has a shifting pattern of memory in use, its working set
this must stay smaller than physical RAM, else lots of (re-)loading
this is known as thrashing, slows down machine enormously
not enough memory to deliver data to be processed or code to be run
will prevent a processor from reaching speed because of waiting for disk
this is not memory access speed but amount of data in memory problem
exa OS/2 2.0 on 4M RAM continuous paging, 8M speeded it up 5..10 times
exa Windows 95 difference 16M -> 8M is loss of 30..35% speed
on PCs with complex OSes (exa Win, OS/2, Unix) sensible size is 2^(x86-86)M
86/88 1M, 186/88 2M, 286 4M, 386 8M, 486 16M, Pent 32M, P6 64M
if you can't afford that much mempry then a big processor is wasted
better get smaller processor and better video/monitor or controller/disk
Pentiums with 8M or P6es with 16M are a factor 4 underdimensioned
yes I know RAM is expensive, but a wasted processor is even worse
anec IT 5..10 users on a MVII (ca 1/4 386 power, but 8 MByte RAM)
anec main reason for upgrading my 386DX16 was motherboard only 8M and ISA
actually intention to expand mem by soldier to 16M but then DMA defect
Unix comes from a machine with small RAM, multiple programs and fast disks
swap partition from beginning, as result extremely disk intensive
later programs and RAM bigger, processors faster, but disks stay slow
use RAM for swap/page avoiding, caching, Unix becomes memory intensive
vs ITS, CP/M, MS-DOS/Windows from single program, lots of RAM, slow disks
run everything in RAM, disks only for files, compact and fast
with growing fuctionality, memory intensive, later segment/paging added
File Systems
[Duncan], [Leffler], [Byte] 89-5p291 and 89-6p327 directory structures
[Byte] 89-6p151 OS/2 disk, [Byte] 90-10p34 HPFS vs FFS
[ct] 92-4p190 MS-DOS, [ct] 94-5p252 Unix, [ct] 95-12p360 HPFS
[ct] 2000-6p116 debugging (DOS) fielsystem and PC partition table
[ct] 2000-6p138 inside Linux ext2, [ct] 2002-6p228 journaling FS for Linux
[ctk] 87-11p241 disk structures, [ix] 95-1p146 fsdb file system debugger
[Uo] 93-10p40 MVS/ESA file sys, [Uo] 93-12p37 OS/2 HPFS, [Uo] 95-7p98 Veritas
exa Apple II, CP/M, MS-DOS, Unix, BSD FFS, Apple Macintosh
use of disks to store files, for storing progrs and data instead of tapes/cards
can be viewed as a collection of "tapes sections", automatically selectable
to avoid operator tape loading/unloading time, more flexibility
anec Ernst mainframe people call disks direct access storage devices (DASD)
memory is called storage on mainframes, tapes are indirect access
disk organisation for storing multiple variable size files
allocate space, discontinuous block arangement
after high level format (file system struct) less disk capacity for use
anec Columbia crunch command and system crashes
file organisation
one directory per disk/partition
anec some mainframes still don't have subdirs, would give old SW problems
they rely on partitioning disks instead, exa IBM VM [Krol]
anec MS-DOS 2.11 with subdirs and Wordstar 3.2 without at Tech
user flag in dir entry, exa CP/M, used by ZCPR3 to emulate directories
subdirectories, exa Multics [Salus] p30, Unix, VMS
file name space managment, x- convention, hierarchical with /, db w :::
directory information, exa read-only, hidden, system, cre/access/mod time
anec cat generates new file, new times, but cp should leave old cre/mod
file access routines, IO multiplexer, logical devices
standard data formats, system calls/APIs and OS data structs
data formats blocks, records, streams, from Multics [Raymond] "Multics"
system calls handle=open(identific), read/write/close(handle)
for file access by multiple users file locks, advising vs enforced locks
RAM disks, simulated pseudo disk in RAM
mainframes often put important DBs on multi-gigabyte HW RAM disks for speed
they can not be loaded into the processors RAM
because max address space is too small, exa IBM 370 max 2GB
large block of RAM with pseudo disk controller on channel, called SoliDisk
also in PCs RAM disks, large chunk of RAM with a pseudo disk controller
this was often done on Z80 systems with only 64k addr and floppy disks
some RAM disks even had a backup battery to prevent delete on powerfail
or in PCs a block of processor RAM as pseudo disk
exa on 286 with MS-DOS 3.3 progr in 640k and 384k vdisk.sys for \TMP dir
exa Windows 3.x only uses 16M RAM even on a 386 with 32M and in 386 mode
a college uses ramdrive.sys containing a temporary swap file in rest
anec on Atari ST part of main RAM as disk, driver only reset on power on
when the user reset the computer (often) files in RAM disk stayed alive
today use of memory for caching such as smartdrv is preferable to RAM disks
no 2 drive numbers, no small size limitation of fast drive
backed without battery, no loading at boot, dynamic loading of used stuff
but also [ct] 96-12p78 RAM disk with automatic sizing, overlays directories
memory mapped files
(re-)loading after VM page faults from a page-file
requires OS mapping parts of address space to parts of file system
allow other files to be mapped into memory address space at programs request
gives memory mapped files, leads to programs without read or write commands
exa Mach only accesses disk by mem mapped files, paging must go to file
mapping memory to files leads to persistent memory
IBM AS/400es OS/400 is based entirely on memory mapped files
mapping all page faults to files is essentially a large disk memory
with all RAM being used as a big disk cache, fast, optimal use of RAM
is like a smartdrv using all of memory not being used for user program
when a program want more memory the file cache shrinks automatically
when more files read unused progr mem is paged, cache grows, exa Linux
balance disk accesses for non-cache disk reads and cache-forced paging
this makes caching even more attractive than RAM disks
Unix UFS
all directories inclusive root are simply files with special contents
entries 14 char filenames (any char but / and NUL) + 2 bytes inode nr
multiple (hard-)links to a file, information in an inode [Frisch] p35
introduced to return from a directory to its parent with cd ..
hard links were introduced so that . and .. entries in dir stuct on disk
not in filesystem code in OS kernal, small code saving, big trouble
while a normal file can have any number of links (and names)
a directory can only have name in parent, . on self, .. in children
no 2 names in different parents (or even in same parent)
because else .. would not know where to point to
this would give a network struct file sys (nw as in nw db, not NFS)
better do returning to subdirectory in the kernal, from descending
anec suppressing . and .. visibility gave .* filenames invisible convention
this makes many problems, exa requires ls -a, rm -r .*
anec ln . name gives a link to own dir, not erasable any more
rm complains . is dir, rmdir complains . not empty
rm -r gives an endless recursion in the kernal filesys code
anec [Garfinkel2] p265 claims that you can't find other links to a file
but you can do so with ls -i and find / -inum
they give reason of someone else modifying your file over other link
simply look at the file owner, is the last person to modify the file
or set the file permissions to prevent others changing your file
creating links with ln, removing with rm, file deleted when no links to it
this requires a link count in the files inode
deleting by unlinking file, directories firs tunlink . and ..
in early days mkdir and rmdir used explicit link() and unlink()
later this was changes to remove() to prevent lack of integrity
but preventing unlinking of dirs is wrong, I know better than SW
particularly when deleting an broken directory
anec deleting files by dropping links from dir prevents delete protection
only way to prevent del is to make dir writeprotected, no new files
file info in inodes instead of directories, only filename in dir
ls standard is short as -l is slower because of lots of disk head moving
anec on Amiga-DOS inode is in file, incl filename, slow DIR command
mount all drives file sys into one tree, no disk names, no drives visible
no changing of paths when subdirs moved to separate disk, exa spool, man
but this could have also been done with logicals, like in VMS
mount requires dirs to mount onto which must be premade (for inode nr?)
why use mount command, why not a inode with mountpoint filetype
problems with mounting a different disk as root, / moves, paths break
thats why symlinks on same disk must be made ../../../xxx/xxx/xxx
problems with unmounting file systems in use
particularly from died NFS server, I as user know better than SW
environment vars in processes memory
exa TERM, HOME, PATH, SHELL, EDITOR, PAGER
System V additions
FIFOs (named pipes) inode type in filesystem
/proc filesystem for ps system information, includes a dir per process
why is network not accessed as a /ip, /tcp and /udp filesystem
BSD once had a /dev/tcp device, but removed it when sockets introduced
sockets is case of Unix "everything is a file" philosophy falling apart
anec "Version 7 last proper vers of Unix" [Raymond] "Version 7"
in 4.4BSD far simpler interface portals, not spread [Salus] p219
why not /dev file system for naming devices, dependant on inserted ones
Linux additions
VFS allows multiple coexistant filesystem types
BSD FFS
faster, stays fast, >5% of bandwidth [Salus] p161 vs [Garfinkel2] p280
arranging a files sectors consecutive [Leffler] vs [Garfinkel2] p264
long filenames, up to 255 char, was first OS with this size
symbolic links
like logicals, but in filesystem, not in process, for all users the same
cd symlinkdir/.. does not come back to where you were
but tcsh remembers path steps, cd .. comes back, use cd ./.. for normal
symlinks pointing to themselves (ev indirect via other symlink)
can cause an endless expansion, endless loop in kernal, BSD expand limit
cp -R doesn't understand their consequences, use tar [Garfinkel2] p277
find also knows consequences, drops symlinks, only ever use find from /
but a bit of unsafe code in BSD kernal
anec FFS on my NeXT "freeing free inode", is common [Garfinkel2] p274
resulting crash (panic) is worst possible reaction, I lost 5 MByte
why doesn't Unix do it's normal bahav, ignore err, inode is free anyway
when it happened I had no clue of problem, coleagues neither
after it happening 4 times I traced it back to new disk drive, replaced
note that UFS problems are buggy FS code, not FS structures faulty
anec problems w BSD bugs lead to [Raymond] "Berkeley Quality Software"
VMS Files-11
also uses inodes despite return to parentdir with .. in OS and no .. on disk
lots of information in inodes, see DIR /FULL, exa backup time
inodes have reusage count, used in directory file for detecting stale links
but inodes have no reference count
anec Albin made second link, del file, empty link
file versions (also in ITS and in intended GNU HURD file system)
on systems without file versions SCCS/RCS (Unix) [ct] 90-8p226 SCCS/RCS
or include date/time as part of unique file identifier
file paths [dirname.dirname]filename.ext
no extensions on dirnames, all have .dir
why cre /dir dirname instead of cre dirname.dir
allways del for files and directories, no special del dir or recursive option
when files in dir and del [dirname...]*.* only files del, for dir second
no mounting into filesystem, visible disk names, full path disk:path
logicals in multiple hierarchical tables (system, user, process, job)
resolved by filesystem, not by shell as environment vars, despite in mem
unfortunately filesystem based symbolic links are missing, both better
anec Kompal wrong #include logical, redundant info problem
recursive expansion possible
anec MSB problem with [xxx][xxx] in constructed paths, not [xxx.][xxx]
multiple directory expansion possible
anec slow file open, Peter Kompalb.exe 25% run time, but also ACLs, net
CP/M (Control Program for Microproc or Microcomp, 1977) [Byte] 90-9p375
anec name originally Control Program/Monitor [Barry] p57, [Raymond] "CP/M"
began its life as a set of TTY, reader and puncher monitor routines
first only BIOS, no disk and file system support, no BDOS
only later did it became a disk based OS
derived its syntax and semantics from DEC OSes such as RSX/11
had such things as 8.3 filenames, one letter drivenames, no subdirectories
inherited them to MS-DOS, here compatibility goes back very far, RSX/11?
large files (over 10 sectors) needed "continiation" directory entries
small and simple, it had to fit incl user program into 48k of memory on 8080
anec one floppy contained OS, utils and user progr, second floppy data
anec user had to warm reboot OS with Ctrl-C when changing a disk
MS-DOS (Microsoft Disk Operating System)
[Byte] 91-7p36 MS-DOS 5.0, the last mayor improvement
originally not just for the PC and clones, also other 8086/8088 designs
exa Sirius 1/Victor 9000 [Byte] 82-11p256, Sanyo MBC550/555, Apricot
like the IBM PC it runs on, a classical example of "as good as necessary"
PCs have increased significally in power, MS-DOS didn't grow with them
can only use real mode of 80x86 processors (1MByte limit)
no protected mode (16/4096 MByte) even after hardware (286/386) had it
only very lately did VCPI, DPMI appear [Byte] 90-10ISEp113
and DOS extenders [Byte] 90-10ISEp250, Windows based on DPMI, DOSX
Microsoft claims that MS-DOS can't advance because of compatibility
but both Windows and OS/2 are better DOSes than DOS
also MS-DOS isn't fully compatible anyway, dropped utilities
exa 3.3 no exe2bin, 5.0 no edlin, 6.0 no backup/restore
anec 3.3 exe2bin laying dead outside of box in comic
anec backup is included in list of setver as wanting 5.0
anec Bill Gates BOB demo claim MS-DOS best poss OS for PC [PCW] 95-4p323
but Unix V1 (1969) was more powerfull than MS-DOS, on weaker hardware
BOB logo [PCW] 95-3p294
often patched, yet another special interface added
problem that most programmers doesn't know all the many extensions, bugs
can ev be solved with [Raymond] "interrupt list, the"
also [Byte] 89-10ISEp209 standards dictionary
small filenames (8.3, ????????.???), like CP/M
the dot is not stored on disk, 8.3 -> 11 chars on disk, fill with blanks
this is why disk labels are 11 char, stored in a pseudo-filename
for filenames with wildcards (? and *) system calls for find-first/-next
* in a filename only as its last char, is expanded to ?s until name end
qwer??*.ty* -> qwer????.ty?, *qwerty is not allowed, only ./end after *
this is implemented the same in CP/M and VMS (lib$findfile)
after introducing long filenames in OS/2s HPFS and NTs NTFS failed
Microsoft extended FAT with long filenames in MS-DOS 6.0
in doing so undelete fails, use lock and unlock [PCW] 96-3p34
minimal disk IDs (1 char, ?:)
disk labels are only decoration of dir listings, not used in file paths
allocation of drive letters A 00, B 00/01, C 80P, D 81P, E.. 80/81E
drive letter numbering blues with HD/Syqest/CD [Byte] 96-6p158 Pournelle
slow (global FAT, lots of head moving), cluster space waste
but it was actually an improvement over the CP/M file system
1.x no subdirectories, only root dir with 144 entries, fills first track
still today the MS-DOS root directory is restricted to 144 entries
2.0 introduced directories, with \ syntax [Raymond] "bug-compatible"
the / was already used for switches, is derived from RSX-11, VMS and CP/M
why not also use the VMS directory syntax [dir.dir]file.ext
fixed .dir ext would not need type bit, same .lab for disk labels
why has MS-DOS got . and .. entries in subdirs (not in root dir!)
despite not having hard links, code for cd .. is in the OS anyway
cd . also in OS code, to do it in root dir which has no . and ..
for recursive dir ops, xcopy /s, backup /s, but no del /s, needs deltree
1.x-3.x size limited to 32M (2^16*512)
bigger disks must be partitioned into multiple file systems
with CP/M it was even a 8 MByte limit (2^16*128)
since 4.0 larger file systems, but still max 2^16 clusters, keep growing
Win95 VFAT long file names [ct] 97-5p352
MS-DOS can't handle raw disk devices
it is not poss to copy a CD-ROM filesys onto a HD partition
or an imagefile onto a floppy disk
anec rawrite.exe to make boot/root floppies for installing Linux
anec story of CP/M-86 fail because of Gary Kildall flying is not true
[Byte] 90-9p414 PC creat CP/M-86s real problem 1 year delivery time
IBM coudn't wait, PC must be on market in 1 year, else project terminat
Bill Gates sold it to IBM as replacement for CP/M-86 when DR deal fell
anec Bill Gates sold to IBM before buying from Paterson [PCW] 92-11WIp9
Bill Gates promised MS-DOS in 6 weeks (it took 2..3 months)
first version CP/M clone QDOS by Paterson in 6 weeks [Raymond] "MS-DOS"
[PCW] 96-9p122 Eubanks, all customer dealing by Dorothy Kildall
preparing for holiday, dealing with HP, no time for IBM
vs Bill Gates being wery agressive, took chance
video TV interview with Jack Sams of IBM (their SW buyer for PC OS)
Dorothy Kildall dislik NDA, delay supprise IBM, Steve Ballmer took chance
anec Gary Kildall killed in 1994 by armed robber
OS/2 [Byte] 91-12p46, [Byte] 92-10p179, [Byte] 93-11p313 OS/2 extended attribs
[ct] 97-6p64 OS/2 mid life crisis, [PCW] 94-12p326 Warp
Microsoft and IBMs second attempt at failing [Raymond] "OS/2"
yes it was once a collaboration between the two of them
became IBM only when Microsoft lost belief and continued with Windows
was originally intended as successor to MS-DOS
failled because it was late, incomplete and HW intensive
main usage for mission critical systems and as Lan Manager server
anec because name and version 1.x problems called half an OS, OS halbe
uses either FAT or new HPFS file system
HPFS has i-nodes (called f-nodes) and long filenames
is a better DOS that either DOS or Windows are, but not better Win than Win
anec Windows programs direct on OS/2 desktop was already in 2.0 and worked
but I dropped it because only 640x480 on my tseng4000 video card
and no DECnet drivers and X Windows available for it, I needed them for VAX
NT [Byte] 92-10p167, [Byte] 94-10p203, [Byte] 96-5p42 NT vs Unix for Servers
[Byte] 96-11p145 Cairo, future NT vapourware
[Byte] 97-5p66 NT 5.0 for Enterprise, Active Dir, DFS, COM
[ct] 96-9p148 Windows NT 4.0, NT vs Netware
[ct] 96-11p15 NT beats Windows 95 in speed, from better disk handling
[ct] 97-3p376 Windows NT PE executable format based on Unix COFF
[ct] 97-6p376 NTFS file streams, [ct] 97-12p76 NT 5.0 Beta, intentions
[ct] 99-9p82 Windows 2000 W2K, [ct] 99-13p186 NT vs Linux servers test
[ct] 2000-5p148 W2K install and operation
[PCW] 92-11p231 Cutler interview, [PCW] 93-5p302, [PCW] 96-8p104 NT4.0
Microsoft and IBMs third attempt at doing wrong [Raymond] "evil and rude"
yes it also was once a collaboration between the two of them
its original name was OS/2 version 3.0 NT, later renamed to Windows NT
anec naming NT from N10 (Intel code name for the 80860 [Dewar] p341)
not from VMS+111=WNT as claimed by conspiration theory freaks
using the 80860 for NT dropped because no sensible IRQ response speed
Microsoft then retconned NT to mean New Technology
NT took so long to arrive, renamed from New Technology to Not There
later when problems with first version visible IBM OS/2 ad Nice Try
NT was intended as a high power client OS for WS
it failed on office desktops the same as Unix WS did
because most users couldn't care less for OS power if it costs so much HW
since then it has been repositioned as a server OS
but only usable as Netware or Lan Manager file/print server replacement
has yet another file system, NTFS
is HPFS with user accounts, file permissions and filenames in Unicode
also file versions as in VMS, but where are they to be accessed
Macintosh
[Byte] 92-10p182 System 7
original MFS filesystem was non hierarchial, only one directory
folders were simulated with fields in directory entries, similar to ZCPR
when HDs appeared MFS became too slow, replaced by HFS, with real subdirs
files have 2 forks for data and resources
problems with file transfer SW, must multiplex the 2 forks for extraction
better DOS/Windows/Unix single stream data files (no resource fork)
resources stored in specially formated files (no data fork)
file types 4 char stamp from producing program, used for activat on dblclick
problems with needing special tools to modify stamp, to trick system
problems with file servers based on other OSes and with file transfer
Databases
first complex directories with multiple record formated files
desire for program independent data formats
no absolute byte positions in records coded in software
file structures (metadata) defined in further files, file name problems
lead to file with complex internal structures, one file is a DB
for speed one complex file alone on a disk with no file system in between
or even scatter tables over multiple disks, table scatter vs use of RAID
library of routines for accessing the database, is database managment system
types of DBMSes flat, hierarchic, network, relational (RDBMS)
no allow restoring a DB after a crash while updating use journalling
first in DBs, later in also file systems, exa IBM AIX [Garfinkel2] p267
relational database managment systems (RDBMSes)
[Byte] 89-9p247 brave new world, RDBMSes and SQL, [Byte] 89-10ISEp175 SQL
[Byte] 90-12p321 RDBMS real story, [Byte] 93-6p109 SQL many flavours
[ct] 93-9p192 datenbase design, [ct] 97-5p276 data modeling
[ct] 2001-1p174 databese indexes
[iX] 93-12p136 SQL-92, [iX] 94-3p50 SQL3
relational integrity
crutial for relational theory but originally not existant in System-R
anec delete customer record while still an unpaid bill in system
"what do you do when user wants to del", "refuse, ask for payment plan"
for reading data from RDBs by programs SELECT and cursors, problems
lang dependant EXEC SQL precompiler + library linked into or as DLL
better would be Multics-like file handle=open(select clause), read(handle)
but mainfraimes in time SQL was invented had no such thinking
resulting complicated methods are still in todays c-s DBs
use SQL as access language, semantics problem with NULL and 3-valued logic
NULL is usually thought of as "not applicable"
but what with "don't know" or even with "don't know if applicable"
there is no provision for unreliable data in the SQL model
also problems with data changing in time, no historical view, no versions
anec some surprised seeing RDBMSes in batch systems, but they are this old
System-R and Sequel were in 1969, Ingres in 1974 [Salus] p138
unstructured text databases, searching file contents
[Byte] 91-6p317 key indexing, [Byte] 92-6p271 search and retrieval
[Byte] 93-9p95 documents, electronic publish, indexing, finding
[Byte] 95-5p40IS7 DELTA/POISON, [Byte] 95-5p62 OPAC British Library Cat Onlin
[ct] 96-8p160 text search, retrieval systems, [ct] 97-4p386 fuzzy search
exa NeXT Digital Librarian, indexes all text files in a directory
searches sets of directories, called library files
then displays the files in edit with the right position selected
anec but Digital Webster and Shakespeare use own searchers/browsers
exa Glimpse, similiar system, but portable [iX] 96-5p166
relational doesn't fit good to complex real world data, too restrictive
exa Kompal trouble, proj-calculat-mechanism fixed hierarchy from relations
foreign keys with variable target would have been needed
stories, relevant info to users more than what fits into database fields
also humans are good at digesting data out of stories [Norman2] p128
this solves knowledge aquisition bottleneck that killed AI decision systems
use computers for storing and finding data, humans for evaluating it
tools should support, not supplant, human understanding
Partitions
split a disk into multiple subdisks, virtual disks
may be used for multiple file system types on one disk drive
or multiple same type file systems
to circumvent single file system size limit
to implement a simple form of allocation restriction
to allow more flexible moving and backing up of data
or for a file system and swap/page space on same disk drive
also multiple partitions on different disks may be combined as one, striping
this may require the partitions to have the same size or even geometry
Unix
early Unixes ran on cheap one disk machines, but required swapping, partition
could not swap to the file system because overhead when writing big jobs
but problems because of overlapping scheme for partition names
[Frisch] p49 and p246, [Garfinkel2] p229 VAX crash, data loss
because of this NeXT advises to not use them, disks delivered with 1 partit
for swapping/paging the NeXT uses a file to avoid need for partition
IBM PC
[ct] 97-5p188 PC HD partitions, [ct] 2001-16p172 20 years IBM PC history
was introduced by IBM and Microsoft to allow multiple OSes on one disk
unpartitoned harddisks are not possible, waste as most users only one OS
requiring those few with mult OSes to have mult HDs would not been so bad
on the other side partitioned floppies are also not possible either
partitions are not known to the PCs BIOS
fdisk is not in ROM BIOS setup, requires a new utility for it in every OS
at least one system must be bootable to use this, requires floppy boot
they are purely an OS convention for disk sharing
in MS-DOS this is done by the HD driver in io.sys
because not in PC BIOS no BIOS interface to access them, only raw disk
on the other side MS-DOS only sees partitions, gives them drive nr/letter
this is why unpartitioned SCSI/LPT/PCMCIA disks are invisible to MS-DOS
fdisk uses PC BIOS. if a drive has no own BIOS it is invisib, fdisk fails
only when SCSI BIOS hooks int13 can MS-DOS fdisk see SCSI disks
LPT and PCMCIA never have BIOS ROMS, allways invisibl, need own fdisk
partitions use a table in the first disk sector to hold information
this is called the master boot record, not partit sector for some reason
original PC partitioning system is limited to 4 partitions per HD
extended with subpartition instead of increasing number [ct] 88-10p156
because partition records and MBR in same sector and compatibility
better would have been MBR in first, large table in second
space is not the problem, as usually an entire track is used up anyway
partition records allow sectors as unit but old fdisk only uses tracks
new fdisk is worse, it uses percentages of disk, no control
anec same all in one approach is also used for MS-DOS file system
Xenix (the intended second OS) has split bootblock/superblock, ignored
partition table contains a partition type byte, must be given centrally
is actually superflouos, floppies have no equivalent, autodetect file sys
anec Linux doesn't bother to look at partition type, looks at part contents
effect of PC partitions on HD formatting, low vs high level
partitioning by BIOS would require fdisk before format
BIOS would have to format track 1, all OSes then format their partition
each OS would then format its partitions tracks, like formating floppy
but IBM and Microsoft decided first full low level, then fdisk, then high
no function for low level format in BIOS, only HD c800:5/6 entry point
also none in MS-DOS io.sys drivers
devices with own device= driver require own low level format progr
exa Trantor parallel port MiniSCSI adapter
anec format /q which only does high level format will not run on them
because it first tests for BIOS vs device= driver before checking /q
as MS-DOS has no del \*.* /s this means that full delete lot of work
or requires other delete program, deltree, nc, or even nu
MS-DOS format for floppies goes to BIOS format track command
but on HD does no low level, like on floppy when format /q
Job Control Languages, Command Line Interpreters, Shells
exa Whirlwind director tapes [Ross2] p56 and p67
exa IBM 360 JCL, originally for FMS Fortran job ctrl cards [Tanenbaum] p7
has a very bad reputation [Plauger2] p153 make talismans, [Raymond] "JCL"
exa RSX-11 and VMS DCL
exa CP/M CCP (console command processor)
simple CLI with few commands (DIR, DEL, PIP, STAT, LINK)
loaded at top top of memory direct under BIOS and BDOS
space for user programs between bottom of memory and CCP
anec memory structure simple, TRS text editor with * refinds text from crash
exa MS-DOS command.com
has built in commands like DCL, but limited, external utilities, 2 commands
exa copy->xcopy, del->deltree
syntax does not allow passing any filename, conflicts between "" and \
replacable with shell= command in config.sys but no replacement offered
even the Windows win.com can not be called from shell=
uses 8088 segment system
loads after intvect, msdos.sys, io.sys and drivers, but before user progr
consists of a small resident part, and a large overwritable part with CRC
space for user programs after command.com resident part
for selecting whether output goes to a puncher or a TTY
the same is also neccessary if multiple punchers or readers are available
user operated plugboards or switches in cabling system
or use input/output selection instructions for this
with parallel cable because multiple devices on cable no hand switch possible
therefore input/output selection instructions are required for this
the programs must select while running in/output from/to multiple devices
this requires device selection instructions in these programs
first device numbers were hardcoded into the IO instructions
then separate device select and IO instructions [Ross2] p67 si/rd
allows device dependant selection routines
actual read and process data routines are then device independant
or IO instructions with variable device number in a register or in memory
to generate multiple outputs from one progr (compiler obj+list) multiple punch
to process multiple inputs with one progr (linker mult obj) multiple readers
to set source and target devices for program use job control cards
exa Fortran read 5, write 6 (actually these were magtape drive numbers)
analog Unix shells set stdin/out (handles 0/1) to devices/files/pipes
the programs simply use read and write with standard device handle
before files on disks the computer did computations
the operator/user organised tapes/cards
now files on disk must be organised by the computer
for this file manipulat tools, great variety of file maintenance programs
JCLs took over this job, became CLIs, later shells
as data on disk is held in named files
programs can't rely on hand switching of input/output for data selection
use control cards with filenames on them to select sources and targets
programs to be run are also in files, no pack of cards to start a program
instead program selection statements on control cards
for passing parameters (exa filenames) to user progr use standard data struct
exa CP/M
256 byte at bottom of memory, followed by TPA for user programs
first half entry points, system settings, FCBs, second command line tail
as result of this command lines are limited to 127 characters
exa MS-DOS
at begin of program segment 256 byte PSP, compatible with CP/M
also uses FCBs, but later in 2.0 replaced by Unix-like handle system
anec many system calls exist in duplicate, 1.0 CP/M-like, 2.0 Unix-like
because of this command lines are also limited to 127 characters
this gives big problems with long path statements
these are needed because no /bin directory convention like in Unix
anec install progr mutilate path by making it too long were common
exa Unix argv[] and env[]
in top of process memory, above stack
CLIs started with a file as parameter executes commands from it instead of keyb
exa Whirlwind director tapes as command scripts [Ross2] p67
later for program control mnemonic language and keyboard [Ross2] p91
exa CP/M submit , MS-DOS command , Unix sh
exa MS-DOS limited script lang for .bat files, exa for long time no call cmd
these files known as batch files or shell scripts, are standard ASCII texts
then variables, variable substitution and flow control commands were added
making shell scripts into full programming languages
commands from keyb vs file both handled by same program
or a common core with 2 diff interfaces, keyb w history, file w flow ctrl
in Unix #!/bin/ allows automatic starting of right shell for file
in MS-DOS if no program .com/exe but .bat this is executed
at startup run an fixed script to allow automatic setup of the system
exa MS-DOS autoexec.bat, VMS startup, Unix /etc/rc* /etc/profile
also for multiuser allow an personal script
exa VMS login.com, Unix .profile or .login or .cshrc
but /etc/profile done by the shell limits to sh compatible shells
better would be /etc/session like in X, has own shell, then start users
anec in MS-DOS file first tries exec file.com, then file.exe, then file.bat
this is because in 1.0 only file.com, for file.bat use command file
this comes all the way from CP/M submit file.sub, even execution method
anec command.com doesn't know directories, if file.bat in new dir crash
Unix shells expand wildcards (globs) before passing parameters to programs
instead of letting the called programs or even the file system expand them
files with - in name are expanded as commands to rm, file -r nukes subdirs
exa deleting a file called -r with MS-DOS-like rm * has this effect
with rm * no questions are possible, severe lossage can result [Garfinkel2]
makes deleting a file called -file difficult, as read as invalid options
wildcard can't be used as rm *file as glob eliminates it [Garfinkel2] p29
must use rm - -file (- convention only in some commands) or rm ./-file
filenames with spaces requires "file name", leads to no glob expansion
makes passing group of files with * in name impossible
so that rm can kill a file with untypeable chars in name
exa NeXT file "95 04 Linux ...^", disappeared, rediscovered when tar-ing
ls -l made ^ to ?, rm * complained about no file, name ending in C
different letters come from tools different ways of mutilating 8 bit
rsh/ssh remote filename arguments unglobbed by tcsh, failles, needs ""
grep * doesn't show filename before lines when only 1 file fits *
user must grep both * and /dev/nul to misslead, more work, chance of forget
of course greps no-of-files dependant behaviour is bad, why not use switch
it is impossible to have * or ? as part of command switch syntax
exa MS-DOS like /? option for standardised help system
exa dc can not take an expression with * in it from the command line
needs echo "expression" | dc, this is a lot of typing
also inflexible for input and output file specificating
no source/target destinction possible, information lossed
prevents making of extensions for systematic file name edits
like regexp search and replaces in a table in an editor
exa mv no multifile renaming like with MS-DOS REN command
dangerous, exa ex MS-DOS users overwrite files [Garfinkel2] p190
ls u* lists all files beginning with u and contents of all dirs beg w u
can not like MS-DOS list only those with u, for dir content explicit name
tar can not find directory of files when * is used
tar clvf * fails the l option, need to use tar clvf / so /mnt not entered
glob expansion is the most losing feature of entire Unix
GNU could improve its tools, use first with "x?x*", then use noglob in bash
GNU intension to improve Unix, this would be a good case of doing so
it is shell that does expansion, not kernal as claimed in [Garfinkel2] p25
so it is mendable by altering shells and tools, GNU could do it
anec this feature was a deliberate design decision [Garfinkel2] p190
to save reloading, because Unix had no shared libs, put it into the shell
this is loaded permanently by sticky bit, no reloading with every program
today glob expansion in a shared library would be paged in, fast
but despite this no operations like ls -a or time in glob expander
these should have been done once for all, modular programming
anec name glob from global, name of original program that did the expansion
where the name global came from is not even known to its author [Salus] p26
Asynchronous Input and Output
[Byte] 83-5p452 2 proc vs IRQ vs DMA, [Byte] 92-1p249 PC interrupts
tape/card readers use synchronous input
reader stops as soon as program is not inputing
program stops if no data from input device is ready
tape/card punchers and ttys/printers also are synchronous
puncher and tty/prt stop if program is not outputting
program stops if puncher or tty/prt is still printing
the slower of the two devices dictates the running speed
to speed up pipelining, but the hardware for storing/managing data is costly
better use a queue structure in main memory, SW pipelining
program outputs data to a queue and then continues working
a second program extracts data from queue, writes it to tape or prints it
this is known as SPOOLing the data [Tanenbaum] p9
Simultaneous Peripheral Operation On Line, off line was tape->print CPU
even do this while next program is running, requires monitor system, exa FMS
having 2 programs running on a processor requires switching it between them
switching by software
requires main program regularily calling spooling program, known as polling
spooling routine as subroutine call
structurally most simplest system, for programs with one or few short loops
exa games (exa Dragon Friss), BMS lift controller
spooling routine as state machine
exa CRLF program detection of line ends
exa Soft64 1541 flo_*() routines
exa TCP state diagram and processing [Krol]
every routine has a state represented by the routines static variables
it has procedures that depend on and operate on these variables
on call from external code, state based decision which routine to use
for a routine to be a state machine it must have an exact list of states
for this reason are also known as finite state automatons [Libes2] p139
this is comparable in use with sequencial logic blocks in hardware design
these have state (filp-flops), and procedures (combinational logic)
the different states are implemented as different places in the progr code
a major state variable is used to select code fitting for the state
in all HLLs state machines are implemented loop+var+case or even gotos
as they have no language structurs to express state machines
spooling routine as coroutine
processors have state (memory+regs) and procedures, are state machines
most effective implementation of a state machine is as complete program
that fetches an input and then acts depending on state, updates state
the instr pointer becomes the state variable, state changes with jumps
this requires for each state an wait for input instr or subroutine call
it also requires for each routine a separate instr ptr and register set
calling an other (co-)routine becomes switching the register sets
no caller/callee relationship between the coroutines like with subroutines
because all coroutines equal, they can't use a stack for switching state
make routine to which all coroutines have master/slave relation, switcher
this switcher saves the context (proc state) of the running coroutine
it then restores the context of next to run coroutine
exa polyForth PAUSE word scans coroutine list [Byte] 85-3p363
later control goes to 3rd, ..., nth, 1st coroutine, round robin polling
the entire processing of other coroutines appears as a pause
this requires all coroutines to only use the processor for short time
for coroutine switching some CPUs have special instructions
exa VAX state save and restore instructions [Leffler]
exa 80286+ full coroutine switch by far jump to TSS segment [Dewar]
far call with save on stack allows IRQ handling as coroutine switch
all coroutine states are held in a switcher internal data structure
to run additional coroutine create its "saved" state for restoring
build a new state from scratch vs copy an existing state (fork)
to terminate coroutine switch to next one and delete first ones struct
switching by hardware, interrupts
polling can be a lot of work to guarantee regular enough calling
from every delay loop, but also from every other action taking enough time
a single endless loop in any routine without calling crashes all coroutines
alternative is to have external hardware in the IO device do the polling
when the device becomes ready to be accessed it sends a signal to the proc
the processor interrupts the execution of the current program
and calls a routine that handles device, called interrupt service routine
the instr pointer is saved and replaced on interrupt and later restored
this requires a mechanism for providing new IP content, exa vector table
old IP save and restore like w subroutine, use same save/restore stack
interrupt service routines keep getting exited and restarted from beginning
they unlike normal program have no stack frame to store their state on
they must store all their state in static variables, are state machines
they can be simplified by writing them as coroutines, with own stack
while initialising device handling routines create an ISR coroutine
when ISR coroutine init finished, wait for its IO device,
deshedule it, switch to main program (original coroutine)
when ever the desired interrupt arrives switch to the IO coroutine
handle the device and then reshedule the main program
speciality in driver technique in [ct] 90-4p370 is a coroutine switch
as a simple coroutine switcher fits in few kBytes this is unacceptable
anec the Transputer implements ISRs as coroutines, blocked until IRQ
possible because full coroutine mechanism in microcode [ct] 87-10p180
the total lack of coroutines in MS-DOS drivers is a serious missfeature
exa COM driver, it is not possible to sleep a coroutine calling it
result mouse driver must use own COM driver or timer IRQ driven calls
because of this Windows and PC Unixes need own drivers for everything
actually use of no coroutines in MS-DOS comes from the IBM PC BIOS
interrupts give timing problems for the main program
interrupts disturb timing loops
avoid timing by counting loops, wait for a HW timer instead
else switch off interrupts while in time critical sections
anec Juerg 8032 scan progr irregular line begin until I suggested IRQ off
with too longer IRQ lockouts form main program or other ISRs
dropped interrupts, data overrun in devices, data lossed
fast IRQ reenable, reduce time for processing the ISRs
split non time critical parts of ISRs off as separate coroutines
[Leffler] BSD SWI, [Beck] Linux bottom halfs
the ISR only does the minimal work needed to save data from device
when ISR returns to normal processing insert non time critical part
anec VAX sheduling on async system trap (AST), exa used in RDB BLAST
exa ticker timer only increments a counter
later system clock update, nice value calculation for sheduling
anec Unix ticker runs actual system clock, HW clock only for setting
[iX] 94-10p154 setting system clock from DCF77 reciever
same MS-DOS clock$, also only uses HW clock for setting at boot
for time then internal SW time is incremented by ticker interrupt
timezones http://wwwcrays.anu.edu.au/reference/world.timezones.html
from [Gundavaram] p102, used to convert seconds to time
[ct] 96-4p384 time zones
exa keyboard interrupt handler only queues the key pressed
later test Ctrl-C/U to send interrupt/kill signal when next execution
note that Ctrl-D is handled by user programs when reading input
use separate IRQ levels for different devices, disable only lower ones
higher priorized interrupts can interrupt lower priority ones
exa VAX SPL [Leffler] SPL, [Raymond] "spl", exa 68k IPL [Dewar]
or even only lock out only the interrupt source being serviced
exa 8259 interrupt controller (PIC) in IBM PC
either hierarchial priority like above or round robin sheduling
saving/loading/restoring can be slow, interrupts can have bad response time
CISC proc are especially bad at this, because large state save onto stack
exa Motorola 68020 92 bytes on bus fault [Raymond] "stack puke"
anec slow interrupts of 16 bit sys lead to making of ARM RISC processor
this imposes a large processor load on IO, mix interrupts and polling
exa Xenix disk driver IRQ when first byte arrives after seek/rotat
but then fetch all following bytes by a polling loop
less processor power used, but response time for other IRQs is lousy
[Byte] 89-5p261 Xenix IO drivers IRQ vs polling timing
the ISR vector mechanism can be used for routines to handle processor errors
exa division by zero, memory access errors, even user defined errors
such device-less interrupts are called traps, together called exeptions
traps are not from devices so there is no ISR to handle them
they are from user program, delivered to the faulty program as signals
to registered signal handler, if ignored (no hand) default action abort
Unix delivers signals by adding an "return" address to the signal handler
to the user programs stack before returning from the trap, to signal
unfortunately Unix signals are only used for processor traps
and not also for reporting OS errors while calls to system routines
exa file can't open, IO/disk read/write error, disk full, out of memory
this would allow generic error signal handlers, structured error handling
[Byte] 91-8p259 exeption handling in C programs
[Byte] 93-5p229, NT exceptions, [Byte] 93-11p317 NT struct error handli
exa Fortran read/write with err=, ADA exceptions
exa Lisp exception handling [Garfinkel2] p195 exeptional conditions
exa even MS-DOS file system errors call INT24
if not hooked this presents the famous Ignore/Retry/Abort/Fail
instead of testing error return values after system calls
which gives code bloat, bad performance, obscures code, bad legibility
or is more likely it is not done because of lasyness, uncaught bugs
do a callback to user program (or library), less conditionals
use of tested() in Kompal table_* and db_* modules, easy but unknown
reduces work for handling OS error return codes, increases legibility
but it can not prevent the code bloat and bad performance
Unix signals can at least be used as an alternative to waiting for input
[Leffler] p176, p180 and p442 4.3 BSD SIGIO mode for input
also terminal resize signal from XTerm to program on its ttyp, SIGSIZ
anec [Garfinkel2] p150 other OSes catch inval mem referen, go to debugger
but Unix also, allows programs to catch signals, but most don't do this
claim that this is the reason for no shell code expansions is wrong
real reason is memory allocation with static linked library, collisions
routine switching causes race condition problems
[Tanenbaum] p33, [Byte] 92-8p279 and [Byte] 92-9p297 shared resource access
buffer modif by ISRs while being modif by user progr can damage pointers
problematic are variables that get altered by both programs
result is destroyed data structs, lost data, progr malfunction, crash
the same any multiple coroutines modifying same data structure
coroutine switch at wrong time would give a system crash [Salus] p157
these access routines are called critical sections [Tanenbaum] p34
this is a principial problem of HW-switched asynchrounous routines
SW-switched routines are only switched if the routines wants to
this is never done in a critical section
avoid such variables by using proper algorithms, systemat [Tanenbaum] p35
but this is difficult to program, not always possible
better prevent the HW from switching coroutine while in critical section
block interrupts with a control bit/flag, by IRQ disable/enable instr
but blocking IRQs while queue access between non-IRQ coroutines
would unneccessary break response, increase interrupt timing problems
set a guard variable [Comer2] is SW equivalent of IRQ control flag
if already set a second coroutine sleeps until first resets it
this exclusively prevents alteration of that one queue, not all
guard vars with automatic wake up, called semaphores [Tanenbaum] p41
using Unix named pipes as semaphores in shell scripts [iX] 94-2p162
because of possible IRQ between read and set of guard variable
block IRQs between these two instr with DI/EI, requires an OS call
or undividable TAS/TSL instr [Tanenbaum] p38
or timed IRQ unlock (80860) [Dewar] p348
anec debugging ISR is difficult because asynch, no printf() [Byte] 93-3p187
multiple routines waiting for same set of guard vars can give a deadlock
[Raymond] "deadlock", [Tanenbaum] p56 dining phil, [Tanenbaum] p240 deadl
[ct] 90-12p244 dining philosophers problem
avoid with systematic rules for aquiring, free all on failing [Leffler]
pipeline buffers in IO devices
the IRQ and then polling technique reduces the processor load of IO
but if the first slow IRQ loses its data through overrun then all is lost
make IO device with buffer, small block of dual access RAM, organised as FIFO
this is simply a form of pipelining as in TTY or card reader IO devices
but cheaper than pure pipelining, as small size, not entire data
exa 16550 UART 16 bytes buffer [ct] 92-2p170, not in old 16540 UART
on every IRQ read as much data as possible, automatic IRQ+polling
also improved int14 interface Fossil [ct] 95-8p246
exa newer PC FD and HD controllers buffer entire block
direct memory access (DMA)
often the job of an ISR is only moving blocks of bytes from the device
instead of device potting data into an register or buffer, direct to memory
for this a simplified data transfer processor is sufficient, a DMA unit
programmed with first addr and limit (remaining data length or last addr)
real processors allow more flexible devices, using multi register access
DMA controllers on the motherboard are an Intel microprocessor speciality
other systems use address generators on the IO devices card
the 8237 DMA controller appeared with the 8080
driven by devices IRQ line, the transf data from IO addr to mem addr
this requires IO devices that deliver/accept data as a stream of bytes
later also used with 80x86 on PC motherboard, exa FD and HD controllers
also the Zilog Z80 (8080 clones) had a DMA ctrl, never really worked
anec NeXT uses a 9 channel DMA controller, its "mainframe" architecture
with 68040-25 and DMA faster file access than Sun w Sparc and polling
results in multiple devices wanting to access memory, ev at the same time
to prevent 2 addresses on bus, confused memory, bus arbitration/reservation
all accessing raise arbitration line, highest prio wins access
exa AT/ISA bus, main proc and one IO proc, bus master, used by AHA-154x
exa MCA/EISA/PCI, multiple IO proc, one on each card, used by AHA-2[79]4x
use DMA for data transfer, IRQ then only for reporting the finished transfer
no processor polling time loss, IO data transfer at full memory/bus speed
anec polling together with the AT bus is reason why IDE disks are slow
but DMA still slows down the main processor, use own RAM on IO devices card
memory mapped IO, no polling, highest throughput, exa PC video cards
dual access RAM is simple to implement (only 2 devices unlike full DMA)
cheap (no ev unused DMA controller), flexible (only if interface needs)
high performance (for each interface an own RAM, parallel access)
for fast transfer from buffer RAM to main memory block copy instr
exa Z80 DJNZ, Z80 LD[DI]{R}, 80x86 REP, 68010 detect MOV/DJNZ pair
DMA only really pays in multitasking systems
AHA-2940 with NT or Linux enormous speed up, not Windows 95 [PCW] 96-2p338
separate IO processors
with interrupts one processor with multiple programs
proc is used mainly for the main progr, but occasinally borrow by IO progrs
with DMA this IO program load is reduced to set up and termination
but IO is limited to streams of bytes, more complex devices need proc
alternative is to use one full processor for each IO devices coroutine
exa mainframe channel processors [Salus] p148 IBM 360 chan proc separ progr
exa Commodore 1541 floppy with own 6502 in drive, CBM 8050 even second 6504
exa PC Adaptec AHA-154x actually has an own 8085 with its own RAM/ROM
exa I2O for PCs [Byte] 97-5p51, [Byte] 97-8p85
[Byte] 98-2p40IS11 I2O, NT supposed to be beating Unix
[Byte] 98-4p47 I2O IxWorks OS from Wind River, from their VxWorks
[ct] 97-5p32, [iX] 96-12p126, [Uo] 96-10p50
multi-sequence processors
with one IO processor per device the IO processor is idling most of the time
today with microproc aceptable, but before this was an expensive use of HW
instead of multiple processors single processor w single instr decoder/ALU
but with multiple instruction pointers and register sets
for each coroutine only IP vs IP and part reg vs IP and all reg private
one set for work (main) coroutine, and one each for each IO coroutine
IO coroutines block on routine switch and get unblocked by ready device
a priority mechanism selects which coroutine is running
this saves the slow register saving and reloading relative to interrupts
this is called multi-sequence programming, used in TX-2 [Clark] p355
later also used in Alto microcode processor [Thacker] p273
HW 16 coroutines with 8 reg sets, 16*3 bit reg for linking them
sheduling only on sequence, by signals from periphery cards
with todays microprocessor technology (non extensible chips) difficult to do
on the other hand IO processors are cheap, this technology has vanished
IO speed vs processor speed
[Raymond] "lots of MIPS but no I/O" RS/6000
[Byte] 96-5p173 Amdahls Law 1 MBps IO per MIPS proc
[ct] 96-12p132, [ct] 98-26p80 Amdahls law
IO speed far more important than proc speed for todays machines system speed
exa disk access, video output, leads to wait states, is a bottleneck
Intel claims that fast processors are specially good for servers
but servers usually are IO (disk and net) dominated
need strong IO, separate channel procs, intelligent DMA as on AHA-154x
channel procs with own IO programs, shared memory for synchronisation
this is because it is IO volume that counts in transaction processing
processor power of typical 1990 mainframe is ca Pentium, not more
colleague claims his AS 400 minicomp power is even only roughly a 286
386DX16 memory has 8*32MBit/s vs SCSI 4/10*8MBit/s and Ethernet 10MBit/s
even 386 enough power, lots of RAM and fast IO devices count
faster processors only needed for databse servers, even there IO limits
even mainframes have low MIPS proc, as they only order and synchronise
anec claims PC today has same "power" of mainframe 10 years ago
are simply wrong, PC has same processor power, but mot memory and IO
Intel also claims that fast processors make complex IO circuits superfluous
but only when proc access to IO devices fast, fast bus, such as VLB or PCI
also requires 1 access transfers, no polling, RAM on card, is DMA
exa PC video cards, DEPCA/Etherworks Ethernet
a Pentium with AT compat IO is like putting a Ferrari motor into a VW Bug
anec this is analog to HI-FI super amp with bad speakers gives no advantage
this comparison is really near on target as the reason is the same
good processors/amplifiers cheap, good IO devices/speakers expensive
Buses and Slots
[Byte] 89-9p296 S-100, AppleII, PC, AT/ISA, NuBus, MCA, [Elektroniker] 89-6p59
exa PDP 8 bus, Altair/S-100/IEEE 696 bus, Apple II slot, MPF-II 40 pin Z80 bus
exa Kontron ECB bus [ctk] 87-1p167 Z80 Bus used in Europe vs S-100 in US
exa PC/XT/AT bus [ctk] 91-11p336 and 91-12p313 AT-Bus, [mc] 87-2p30
exa VME bus [ctk] 89-4p269 VME, Sun S-Bus [Byte] 92-5p283
exa NuBus MIT Lisp WS, LMI WS, later TI WS, Macintosh II and NeXTcube
with only 20mA serial lines a bank of ports was enough IO devices
same also with multidevice cables one or a few ports sufficed
with magtapes and disk controllers more and more IO device types appear
with user input/output and laboratory control it becomes even worse
users want diff combinations, connection flexibility becomes neccessary
IBM PC with many flexible components vs Macintosh with few fixed configurat
PC won because of human individualness, counts more than efficiency
despite all the efficiency and return-on-investmant talk from managers
anec cars, from "any colour if black" via model palette to flexible config
a bus is a set of data, address, control, IRQ, DMA and power supply lines
on these lines plugs and mech fixtures (slots) are placed at regular interval
cards with the desired input or output circuits are plugged into the slots
slots be can built into the main electonics board, exa Apple II, IBM PC
extreme case is main board with one external slot, exa C64 expansion port
or processor on a card and slots on passive backplane, exa PDP 8, S-100
backplanes are service friendlier for processor board swaps
for accessing devices by software
first different forms of IO instructions, then unified
requires IO addressing based on devicetype+actualdevice
anec this unification later also in Unix with driver conventions
IO instr and addresses (PDP 8 [DEC1] p3-10 IOT instr, 8080 IN and OUT)
vs memory addresses (PDP 11, Alto) w input load instr and output store instr
these addresses must be uniquely choosen for each device
by DIP switches, jumpers or EEPROMs on cards, exa PDP 8, IBM PC
must be yet unused ones, else address clash, leads to IO device crash
base of PC expans horror, suffic for techies/labs, not normal office users
Apple II
geographic addresing, every card has reserved address [Byte] 84-12pA71
better for non techies as no setting of addresses, it simply works
also cheaper to implement, 1 chip on motherboard instead of 3 per IO card
this system was expanded on Macintosh NuBus, base of its plug and play
XT and AT (ISA) bus
[ctk] 91-11p336 and 91-12p313 AT-Bus, has spec IEEE P996, [mc] 87-2p30
also PC104 AT/ISA bus on 2 2.54mm pin connectors
is the center part of the IBM PC, the most widely spread computer
[Byte] 82-1p78 Ciarcia MPX-16
[ct] 88-3p90 PC and proc, 88-4p196 timer, 88-5p204 UART, 88-6p166 LPT
88-7p164 system control PIO, 88-8p174 IRQ/PIC, 88-9p178 DMA
88-10p212 video 88-12p196 clock/cmos]
[ct] 96-7p110 modern Pentium PCs
[ct] 97-1p288 ATX motherboard format, vs XT, AT, BAT, LPX, NPX
[ct] 98-6p170 PC99 specification, [ct] 98-23p244 WTX large aired case
[ct] 2002-19p188 SMP APIC in single processor systems
designed as small series of machines (ca 250'000)
[Byte] 90-9p414 PC creation, [Byte] 91-8p336 IBM PC long way, beginnings
with a disk based DOS, glass TTY and CLI
for use by engineers and lab personal, no userfriendliness required
requires and allows low development costs and simple system structure
became most wide spread computer model because of
accidental timing of appear, micro revolution, no other dominant 16 bit
IBM name, unknowing business users, you don't get fired for buying IBM
anec despite the PC being designed as a laboratory device
it was made by the Entry Systems division [Byte] 91-8p336 Stop Bit
it was an open design, everyone could copy and expand it
even circuit schematics and BIOS listing included in [Raymond] "TechRef"
this way due to design by a hackish group around Bill Estridge
standard interfaces, many components, flood of configurations
this encouraged lots of clones, widened market, made it the standard
many people never bought IBM, but buying clones expanded IBM SW market
this also made the originals more interesting to those who buy IBM
case of sharing being good (better much of big market, than all of small)
IBM still sold more PCs than any of the cloners until about 1990
IBM originals today perhaps 20..25% of systems, most are Taiwan&Clonix
but IBM still sells more than entire Macintosh market volume
note that only the IBM hardware is open, not the Microsoft software on it
despite Bill Gates claim that DOS, not Unix, is real open software
but is not modifiable, no source available for it, no public developm
Microsoft defin of open is WOSA, everyone use Windows, then no problems
vs real meaning, systems based on public access/extendable standards
the PC is a typical example of problems of "as good as necessary" designs
in time requires more and more patches, gets complicated and unreliable
anec "god had only 7 days for world because he had no installed base"
it has cost the world billions of dollars in wasted time
[PCW] 95-4p321 non consumer ready ad hoc mess
IBM engineer see this often, call it broken as designed [Raymond] "BAD"
what supprises me is not that it fails so often, but that it ever works
is tribute to designers that they have come so far despite obstacles
anec "any comp designer can make a better system while sleeping in bath"
20 bit memory addresses limited by 8088 to 1MByte
00000-9FFFF for system RAM (the famous 640k limit)
A0000-BFFFF for memory mapped frame buffers of video cards
C0000-FFFFF for BIOS ROMs (boot, disk controller, SCSI, Ether), Basic ROM
missused for memory mapped IO (DEPCA Ether), expanded memory (EMS/EEMS)
and highloading drivers, this results in the big mess with emm386.sys
24 bit extended memory addresses (only on AT bus, with 286+)
100000-10FFEF additional 64k-16 bytes accessable in real mode, known as HMA
because S+O FFFF0+FFFF gives 10FFEF is greater than 0FFFFF
on 8086/88 or XT bus this would give 0FFEF because addresses wrap round
on the AT keyboard BIOS A20 gate is used to emulate this behaviour
[Byte] 92-8p293 exorcising poltergeist, [Byte] 93-1p104 Pournelle
anec 486 board changed because himem.sys autodetect of A20 mode failed
under MS-DOS the HMA is managed by himem.sys
HMA is used for the dos=high command of MS-DOS 5.0 and above
only one progr in HMA possible, dos=high only utilises ca 35k of it
thats why 5.0 and DeskView on 286 better no dos=high, put DV up there
anec himem.sys was originally introduced for Windows
together with EMS and XMS it lead to Windows being a mode museum
100000-FFFFFF, known as extended memory (XMS)
requires SW that will run in protected mode
for MS-DOS progr to access XMS switch to prot mode and back to real mode
for programs in XMS to access MS-DOS use a DOS extender
will copy data to temp buffer in bottom 1 MByte, switch, call MS-DOS
on 286 the protected mode flag can't be reset by programs
Intel thought nobody using 286 would ever want to return to real mode
only official way to reset processor is with a short reboot
first the keyboard BIOS (same as for A20) was used to reset 286
later missuse of tripple fault halt pin [Byte] 86-10IIPp136
which IBMs AT motherboard designers had wired to reset pin
usually done by setting length of a segment to 0 and reloading GDT
even later undocumented instruction loadall used, no reset any more
exa MS-DOS Ramdrive, Smartdrv [ct] 90-11p362, OS/2 DOS box
but loadall only on 286, emulator only in some 386 BIOSes, crash
anec in MS-DOS hole filled with zeroes at address for loadall
on 386es Intel corrected this, the protected mode flag can be cleared
to completely avoid mode switching for extended memory access
switch once into protected mode and then immediately back to real
with size field in selector cache of FS set false, 4 GByte segment
this works on the 386 according to [ct], 486+ I don't know
this is undocumented behaviour, but was a neat hack in MS-DOS days
max 16 MByte memory is possible, even on a 386DX or above
for addressing more you would need a 32 bit address bus
anec Videoblaster wants 2MByte, only 12MByte left
IO addrs XT 0000-03FF (10 bit restrict), AT XT+0400-05FF,0800-09FF,0C00-0FFF
problem with 16 bit IO addr, exa S3 video and 10 bit decoding COM4 cards
AT extensions limit adapters to ATs, therefore not used often
geographic address would have increased IO addresses pro card
and avoided all the IO address setup problems, same for IRQ setup
would have also allowd boot disk selection by card positioning on bus
IRQ lines XT 8, AT 15 (2*8-1 cascade) of which many are in fixed use
every device must have its own IRQ line, no sharing
because interrupt controller programmed on edge trigger, not level trigg
anec under DOS 2 devices can share and interrupt line
if neither issues an interrupts before other has released int controller
and the second loaded ISR passes through IRQ when its HW not active
exa Pauls TI TM4000M OPL sound generator and PCMCIA controller both on 10
DMA channels XT 3 (1 of 4 is reserved for RAM refresh), AT 7 (2*4-1 cascade)
every device must have its own DREQ and DACK lines, no sharing
all address registers are only 16 bit, work only in 64k byte/word pages
need page switching registers to set page, no autoincrement of these
can only transfer data into bottom 16 MByte of 386+ address space
doesn't go through 386 PMMU, requires address mapping by drivers
DMA ctrl is faily slow (on AT02 3MHz*2Bytes), 286 equal fast, 386 faster
bus master DMA XT none, AT 1
is very fast (full bus speed), exa [ct] 92-4p76 SCSI with busmaster
but requires many circuits (own address generator), result seldom used
no page register problems like DMA controllers
but still 80386+ MMU mapping problem, requires mapping SW, exa aspi4dos
only 1 card can use it at a time, if 2 want it collision
exa AHA-154x and PAS-16 sound card clash [Howto] "Sound"
therefore own dual access RAM on adapters with large data transfer rates
access via upper mem addrs like video, exa some Ethernets (DEPCA, EWRK3)
or via IO addrs like disks, exa other Ethernets (NE 1000/2000)
difficult to configure
for selecting mem, IO, IRQ, DMA it uses jumpers/DIPs or EEPROM on cards
requires lots of fiddling around with jumpers and config files
must be done for every individual PC
becomes even a worse problem, when docu lost, print docu onto the card
fixed addr for video adapters, disk drives get in way, user must know
no auto detect for zero/one/multiple devices of one type
result the bus is the most troublesome part of the PC, XT, AT hardware
anec 1/4 of all multimedia upgrades get sent back to manufacturers
on AT technically complicated because of XT backward compatibility
[Protech], [Byte] 87-9p115 POACH AT
for 8 bit IO cards address transformation, byte swapping
required 83 ICs on original AT board for this
lead to integrated chipsets [CTI], [ct] 92-6p118 chipsets
[Byte] 97-8p32IS6 mainboard developments
[ct] 95-10p332 Intel Triton und Neptun, [ct] 97-8p180 586 chipsets
[ct] 2001-6p326 chipset evolution
[ctk] 94-12p327 chipsets SiS
since 386 programmable, parameters in CMOS, start slow, load
load should only be done after Setup question, re-Setup after crash
anec in 1988 already full XT glue logic on one single 120 pin chip
anec on 680x0 bswap in processor since 68000, MOVEP instr [Byte] 93-5p346
slow transfer rate, 4M*2byte/s from AT03 8 MHz, but some run it faster
this lead to alternative faster PC buses
Micro Channel Architecture (MCA) and Extended Indust Std Arch (EISA)
[Byte] 89-9p296 bus tour S-100, AppleII, PC, AT/ISA, NuBus, MCA
[Byte] 89-11p417 PC, AT/ISA, EISA
[Byte] 92-3p136 sytem bus or system bottleneck, which Micro Channel?
are fast, but expensive (motherboard and plug-in card complexity)
best used for servers (multitasking), but failed on desktop
both allow multiple bus masters and periphery processors
got used, many EISA bus mastering cards appeared, SCSI and Ethernet
both have on card identification numbers of driver autodetecting
on MCA 16 bit manu+card given by IBM, on EISA 32 bit manu by comitee
anec MCA failed because IBM licensing [Raymond] "Classic C" with X = PC
EISA even has geographic addressing [Gilluve] p164
but EISA also despite this setup disk needed, when lossed HW is dead
VESA local bus (VLB)
[Byte] 92-10p122 VLB, PCI and QR
is a direct connection to the data/addr busses of an 486 processor
transfers data at 33..40M*4byte/s, inofficial also 50M
but this can make trouble, some cards fail at high speed
max 3 cards on 33MHz bus, max 2 on 40MHz, usually only 1 video card
only more memory and IO speed and width, no IRQ or DMA lines
if a card wants these use those on AT bus, exa disk/net controller
cheap to implement, successfull, became standard on 486es
Peripheral Component Interconnect (PCI)
[Byte] 92-10p122 VLB/PCI/QR, [Byte] 94-2p177, [PCW] 95-5p404
medium level between VLB and AT, buffered like AT, but near VLB perform
multiplexed addr+data, uses burst transfer, one transaction addr+n*data
indep of proc speed max 33M*4byte/s (in burst mode, else half of that)
will not speed up more like VLB, but no trouble with fast proc
with proc with extern more than 33MHz waitstates are needed
with 40 or 50MHz that gives a PCI speed of 20 or 25MHz, 66MHz are 33M
on the other side it is 80x86 independant, also AlphaPC, PowerMac
anec Alpha 21066 even has a full PCI controller on-chip
PCI has IRQs and also mult bus mastering, exa for disk/net controllers
PCI and VLB will work together on the same motherboard
exa J437 486 motherboard VLB primary bus, PCI and AT via bridge chips
PCI has card IDs for autodetecting, like MCA and EISA
base for plug and play, but it doesn't work, often called plug and pray
[Byte] 94-9p78, [Byte] 95-10p36, [Byte] 95-10p52 the new PC
[ct] 95-3p130 plug and play, BIOS calls, hardware realisation
[ct] 95-11p160 Win95 PnP ISA and PCI, [ct] 96-2p266 PCI BIOS
[ct] 97-2p114 PCI/PNP IRQ problems, [ct] 97-10p316 ISA PNP
[ct] 97-13p284 ISA plug and play
[ct] 2000-11p258 PCI interrupt sharing and allocation
[ct] 2001-8p254 PC BIOS DMI managemen, [ct] 2001-12p236 BIOS features
[PCW] 94-11p325
[PCMag] 95-4-11p95 out of box experience, work right first time
but it did not, was just marketing blabla, customers pissed off
PCI hot plugging and power managment [Byte] 97-7p23, [ct] 97-5p30
PCI and PowerPC gives PReP [iX] 94-4p170
Advanced Graphics P? (AGP)
[ct] 97-10p238 AGP
only for one card (graphics), only on Inter motherboards
System Managment Bus (SMB) [ct] 97-14p210
periphery buses, for connecting external devices
[Byte] 97-2p40IS11 in the line of fibre
[Byte] 97-3p89 USB vs Firewire vs Fibre Channel vs SSA vs SCSI
[ct] 97-2p284 Firewire, SSA, Fibre Channel
[ct] 98-13p222 optical cabling, [ct] 2000-19p238 optical printed circuits
[ct] 2001-15p134 USB 2.0 vs Firewire
IEEE 488 (IEC 625) [ctk] 87-9p187 IEC
on Commodore systems IEEE 488 bus is used like a LAN with a single client
file system code is on separate processor in the disk drive, file server
anec for copy two friends with each one disk drive and fast copy prog
switch one on, set address to 9, then sw second on (default addr 8)
printer is a print server, SPOOL from disk to printer without main CPU
VIC-20 and C64 serial bus [Angerhausen] derived from IEEE 488
slow, should have used 6522/32 shift registers, or used full parallel 488
anec SPOOL from disk to printer worked, but after locked up, reboot
SCSI
[Byte] 89-2p293 SASI (1.5), SCSI (4), SCSI-II (10), IPI (80)
[Byte] 90-2p267 and 90-3p291, [Byte] 90-10ISEp187 SCSI II
[Byte] 90-12p361 Macintosh and PC SCSI programming interfaces
[Byte] 94-8p111 SCSI and beyond
[Byte] 95-5p52 UltraSCSI, [Byte] 96-8p126 UltraSCSI 20MHz
[ct] 86-8p60 Festplatten SASI und SCSI, [ct] 89-11p136
[ct] 92-4p68 SCSI with busmaster, [ct] 93-11p98 SCSI details
[ct] 97-2p118 SCSI install, [ct] 98-2p182 SCSI howto
[ct] 97-17p184 SCSI done properly, [ct] 98-17p184 SCSI course
[ct] 98-18p192 SCSI course part 2 trouble shooting, [ct] 98-19p264 part 3
[ct] 99-5p268 U-SCSI active terminator, [ct] 2000-18p168 U-SCSI clocking
[ctk] 87-8p183, [iX] 93-7p108, [iX] 95-8p122 SCSI-3, [iX] 96-9p132 SCSI mix
[PCW] 96-3p96
SCSI derived from SASI bus from Shugart Associates (later Seagate)
bus allows 8 IDs (one bus adapter and 7 device controllers)
anec 2 adapters (Mac IIcx, PC AHA-1542B) and 2 devices (Mac HD, Syquest)
no problem w both working, so long only one accesses a device at a time
each controller can have up to 8 LUNs (drives) as in mainframe channels
but usually today embedded controllers, only one drive each
anec in Pioneer CD-Minichanger LUN to select between the 6 CDs
multiple signalings single vs double ended, multiple plugs ANSI vs Mac
terminator and termpower jumpers, see VAXstation plug for better solution
multiple speeds/sizes SCSI-I vs SCSI-II, normal/fast/ultra, normal/wide
anec NeXT uses NCR 5390 SCSI-II chip but SW only does SCSI-I
Macintosh ADB for user input
exa keyboard, mouse, 2nd mouse, hand scanner, even missused for modems
Access.Bus [Byte] 94-8p117
USB [Byte] 95-6p30, [Byte] 95-10p54
[ct] 95-11p360, [ct] 97-2p292, [ct] 98-1p74, [ct] 98-15p168 not quite here
[ct] 2002-17p176 USB for measuring and control, making devices
[ct] 2002-19p196 USB motor controller, [ct] 2003-1p171 USB motherb pinout
[Uo] 96-8p58, http://www.teleport.com/~usb/
is integrated in Intel motherboard chipsets
but not spreading, to high cost of peripherals [Byte] 97-2p40IS6
IEEE 1394 Firewire [Byte] 94-8p117, [ct] 95-6p126
[ct] 2003-10p166 Firewire 800, [PCW] 94-8p444
ftp://ftp.apple.com/pub/standards/p1394
SSA [Byte] 95-5p52, [iX] 96-11p152
fibre channel
[Byte] 94-8p123, [Byte] 95-5p52, [Byte] 96-5p173, [Byte] 97-2p40IS11
[ct] 95-6p126, [ct] 97-9p254, [iX] 95-4p146
PC internal and periphery bus hierarchy [Byte] 94-8p109, [PCW] 94-5p525 graph
Device Drivers
device input and output requires some very complex routines
on the other side functions to be done by these are the same for each progr
after a while generalised sets of routines were collected as standard IO libs
these routines could be used by any program
multiple types of IO devices, hardware independance is desired
IO libraries are modules to hide device details behind standard interfaces
insulate HW details like other modules hide data structures
Unix
[iX] 96-4p178 writing Unix drivers
table of pointers to drivers
for device access 8/8 bit mayor/minor (driver/device) numbers
split into character (byte streams) and block devices (for filesystems)
each type has space for 256 mayor numbers
in most Unixes for each block device corresponding char device [Leffler]
block /dev/xxx (for mounting), char /dev/rxxx (raw device for fsck)
for naming special inodes in /dev/*, must be generated by system admin
pseudodevice /dev/tty, nickname for actual terminal in use, exa for editors
better than this would have been system call to get real device
or to put the real devices name into an env var, like X server in DISPLAY
pseudoterminals pty/tty[p-q][0-f], for data exchange with spawned subprocess
exa used by XTerm or telnetd to communicate with respective spawned shell
anec on NeXT ttyp1..3 last usage date from Terminal.app (equiv of XTerm)
anec Linux mayor numbers 4, 5 mess [Beck] p178 1.0.8, 1.2.9 ls -l /dev/*
console/tty[0-8] 4.[], ttyS[0-31] 4.[+64], cua[0-31] 5.[+64]
tty 5.0, tty[p-s,0-f] 4.[+192], pty[p-s,0-f] 4.[+128]
vs NeXT console 0.0, tty/ttyd/cu{f}[a-b] 11.[+0/+64/+192{+32}]
tty 2.0, tty[p-q,0-f] 4.[], pty[p-q,0-f] 5.[]
VMS
serial lines TT[A..Z]n:, LAT logical terminals LT[A..Z]n:, disks DU[A..Z]n:
Apple II
drivers in ROMs on controller cards [Byte] 89-9p300
Commodore CBM series, exa C64
kernal ROM function entries, list of jump instr to actual routines
same functions at same address on all models
many of these jumps are indirect ones via a vector table in RAM
expansion card ROMs and resident routines from tape/disk can redirect them
exa C64 user port missused as Centronics port for standard printers
load driver in to unused tape buffer and hook output vector for device 4
CP/M BIOS
at top of memory BIOS entry table, list of jump instr to BIOS routines
see Z80MU [Byte] 89-4p304 usage of HALT instruction for table structure
below it BDOS entry point, called indirect via CALL 0005
with function code, internal jump addr table
below it the CCP command line and ev the DDT debugger
BIOS information block at 0000H..00FFH
user program starting at 0100H up to OS begin (recorded in information block)
IBM PC BIOS
[Byte] 87-10IIPp173 IBM PC family BIOS comparison
[Byte] 89-4p303 PC BIOS functions, usage, POST, ROM scan
[ct] 95-3p314 BIOS POST card, [ct] 95-3p318 BIOS POST codes
[ct] 96-1p260 BIOS setup and update
[ct] 97-3p344 and [ct] 97-4p402 BIOS setup programs
[ct] 98-15p98 Internet PC help, [ct] 98-26p142 POST cards
drivers in motherboard BIOS ROM, exa keyb, video, beep, floppy, HD, par/ser
but no built in support for SCSI, CD-ROMs, requires problematic extensions
BIOS extension ROMs on cards, exa SCSI, network, should allow any hardware
do this by hooking the standard BIOSes INT 1x call addresses
IBM PC IRQs, BIOS entries, DOS entries via INT vector table for hooking
but the PC/XT/AT bus has no geogr addressing or slot select signals
as result of this no reserved space for ROM drivers, difficult to use
also boot ROMs often restrict even further IO address selection
exa AHA-154xX can only use built-in boot ROM if IO addr set to 330H
users and manufacturers avoid ext ROMs, prefer to use only motherboard ROM
this requires devices that are binary compatible to IBM originals
leads to crippled backwards compatible stuff, limitations on expanding
on motherboards for cheap systems parallel/serial/floppy/IDE on board
some even have a video adapter or even sound card integrated, full system
HD controllers and HD BIOS INT 13 interface
HD BIOS first only a few fixed drive sizes, like floppies
requires setting to too small a drive and then
set it right with Drivparm command in config.sys
later BIOSes with type 47 drive with user entered drive parameters
BIOS INT 13 call interface limited to 1024 cylinders
the BIOS can not boot from tracks with numbers above 1023
exa AHA-154x maps linear SCSI sector numbers to 64 heads, 32 sects
BIOS acces (and booting) only from the first 1024 MB of a SCSI drive
entire bootable partition must be in first GB of the disk
why don't they use 128 or even the full 256 heads on drives > 1 GB
this would allow booting from first 2 or even 4 GB
as I want 4*500 MB with 4 bootable OSes on my 2 GB patched ROM
this mapping of sectors numbers makes HDs partitioned on one SCSI type
unreadable on an other type of SCSI, exa Adaptec vs FutureDomain
disk controller register interface defined only for ST 506 (MFM, RLL), ESDI
no standard for SCSI adapters [Byte] 90-11p186 fuzzy side of SCSI
requires all the mess with setting IO addresses and boot ROMs
leads to IDE driv, also ATA, ATE or AT-Bus [Byte] 91-3p317, [PCW] 96-3p95
IDE adapter with 1/2 drives simultes 1 MFM controller with 1/2 drives
sometimes problems with 2 different drive types as master and slave
unlike SCSI only usable for hard disks, no other disk types or tapes
use same mechanics as SCSI drives, exa Conner 3100 (SCSI) vs 3104 (IDE)
but a different controller board, but often big price difference
IDE low cost market, reduced controller, small cache, only boot RAM
SCSI high speed market, more powerfull controllers
anec there one existed SCSI adapters with IDE-like interface to IDs 0/1
but they never really worked, manufacturers too early, cust gave up
IDE speed limited by AT bus and polling to max 1.5MB/s
[ct] 92-2p94 AT bus am Anschlag, [PCW] 95-4p434, [PCW] 95-5p492
if 2 different speed drives the slower one dominates [PCW] 95-5p376
also if in fast 486 or Pentium no faster than on 386
IDE size limited by WD1006 ctrl and BIOS interface
[ct] 98-11p165 PC HD size limits and where they come from
numbers passed in CH C7..0, CL C9..8-S5..S0, DH only head
WD1006 ctrl 65536 cylinders, 16 heads, 255 sectors, 512 bytes
BIOS calls 1024 cylinders, 256 heads, 63 sectors, 512 bytes
result (min) 1024 * 16 * 63 * 512 = 504 MByte
requires track mapping controller for drives with more than 1024 tracks
but less than 16 heads or 63 sectors, to be smaller than 504 MByte
anec Micropolis 1GB fools BIOS as ctrl with 2 500M [PCW] 95-11p266
but this trick will fail with 2GB or even with any size 2nd drive
requires track mapping BIOS for drives with more than 504 MByte
anec 1503 870 MByte have mapping BIOS driver as pseudo OS boot block
this installs itself in memory and then does the real OS boot
drive knows PC BIOS conventions, problems in Alpha, Macintosh, PA?
E-IDE to circumvent IDE limits, also called ATA-2
[Byte] 94-3p97, [ct] 95-3p230, [ct] 95-8p168, [ct] 97-4p264 UDMA/33
[ct] 97-9p268 IDE Ultra-DMA (UDMA), [ct] 98-22p216 EIDE full speed
[PCW] 95-1p519
E-IDE 1/2 adapters simulate 1/2 controllers with their drives
4 drive, also CD-ROM/tape, more capacity (lin sect), higher speed (DMA)
but little experience yet, E-IDE problems [PCW] 95-8p672
also confusing many PIO modes, ultra DMA [ct] 97-4p364
SATA [ct] 2002-16p186
anec IDE simply means embed controller, SCSI is also embed, some object
RS-232 ports and COMx BIOS
only 2 ports or problems with shared interrupts
multiple devices of one type can not share addresses or interrupts
for some funny reason COM1 is IRQ4, COM2 is IRQ3, also LPT 1-7, 2-5
standard BIOS routines not interrupt driven [Byte] creation of PC contradic
require direct access to hardware by every user program
this prevents changing of the flawed device design (irq lines)
[Byte] 91-4p143 high speed, [PCW] 92-3p318 serial killer
[PCW] 96-2p199 PC COMx history 8250/16450/16550, PS/2 trouble w 16550
[ct] 92-2p170 16550
even with a new BIOS on card to allow better cards/routines no luck
bad BIOS interface no read/write string function, only read/write char
printer/parallel/LPT ports, [ct] 98-22p164 from printer to parallel port
missuse for fast communications and for attaching external drives
exa Laplink&Co, Linux PLIP, Linux digital joysticks
exa parallel port tape, IOmega drive, Trantor T338 Mini-SCSI, Ethernet
SPP/EPP/ECP [ct] 94-7p120, [ct] 98-22p164
but such devices are slow (max 200kByte/s), can not be booted from
first used 4 data lines cross-wired to 4 status lines
then full 8 bit bidirectional port on PS/2
then Xircom enhanced printer port (EPP) with HW handshake [ct] 94-7p120
then Microsoft encanced capability port (ECP) with FIFO and IRQ/DMA
standardised in IEEE 1284, http://www.fapo.com/1284int.htm
port through-connection problems for printer behind an ext device
no through connection when the device is switched off
VCR manufacturers since decades know that this is neccessary
for keyboard, video and sound BIOS problems see interactive and timesh part
BIOS configuration first with jumpers, inflexible (only a few bits)
later CMOS RAM and SW on setup (diagnostics) disk, very late SW in ROM
same lots of plug-in adapters still use jumpers
those with SW often use setup disk, very bad because
when the disks go lost the hardware becomes useless
also setup programs are OS dependant and require direct HW access
exa ISP16 sound card setup, will not work under NT, access violation
exa DEC EWRK3 setup with nicsetup.exe, will not work under Linux
better put setup SW into ROM, trigger on boot with hotkey
exa Adaptec AHA-1542CF uses Ctrl-A for its SCSIselect utility
MS-DOS [Duncan]
in memory first BIOS data, then io.sys drivers, msdos.sys OS
then config.sys OS data extensions and drivers, then resident command.com
as last TSRs loaded by autoexec.bat, rest user progr and transient c.com
this memory arangement uses the 8088 segments to give each a base address
is a form of position independant code (PIC), relative addressing to segm
this works for stuff smaller 64k (io.sys, msdos.sys, most driv, c.com)
for larger stuff multiple segm are needed, segm reg reload pos depend
far addr corrected by program loader, requires reloc info, .EXE files
for dyn allo memc from rest Unix derived malloc/free, used with exec/wait
but spawned programs get entire CPU, caller sleeps if no IRQs caught
.EXE and mem man were added in version 2.0, in 1.0 none like in CP/M
limited extensibility
char and block drivers in config.sys
exa ansi.sys (con: replacement), aspidisk.sys
also missused character drivers
exa himem.sys, emm386.sys, mouse.sys, aspi4dos.sys
even io.sys internal clock$ [Duncan] isn't a proper driver
char driver nametable in memory built up from strings in driver code
is less hassle than Unix /dev/* directory built by system admin, better
is one of the few things where MS-DOS is simply better than Unix
but config.sys no file include= facility for including a netconf.sys file
also no set= for env var in config.sys (in OS/2), needed for net load
buffers, fcbs, files, stacks only conventional memory, not in UMBs or HMA
QEMM has set of utilities to move them into UMBs, bend pointers to them
TSRs in autoexec.bat
drivers, networks, programs that install themselves resident in memory
exa mouse.com, mscdex, fastopen, redir, interlink, background printing
anec use undoc function to get drive letters for mscdex, redir, interlink
anec config.sys install= to load them from there instead of autoexec.bat
autoexec.bat is then only used for setting personal stuff, not hardware
this was very usefull in MS-DOS 5.0, since Win 3.1 smartdrive fails it
lack of IO driver access standards forces SW to access HW directly
leads to inflexibility in upgrading HW and lots of incompatible extension
once PC became a standard backward compatibility became a big problem
result IBM PC is the computer that makes the most sys admin problems
Booting
first drivers+fileaccess+userprogram were one big file
then drivers+fileacess+cli+tools, the operating system
only user programs were loaded from separate files
then drivers, fileaccess, cli, tools, user program all separated
separate driver code from rest of system for easier replacement
without relinking every program on every hardware change
file access routines are also loaded residently like drivers
to reduce program size on disk, leads to first simple operating systems
similar in scope to early PC OSes such as CP/M and MS-DOS
anec Ernst IBM 360/370 DOS (later DOS/VSE) more like CP/M than MS-DOS
CLI+tools as a single separate user level program, the shell
leads to a simpler OS, only kernal, exa Multics, VMS, MS-DOS
in Unix even all the file tools are cut out of the CLI as separate programs
exa Unix shells sh/csh/ksh/bash/tcsh/zsh [Byte] 83-10p187, [Byte] 89-9p315
originally only few built in commands, all tools in /bin/*
but later monster-shells have everything but the kitchen sink built in
resident OS access by user programs, CLI and tools
via special call instructions, these are known as system calls
or one call and behind it a table of entry points, jumps to actual routines
to allow the user programs to find the OS routines
use fixed address, jump vector or user program issued trap [Tanenbaum] p17
to load all of these resident into memory, to build up a system after power on
is known as booting the computer, follows on after resetting the processor
first computer systems had to be loaded everytime by hand from front pannel
for entering speed and less errors also optimised for minimal size
[Raymond] "boot" historical note
anec Seymour Cray knew bootcode of CDC-7600 off by heart [Pest]
to simplify this and to make it less error prone automated boot process
program in ROM catches processor after reset (provides first instruction)
this program finds a boot device and loads the OS from it
at the beginning processor self reset, then fetch first instruction
8080/Z80 boot from 0, 6502 vector at 0xFFFE, 80x86 boot FFFF:FFF0
680x0 boot first 2 vectors in 00000000..000003FF space
anec 680x0 needs first vectors in ROM, later rest for interrupts in RAM
vs 80x86 where irq vectors at 0000:0000..03FF in RAM and FFFF:FFF0 in ROM
exa Alto boot by world swap with a system image file [Lampson] p302
exa CP/M bootable disks the first few tracks, before file system
exa IBM PC boot ROM, boot sector, OS loader, kernal, config files [Duncan]
booting only from first floppy (drive 00H) or first HD (drive 80H)
allways first boot from floppy attempt if not modern switchable BIOS
even these only allow exchanging 00H and 80H, why not list of any drives
BIOS extension ROMs allways add their drives after the existing ones
booting from such devices is only possible if no motherboard BIOS devices
booting from CD-ROMs allways impossible, but I can't see reason for this
why can't I set CD-ROM as 80H and HD as 81H, would be good for OS install
of course after installing then switch back to HD as 80H for booting
would require boot loader on CD-ROM, but I have never seen such a CD-ROM
PC BIOS "El Torito" standard for CD booting [ct] 96-12p72
booting from partitioned HDs requires intermediate boot loader in MBR
uses an active partition bit, to decide which partition to boot from
anec MS-DOS fdisk /MBR switch for rewriting MBR program is undocumented
anec MS-DOS will only boot from first partition of first disk
booting from an extended partition is not possible
no second boot loader in subpartitioning MBR
but OS/2 boot manager can load from logical partition [PCW] 95-11p267
boot from a partition on disk D: via boot manager impossible
boot sector reads rest from first disk, OS/2 boot manag swaps disk IDs
will not even boot from an other partition than the first
will also not allow 2 primariy partitions on a disk, rest in extended
fdisk will not even set active bit on disk 81, "you can not boot from D:"
anec Windows 95 always overwrites MBR, kills OS/2 boot mgr or Linux LILO
install LILO in Linux root partition, after Win95 use Fdisk to corr MBR
the MBR is a common resource for all OSes, no one should alter default
original MBR should be treated like BIOS code, better even in BIOS
anec early VAXen could be booted from tape, even used tape as paging device
--- Interactive Systems
Interactive Operation
early computers stood still while the user entered/edited progr at the console
batch systems abollished this as costly time waste, but lost interactivity
at the same time research systems were expanded interactivity with run time IO
important for an interactive system are its output devices
interactive systems require dynamicaly updated display of program state
teletypes not flexible enough for interactive displays, no updateability
also use all the possibilities of human sensory system (sound etc)
this also applies to some non interactive systems, but here it is crucial
but the essence are the input devices for influencing what it does
anec on Whirlwind interactive called manual intervention (MIV) [Ross2] p56
interactive systems require control of the running program
human ability to express desires (motor sys) limited rel to sensor abilit
question should not be "for what is this input device good"
but "what device can use all the possibilities of human motor system"
input devices must provide a mix of control info and input data
input reaction time of program is critical in interactive systems
notice below 0.1s, accept below 0.3s, annoying over 1s
users want to type ahead without keyboard "losing keys"
input must be captured and stored in buffer before lost
work program calles routines to fetch input from the buffer
this is the main usage of IRQs today (together with system clocks)
program must be able to test for input in buffer without blocking
the processor and program are simply sandwiched in between for connecting
program waits for input, reads it, evaluates it, outputs and repeats wait
interactive is reactive, user tries something, sees what happens, refines it
like composing music on an instrument, programming becomes program composing
this allows explorary programming, experimenting, prototyping
if in a "I don't know how further" situation just attempt something
delete if it turns out bad (only loses time, doing nothing loses also)
keep a copy of last working version for restoring old state
using computer to experience problems behaviour, solve it [Licklider2] p123
writing programs is simply one form of problem to solve by experience
gives shortest time to result because of no unneccessary waiting by user
efficient usage for users time [Brooks] p131 but inefficient on hardware
specially debugging programs become effective, even more than with console
users were assigned blocks of time as single user 15 minutes..multiple hours
in days when computers cost millions this was very expensive (ca $100.-/h)
this lead to minicomputers to reduce the cost of usage, make using easier
exa DEC PDP 1 (1960, 4..32k*18 memory) [Salus] p19, [Levy] p50
essentially a commercial version of the TX-0
first computer cheap enough ($120'000) to not worry about costs [Levy] p52
exa LINC (1963, 1/2k*12 memory) [Clark] p347
laboratory instrumentation computer for data analysis in life sciences
programmable data analyser instead of fixed function circuits
for its time cheap enough to be used as piece of laboratory equipment
with 2 block access tape drives and pixel plot display ca $32'000
anec also first home computer, Mary Allen Wilkes writing LAP4 [Clark] p381
this creative freedom of interactive systems lead to hackers
[Raymond] "hacker", [Raymond] "Humor, Hacker"
[Raymond] Hacker Folklore, [Raymond] Portrait of J. Random Hacker
when the TX-2 was in work the TX-0 was donated to MITs EE department
[Ross2] p97 move 1957, [Clark] p357 corrective step to IBM batch paradigm
MIT hackers from TMRC first discovered the TX-0 in 1959 [Levy] p28
then later they went on to the PDP 1, PDP 6 and PDP 10 [Levy] p50
1960-80 is known as the elder days [Raymond] "elder days", [Tolkien]
is time between discovering TX-0 and AI lab desintegrat because Symbolics
in 70s micros and 80s home computers and PCs expanded the hacking movement
[ct] 98-24p276 15 years c't, home comuter and PC history
I belong to this later group of microcomputer hackers
with timesharing they had only had TTY access, with luck glass TTY
big system had to be reached over TTY lines, slow
in making micros these hackers found they allow the user
full interactivity as in interactive systems [Levy] p314
manipulatable picture, fast editors, colours, motion, sound
also better input devices, local keyboard, joystick
lead to computers being usable as video games
exa Atari VCS/2600 6502, 4kbyte ROM, 128 byte RAM [IEEEspectrum] 82-12p22
[ct] 98-18p88 game consoles, [ct] 2000-9p142 playstation 2
[ct] 2002-5p106 Xbox PC as console, [ct] 2002-22p92 Linux Xbox
[PCW] 95-9p69 Playstation vs Sega Saturn
Output Devices
computer output is human input, must hit human senses
very unbalanced: 90% sight, 9% hearing
1% rest (smell, taste, touch, gravit, motion, temp, thirst, hunger, magnet)
computer usable sight (main), hearing (aux), touch/gravit/motion (seldom)
rest too slow (smell/taste/thirst/hunger) or too unreliable (magnet)
lamps, backlit buttons, process control
[ct] 2001-10p148 DMX protocol for controling lights
levels digital data, analog signals, power electronics, mechanics
steper motors require multi wire pulse sequences, exa printers, robots
numeric and alphanumeric displays
[Ross2] p74 Whirlwind 8*7 segment display vs MTC charactron
nixies, 7/14 segment displays (LED, flourescent)
exa pocket calculators such as HP 41C, HI-FI units
multielement separate connections to latches vs periodcal scanning display
osciloscope CRT displays
[Bell] p30 PDP 1 Type 30. [Levy] TX-1
[Levy] first videogame SPACEWAR on Type 30/PDP 1, [Raymond] "SPACEWAR"
[Ross2] p74 Whirlwind 8*7 segment display vs MTC Charactron
[Byte] 82-11p508 Microvec, [Byte] 90-6p380 Sketchpad, first CAD sys on TX-2
osciloscope were long used in laboratories to plot electrical signals
introduced to computing via usage of computer as laboratory equipement
for this the scope is run in X-Y mode, no timebase
both beam deflections from applied voltages, anec Tek move amp
with 2 DACs for controlling the X and Y deflections
for timebase-like progrs use X autoincrement mode [Clark] p394 LINC instr
intensity digital or analog Z value
battlezone game used Z intensity for distance [IEEEspectrum] 82-12p20
for colour use 3 Z inputs with RGB or YUV signals
[Bell] p30 colour display, [Raymond] pIX colour Spacewar
anec because many control signals NLS osc+camera+monitor [Engelbart] p198
vector output converted to video out, also inverse video [Engelbart] p204
picture definition with points (give X and Y, ex autoincrement)
to avoid burn in activate beam only for small time per pixel, flash it
later lines (give endpoint relative to existing point, HW computes)
lines faster because next pixel is neighbor, no far moves of beam
later character patterns [Bell] p30 Type 30, [Ross2] p73 MTC charactron
text as bitmaps (DEC 7x5 in 2*18) vs vectors (CDC, Imlac series of moves)
used specially in early systems because no static picture memory consumption
and devices (scopes) readily available in electronics labs
program cycles through picture, in between read user input and compute
large computation as result of user input produces picture flashing off
makes this impossible on timesharing, needs display processor for refresh
due to mix pixels/lines/chars must be flexible, CPU, reason for PDP-5
but also for text-only display dedicated char display, exa CDC console
output on osciloscope based systems quite a bit of code
initialising output representation structure, periodically displaying it
modifying the current state of the representation of updating the display
dynamic redraw, variation possible, motion display, use of LINC for this
or use memory scope, exa [Ross2] p101 Memotron, Tek4014
only static picture, only add pixels, explicit all clear w "screen flash"
anec tech laboratory, very delicate and expensive tube
video CRT displays
[Angerhausen], [Plauger3] p91 human eye physiological parameters, [Wilton]
[Byte] 87-5p95 TV video signal, [Byte] 88-12p243
[Byte] 89-4p251GS PC, Macintosh, Amiga
[Byte] 92-7p159 displays, p171 colour and resolution, p179 mono to colour
p189 HDTV as monitor, p195 display human factors, eye physiology
[Byte] 93-11p207 computer graphics intro, GUIs, video conf, 3D
[ct] 88-10p212 6845, [ct] 96-6p150 features, [ct] 99-11p220 digital connector
[ct] 99-20p204 TV studio computer technology, [ct] 2002-13p222 WS moni on PC
[ct] 2002-17p182 HDMI digital connector, derived from TMDS and DVI
[ct] 2002-23p127 DVI connector, [ct] 2093-6p216 HDTV, [ct] 2003-12p210 SCART
[ctk] 87-2p143, [ctk] 89-5p275
[PCW] 92-9p304 IBM PC video cards/monitors, [PCW] 95-2p392
use existing video/television display screen technology
difference normal vs trinitron, cannon, pixel triangle vs stripes, wires
a television picture is a constantly updated grid of pixels
is scanned by an electron beam, as if a osc had both X and Y timebase
black and white just brightness/intensity signal
colour would needs signals for R+G+B, 3 intensities, incompat with mono
uses 1 intensity (B&W compatible) and 2 differences (R-G and B-G), YUV
are packaged, NTSC/PAL UV 1:3 linear vs SECAM 1:(3x2) 2dim UV compress
the comp must generate TV-like signal (raster frequences, pixel patterns)
anec with too higher horizontal freqency monitor line transformer burnout
exa on Juergs CBM 8032, [Raymond] "killer poke"
the entire display surface is scanned
make inverse video and coloured backgrounds possible
on old home computers used actual TVs as monitors, or better video monitors
TV computers are user driven video generators, designed backwards
FBAS signal, freq gen, pixel gen, frame buffer, proc, ROM, keyb
exa Apple II, Dragon, C64 1701 monitor, anec I use 1701 today as TV
exa Dragon 14.318 MHz -> SAM 1.777 MHz -> 6809 0.888 MHz, anec double poke
exa C64 VIC (PAL) 7.882 MHz -> 6510 0.985 MHz -> timers (keyb, RS-232)
exa IBM PC CGA 14.318 MHz -> 8088 4.772 MHz -> timer 18.2 Hz
CGA was designed for output onto a television or video monitor
lead to 40 char/line standard mode (INT 16 mode 0), will show on TV
anec in 1995 my 1990 386+SVGA once on a parity error while mem count
went into 40 char mode, to see how awful it looks do MODE CO40
anec later processors and video cards both used own faster quarzes
but orig quarz still on motherboard, used for timers, beeper, bus pin
today actually proc from 14.318 with PLL chips, video also own 14.318
some claim that with HDTV computers will again use TVs
but reason for TVs was cost, later only specialised computer monitors
more likely computer monitors tubes will be used for future TV
picture definition with characters/cells
exa VT05 72x20 chars of 5x7 pixels in 6x8 cell
actually with pixels half width of height 5x5 pixels looks better
5x7 only use for characters with descenders (fgjpqy,_), VT05 only ,_
exa C64 40x25 chars of 8x8 pixels in same size cell
also has 40x25 char 4x8 pixel 4 colour mode, but no 80x25 4x8 2 colour
exa PC MDA 80x25 chars or 8x14 pixels in 9x14 size cell
anec char 0xC0..0xDF stretched 8th pixel, reason for irreg PC ASCII
can be seen as missfeature in character GUIs using chequered flag char
also on VGA, graph 640x480 but char 720x400, some VGAs corr chequered
VGA char on 640x480 LCDs drop every 9th column, 40 line black bands
characters 6..8..more bits, 6 for TTY 64char, 7 full ASCII, 8 extend ASCII
saves memory, only a few bits per char, character code and ev attributes
attribute charset, bold, underline, inverse, blinking, colour, doublesize
but increases refresh transfer rate, 2 mem reads, char code and bitmap
this reduces maximal resolution, unless pipelined w 2 separate memories
also limited flexibility, no proportional text or random graphics
originally only ASCII characters, later graphic characters (patterns)
lowres (160x75 or 160x100 on 80x25 char) using random pixel grid patterns
use above-ASCII codes, 2x3/char=2^6=64 vs 2x4/char=2^7+invattr=128
later highres with loadable charsets, softfonts, font ROM->RAM
often called cell graphics (opposed to ASCII art character graphics)
in beginning shift registers as video mem, exa Apple I [Byte] 84-12pA68
later normal RAM for video mem, direct access by processor
char cell video vs TTY or bitmap video substitutive, not additive
a char followed by backspace and _ will be replaced, not underlined
anec GNUs less sets to bold, _ to underlined
but interestingly _ is not underlined as on a printer
picture definition with sprites
exa Atari VCS/2600 2*8bit players (2+1)*1/2/4/8pixel missiles and ball
exa TI 99/4A 8*16x16, Commodore C64 8*24x21, Amiga 8*32xfull vertical size
exa PC accellerated video cards mouse cursor
character cells make problems of displaying small fine scrolling objects
for this superimpose a small bitmap object onto video data, a sprite
are small 1x8..32x32 pixel graphics, are overlayed on background image
cosist of small chunk of data and X/Y coordinate pair to control position
allow character based displays to have fine scrolling objects
[IEEEspectrum] 82-12p27 Microsurgeon design for character set
anec C64 also entire background (char or bitmap mode) soft scroll 8 pixel
mostly used in games for moving objects (players, missiles)
also known as player/missile graphics, exa on the Atari VCS/2600
but also today on accellerated video cards as mouse cursors
this prevents need of erasing cursor and redraw when background altered
picture definition with a bitmap
[Byte] 89-2p238 video systems comparison
exa Atari VCS/2600 40x200, twice displayes 20bits for 1 line, change by SW
exa Dragon 32 256x192 1bit, square pixels, 6kbyte, 3/4 of 2^n 8kbyte
exa C64 320x200 1bit or 160x200 2bit, 8000bytes near fits 2^n 8kbyte
320x200 with 4x8 font is just good enough for 80x26 text, full terminal
exa Alto 606x808 on 15" vertical screen
to simulate paper bitmap screen, not calligraphic (vector) [Thacker] p271
exa VAX 1024x786 on 19", later 1280*1024 on 21" [Bell] p34
exa Sun 1152x900 on 19", is best poss util of 1024^2 pixels of video memory
1024*1024/12*4=1182 44=1152, but 1024*1024/1152=910
exa NeXT 1120x832 on 17", they call it MegaPixel, but not even 1000^2 pixel
exa PC first CGA, EGA, VGA, later SVGA, usually resolution like VAXen
despite Sun resolution having the best video memory utilisation
but 19" monitors difficult to get for PCs, despite being ideal size
on systems with slow bus and video accel 1024x768 allows off screen mem
exa Macintosh first only 512x342 on 12", later larger but long time no big
very often 600x800 on vertical 15" screen, called A4 portrait display
for device independance device drivers in ROMs on card [Byte] 91-4p305
memory group of bits for each pixel
black&white, gray levels, few colours, lookup table [Byte] 89-9p333 8bit
delta modulation/HAM (Amiga), delta YUV (PhotoCD), hicolour, truecolour
bits per pixel 1,2,4,8,12,16,24,32
fixed colours (C64, CGA), lookup (EGA+), gray levels, 3 colour levels
semi "true colour" in 256 palette w 6*6*6=216 colours: 00,33,66,99,CC,FF
[Byte] 89-10p333 stalking the 8bit spectrum; Mac CLUT problems
[Byte] 90-10p80IS11 VGA palette
[ct] 94-9p244 Windows palettes, colour model
multi-bits org as bitplanes (Apollo, SGI, Amiga, EGA) vs words (CGA, VGA)
b&w and colour same resolution desirable, must be so with bitplanes
workstation frame buffers [Byte] 89-2p255
row of bits in byte vs on screen, shift left vs right
requires lots of memory for bitmap (pixels*bits/pixel)
on Alto picture compaction, only lines with content stored [Thacker] p288
on home computers multiple resolutions to dynamically set compromise
PC only 128k address space gives problems with big bitmap video RAMs
in the beginning split between unused (64k), MDA (8*4k), CGA (32k)
later HGA/MGA (64k) expanded MDA, uses both MDA and CGA addr space
later EGA (64/256k), VGA (256/512k), SVGA (512..4096k) in unused 64k
adapters greater than 64k (EGA, VGA...) require address multiplexing
requires bank switching, complicates and slows down software
makes different cards incompatible, for simplifying SW VESA
[Byte] 90-12p355 VESA, [ct] 97-2p300 VESA prog
[ct] 97-4p442 VESA prog in protected mode, [ctk] 90-5p351 VESA
bitmap images use up lots of space, use data/image compression
lossless data compression, same bits reconstructable, for any data type
[Byte] 87-12p291 information theory, bits vs probability
[Byte] 90-12p289 putting the squeeze on graphics, JPEG
[Byte] 91-3p309 Huffman and LZW compression
[Byte] 93-7p197 DoubleSpace, [Byte] 94-2p56 compressing file systems
[ct] 91-10p278 compression huffmann, trees, linked lists
[ct] 2000-16p194 data compress w BWT algorithm, and Huffmann and LZW
[ct] 2001-22p180 JPEG 2000
[ctk] 92-7p231 Komprimiertechniken
[PCW] 94-10p524 RLE and Huffmann compression
lossy image compress, only similar image reconstructable, only images
Joint Photographic Expert Group (JPEG)
[Byte] 90-12p289, [ct] 91-6p126 DCT, [ct] 93-11p121 JPEG
[ct] 99-26p184 JPEG2000
wavelet compression [Byte] 95-12p34, [ct] 95-11p278
[ct] 99-26p 186, [PCW] 95-12p251
fractal compression [Byte] 93-10p195, [ct] 93-11p122, [PCW] 94-5p396
drawing onto screen bitmap, drawing/imaging models, rendering
exa Alto copy block (font/scroll) and fill block (incl hor/vert lines)
exa Apple Quickdraw [Byte] 92-9p291 inside Quickdraw
exa PostScript coordinates, scaling, shapes, filling, clipping [Adobe1]
[Byte] 87-9p177 vector to raster algorithms, [ct] 2001-9p138 vector graph
[ct] 2001-14p198 + 2001-15p2004 vector drawing airbrush
[ct] 2001-26p226 colourising line art, [ct] 2002-20p218 SVG vector format
[iX] 94-5p184 vogl(e) GL implementation for Linux
[Uo] 93-7p58 PHIGS
for angled lines Bresenham algorithm [Byte] 87-9p180, [Byte] 88-3p249
is also used in modified form for circles and curves
but also for higher speed slabs [Raymond] "slab", exa QuickDraw
anec Paul Forth line progr funny zigzag, today I think it was mem smash
for nicely rounded font edges use antialiasing
[ct] 95-8p238 antialiasing, calc for more pixels, use gray levels
[PCW] 94-1p394 3DO partial pixels for antialiasing
[PCW] 96-4p35 Acorn font antialiasing for TV monitors
converting pixel graphics back to vector graphics
[ct] 91-1p190, [ct] 95-1p208
drawing fonts
[Khazaeli] typography, [Plauger3] p123 terminology
[Byte] 85-1p255, [Byte] 87-5p171 RIP, [Byte] 90-8p289
[Byte] 91-5p103 Pournelle terminology
[Byte] 94-5p187 Panose font matching system
[ct] 94-12p226 Truetype file format, [ct] 96-4p242 page layout
[ct] 98-14p50 Truetype fonts on Linux, [ct] 99-25p242 TTF on Linux
[PCW] 93-11p392
for drawing fonts use existing drawing primitives
bitmap fonts use bitmap, stroke line/curve, outline shape/fill
exa Columbia Commander 924 terminal used coded bitstring instructions
for drawing blank/set/skip/inv data structure, interpreted
most likely also used for the 6*10 pixel character bitmaps
font foundry, family, style, size, char set
bitmap video allows proport fonts, but should use fixed where expected
exa terminal emulators, ASCII mail programs
anec NeXT mail writer uses Ohlfs like their terminal emulator
but reader uses Helvetica, screws up ASCII graphics
generally the user should be able to select a desired font
users from printed books backgrounds prefer proportional fonts
hackers from long experience with char cell displays prefer fixed
on Macintosh (and Windows, NeXT) same imaging model for display and print
open a "print window" in the display system, draw in it, then output
vs on Altos, VMS and Unix use different imaging, no real WYSIWYG
since powerfull proc in computer, drive print engine directly from comp
exa Apple StyleWriter, QuickDraw to bitmap, bitmap over RS-232
exa NeXT 400dpi Laser, DPS to bitmap, bitmap over special connection
anec 68040 NeXTcube with Laser was fastest in PIGS PS printer test
exa Windows GDI printers [PCW] 95-11p153, [PCW] 96-2p218 experience
anec Amstrad PCW 8256 (Joyce) had direct printing already in 1985
multiple char sets, symbols [Byte] 90-5p262 world disp, [Byte] 90-10p33
different ASCII to character mappings [DEC2] p82 char encoding
C0/C1 operate vs debug, GL ASCII vs NRC vs SGCS, GR SG vs ISO Latin
ASCII ISO 646, NRCs ?, 8bit ISO 8859
Unicode [Byte] 91-7p108 ISO10646 vs Unicode, [Byte] 94-6p91 globalis
[Byte] 94-11p177 globalisation, [Byte] 96-3p40IS11 localisation
[Byte] 92-10p47 in the land of double byte, Kanji typing
[Byte] 94-6p93 internationalisation
[Byte] 97-3p97 internationalisation, [Byte] 97-3p105 Unicode evolves
[ct] 97-13p254 Unicode, [ct] 97-14p178 Unicode
[iX] 95-5p190 Kanji on the Web, [iX] 95-6p7 letter about it
[iX] 95-9p3 LANG and so on
ANSI C standards document internationalisation parameters
also international date formats, ISO 8601 yyyy-mm-dd [byte] 97-7p89
also culture effects can cause unpredicted trouble
exa Amstrad ALT, Chevy Nova, Sony CDU, Microsoft PDS
image processing [Byte] 87-3p143 [ct] 99-22p236
[ct] 2002-23p190 inpainting, repairing missing pixels
storing images to disk [Byte] 89-9p205 GIF, TIFF, [ct] 91-9p244 Amiga IFF
requires lots of processor power for drawing
[Byte] 93-1p204, [Byte] 93-11p229, [Byte] 94-2p146 accel vs buses
[Byte] 96-12p59 MIPS 4300i RISC in Nintendo64 console
on workstations high performance displays are central to operation
IO buses are often slow, having proc exec run loops takes time
AT bus is slow, bank switching on EGA and above makes it even slower
exa graph.c switch for every pixel gave slow mouse selection display
many simple ops, leads to HW support for fast video operations
exa hor/vert line, fill, move/sprite/cursor, masking
are faster than fastest processor/bus combination (less mem accesses)
only for irregular filled shapes is direct processor best
exa Alto BitBLT instruction in microcode [Thacker] p272, [Lampson] p322
exa Amiga blitter in Agnes/Agnus memory controller and DMA chip
exa PC TI 340x0, from 320x0 DSP for line, circle, curve, stroke
exa PC video accelerator cards IBM 8514, ATI Mach, S3, Cirrus, etc
exa S3 in office 386DX33 speeded up Xcursion/Decterm/LSE over 10 times
this is roughly the difference between a 386-33 and a Pentium-133
anec VAX/VMS LSE does multiple single line scrolls for page up/down
this is a case of using fast hardware to accelerate dumb software
exa Mach 32 in my Linux sys immediate scroll vs Tseng 4000 1s scroll
exa Intel 80860 [Dewar] p341, [Byte] 89-12p333, [Byte] 91-1p347
was originally intended as a 64 bit graphics processor
used vector load/store mechanism with mult pixels, SIMD [Dewar] p370
the FPU that made it a "Cray" was added late in the design process
80860 used as a blitter on the NeXTdimension 32 bit/pixel video card
note that on the NeXT all FP (incl DPS) is done on 68040, not 80860
now Intel MMX SIMD extensions to 80x86
[Byte] 96-7p59, [Byte] 96-8p63 progr strategies for MMX
[Byte] 98-7p43 PPC vector/graphics extensions, AltiVec
[ct] 96-6p206 Pentium MMX and AGP
[ct] 96-12p22 MMX Sun/Intel/Cyrix/Amd/HP-PA/MIPS
[ct] 97-1p228 MMX critic, [ct] 98-15p186 AMD/Cyrix/Centaur 3DNow!
[ct] 2000-4p314 comparing vector Intel/AMD/Motorola
uses FPU registers with bitmap coproc circuit, reverse of 860 develop
but problems with P55C implementat, uneven speedup [Byte] 97-2p26
the idea first appeared in Suns Ultrasparc VIS [byte] 97-1p40IS1
anec TSP on Definicon 32032 4 pixel of each 8 bits at same time
cycle of reincarnation
[Bell] p25, [Raymond] "blitter", [Raymond] "cycle of reincarnation"
pixel set/res, vector instr, disp lists, graph proc, full proc, merge
picture definition with switchable char/bitmap, size vs abilities
but this often gives irregular video addresses, non contiguous lines
exa Apple II Woz last moment simple bitmap hack [Levy] p255
every 8 line, 8 blocks, comes from from char mode
but also in char mode non linear addresses [Byte] 84-12pA70
exa Sinclair ZX81 graphic via SW reprogramming character generator
and from switching video memory while every rescan
anec first "impossible", then done in a game, later in Memotech Basic
exa C64 graph in blocks of 8 bytes, also from char mode
C64 Basic no graph support, own fast graph lib, scr clear and pixel inv
clear screen routine used no indirect addressing, used instr unrolling
clear loop unroll xx00+X, xy00+X.. then INX, BCC
first set colour to A (to avoid checkers), then pixels to 0
anec comp day astonnished freak because faster than commercial games
pixel inv routine table driven, move x coord high bit from A to PC reg
with base+Y and A load base addr into temp adr in 00xx
move X into A AND 11111000 into Y for base+Y pixel memory address
move X into A AND 00000111 into X for base+X pattern in A, XOR base+Y
machine code entered in Basic DATA statements, POKEd into memory
into a special part of memory which is not used by Basic
exa IBM PC CGA, see [Wilson] for 6845 registers
anec CGA graphic mode every 2nd line to save a 50c chip
anec CGA also snow when proc access video RAM while output in char mode
requires BIOS and direct accessing SW to wait until end of line, slow
exa QB and QC character GUI wait demandable by command line switch
anec similar effect on Cirrus 5422 when 72MHz bitmap mode and RAM modif
video display refreshing
to get a flickerfree disp it must be refreshed min 70 times a second (vert)
to get horizont frequency multiple by lines (incl black top/bot, rescan)
to get pixel frequency multiply that by pixels (incl edge, rescan)
for a sharp picture the amplifiers must take at least those freqencies
also the colour dot matrix of tube smaller than pixel length/line dist
good monitors are like good speakers on HI-FI systems
bad ones can be made cheap, but for good one you need to spend lot more
prepackaged deals usually save cost on cheap bundled monitors
anec Amiga flicker fixer, double monitor rescan rate despite TV signal
is same technology as in 100Hz TVs, more important than 16:9 or HDTV
video refresh is the largest volume IO data transfer, up to 100s of MByte/s
Alto still used main processor multi-sequence capability for output
but needed 32 bit transfer hardware [Thacker] p276 and only 1 bit/pixel
Apple II, VC64, Dragon video still in main proc RAM, but own DMA ctrl
as limited video data amount, slow proc, used bus multiplexing, no loss
anec Dragon 2nd DMA controller on SAM chip, also does DRAM refresh
Sinclair ZX80 and ZX81 simple DMA, used processor for retrace control
this used up significant power, fast (blank screen) and slow (vid) mode
C64 VIC need more than 985kB/s for video, full bus, loses proc power
result the C64 is slower than the VC20, but VC20 has appalling video
anec the C64 has in the VIC chip a bit to switch off video rescan
this allowed full processor power while tape/disk par-ser convert
anec simple VIC/SID HW register sets gave C64 noisy colourfull crash
at least the scan rates were fixed, no destroyed monitors
unfortunately they didn't compensate for this with a 2MHz processor
video uses full bus while throwing out data, why not 1.97 MHz proc
anec then 1541 floppy disk drive has an own 2MHz processor, no DMA
some people ran number crunching on that, floppy as compute server
TI 99/4A video generator with own 16 kB RAM, DMA from it, no UMA, fast
processor accessed video RAM through the video chip by ports
same also the 6534/6/8 and 7220 chips used in many CP/M micros
anec normal 99/4A had only the 16k video RAM and 256 RAM for 9980 proc
TI Basic read all Basic code and variables form video memory
was very slow as result of this, despite having a 16 bit processor
the 99x0 was circa a LSI 11 but w 16 registers, from 990 minicomp
the Basic interpreter RAM and plugin module ROMs were direct access
this was also the reason for 32k expansion needed for Assembler progr
this 32k required the expensive expansion box, prevented SW develop
a module with 8k progr tools ROM and 8k RAM would have been great
add to module 16k EPROM burner and empty EPROM modules, ideal
anec TI critic innovative marketing strategy, preventing SW develop
anec the same video chip was used for the Microsoft MSX [PCW] 96-2p265
its limits (resolution 256x192, sprite size 16x16) sank MSX
Amiga Agnes/Agnus mem ctrl and DMA chip, Daphne/Denise video no RAM acces
can be regarded as a super version of Dragon SAM and VDC
this was the most famous UMA machine, speed loss so great that
separate chip RAM (with video) and system RAM (without video)
complicated OS, as disk ctrl uses same DMA chip, chip RAM, copy
anec to increase chip RAM from original 512k to 2M fat-Agnes
unfortunately Jay Miner designed orig register set without reserves
IBM PC video cards own RAM, 2 separate buses, proc only slowed on drawing
this requires vid mem on card, but picture needs mem anyway, moth less
even has advantage of not being limited to 8088 1MByte address space
some cards use internal 64 or even 128 bit, exa S3 864 and 964
some even use dual port RAMs, second output as shift register, VRAMs
[ct] 96-4p174 chipsets, RAMs, accels for fast video cards
but in cheap PCs video RAM "reunification" (were never unified in PC)
unified memory architecture (UMA) [ct] 96-2p98, [ct] 96-2p272 VESA
video image stored in main RAM, no video RAM, exa SIS 5511+, 6205
reduced chip count (ca $40), slightly reduced RAM waste
but loses parall mem readout, up to 40% speed loss, cached still 30%
UMA is a form of bus mastering, is inferior to DMA with own RAM
specially critical in (low cost) small RAM and no cache systems
this is a questionable technique [Byte] 95-10p60
see how it slowed down original Amiga, they got rid of it
Intels strategy of simplifying PC architecture, exa in ATX motherboard
reduce periphery cost, at cost of needing an bigger faster processor
proc from Intel of course, gives them bigger slice of users budget
this based on user buying based on available budget [ct] 96-10p90
also complexity of ever more powerfull processors hinders cloners
[ct] 97-4p260 Intel Accelerated Graphics Port (AGP)
[ct] 97-4p270 also Cyrix MediaGX UMA video on processor
most Workstations use UMA, but combined with VRAMs, exa Sun, NeXT, SGI
data readout over 2nd port, contention only for addr load, loss 0.25%
but today the SGI O2 does full UMA, without VRAMs
but with wide bus, 2 GByte/s transfer rate
display geometry
for texts/graphs resolution is a key issue (font size in pixels) vs
for picture display amount of intensity levels to avoid ragged edges (TV)
resolution vs sharpness from monitor pixel grid
but also from video card analog electronics [ct] 96-10p272
users want to see a lot of data on screen
14"/15" are only good up to 800x600
only good for a single program on full screen, not for mult windows
15" screens horizontal (spreadsheet) vs vertical (text)
vertical 15" monitor with 600x800 pixel would be enough for many jobs
with 7x13 font width 80 char + scroll, hight 60 lines + menu (= A4)
and this without the bulk and table space requirement of bigger scr
but on IBM PC problems with video cards starting in 80x25 mode
would need special card with own BIOS that starts in 80x50
but such a BIOS would require special video card and monitor
or use a vertical monitor that will take 80*25 with large spacing
or monitor that starts horizontal, swivels to vertical, expensive
17" is the minimum to use with todays desktop environments
I use a 17" with 1152x864 pixels for 2 windows of 80x60 chars 6x13 font
but also on 17" choice hor/vert, vertical allows longer text windows
19" and 21" will take 1600x1200 pixel, many long windows
no vertical versions needed, as more than 2 full pages on display
but these are too bulky and heavy for transporting, use desk space
why don't manufactures make monitors with handles
like the Apple A4 or the C64 1701 video monitor I use as TV
after years of cust complaints they make packaging boxes with handles
increase display surface with multiple screens
exa SR CAD on PR1ME with ADM and Westward dual displays
for commands/lists text terminal and for display graphics terminal
todays 1 screen and GUI CAD users don't know what they are missing
exa TSP CP/M VT text and GRIP 7220 graphics, used for Mandelbrot
exa NeXT NeXTdimension dual headed, but problems with some SW
IBM PC problems with fixed address video cards
CGA and MDA can coexist, EGA B&W w CGA, EGA colour or SVGA w MDA/MGA
but in BMS XTs (384k RAM) with MDA+EGA for Autocad (this was 1985)
perhaps it would be better to put vid generator and vid RAM into monitor
this would be like an embedded controller in SCSI or IDE disk drives
anec Apple uses SCSI monitors for Powerbooks with no external video
surface arangement vertical (as in TV) vs
horizontal (as desk surface) [Licklider2] p121, [Licklider2] p123
anec my 1985 CBM1701 14" monitor had handles, same Mac Classic and A4 Moni
new Eizo has at least indentions, but most monitors fail on this
on screen colouring
[Raymond] "angry fruit salad", [Byte] 87-4p311 distinctive colouring
[Byte] 91-12p84IS35 smart use of colour
[Byte] 92-2p342 colour abuse, also chart junk, presenting data
too many colours leads to users getting headaches
hackers bad at chosing friendly colour schemes because their colour sense
is distorted from growing up on 3 bit primary colours with black backgr
flat displays
[Licklider2] p121 backprojection displays
[Byte] 85-3p130 plasma, EL, [Byte] 88-9p243 displays, [Byte] 88-12p321 flat
[Byte] 89-9p323 lap tech, [Byte] 91-2p229 LCD, [Byte] 95-6p115 colour to go
[ct] 95-4p104, [ct] 95-9p43 directed 3D display
[ct] 96-9p164 flat displays for desktop, [ct] 96-12p288 DMD
[ct] 98-1p28 bistable LCDs, retain picture without electricity
[ct] 98-5p38 light emitting polymer flexible self light flat screens
[ct] 98-6p204 LCD monitors, [ct] 98-6p230 LCD technology
[ct] 99-2p76 polymer displays, [ct] 99-13p43 polymer displays
[ct] 2000-20p110 organic OLED displays, [ct] 20002-23p288 LCDs better angle
[ct] 2001-1p27 electronic/digital paper, [ct] 2002-20p200 reflective LCDs
[ct] 2003-3p192 plasma and multi-LCD
[PCW] 93-10p362 ferro, micromirror, [PCW] 94-6p515 ferro
[PCW] 95-1p284 LCD, [PCW] 96-2p23 LEP polymers on foil, electronic paper
[PCW] 96-5p54 TFT LCD based on desk display with intergrated keyboard
technologies LCD, gas plasma, EL, ferroelectr, micro mirror, back projectio
aim is to get rid of big bulky heavy expensive monitors
also get rid of electromagnetic emission
[Byte] 91-10p80IS67 TCO, [Byte] 91-10p119 health and safety first
LCD also usable for projector systems, on overhead proj or as active slide
but flat screen on the wall may good for TV, but not for computing
[ct] 99-18p178 field emission displays
projectors, beamers
lcd, micromirror, laser
[ct] 99-8p60 also laser based projector, [ct] 99-12p186 laser beamer
[ct] 2000-12p174 TFT and DLP (micromorror) beamers
[ct] 2002-4p144 projection surface, [ct] 2002-8p88 digital cinema
3D graphics
[Byte] 89-2p255 workstation graphics today, 3D hardware
[Byte] 89-4GSp267 the RenderMan interface, [Byte] 90-12p253 graphics go 3-D
[Byte] 92-5p153 3D graphics, p167 photorealism, p173 radiosity, p177 voxels
[Byte] 92-5p183 3D displays without helmet
[Byte] 93-4p121 visualisation of data, [Byte] 93-6p121 EISes mine your data
display 3-D as bitmap 3=f(1,2), comb w 3-D grid+hight it gives 4-D
[Byte] 93-11p215 three ways to 3-D, [Byte] 95-7p123 3D toolkits
[Byte] 95-10p167 Glint 3D accel, [Byte] 96-6p49 Apple RAVE API
[Byte] 96-9p137 OpenGL vs QuickDraw3D vs Direct3D [Byte] 96-10p76 3D everyone
[Byte] 96-12p63 Direct3D revealed
[ct] 89-4p240 wire model to shaded picture. [ct] 89-5p212 simulating worlds
[ct] 89-10p214 inverse kinematics, walking, [ct] 91-6p204 radiosity
[ct] 91-8p196 radiosity part 2, [ct] 95-3p92 animating virtual human
[ct] 95-9p43 directed 3D display, [ct] 95-11p210 3D non glasses
[ct] 96-2p246 reycast technique, [ct] 96-6p200 Windows DirectX for game speed
[ct] 97-1p198 rendering, [ct] 97-7p94 modelling actors
[ct] 97-9p144 3d report, cards, drivers, APIs
[ct] 98-2p74 3D accel cards, [ct] 98-12p84 synthetic/artificial artists/stars
[ct] 98-15p22 directed 3D display, [ct] 98-16p174 hierarchic polygon models
[ct] 98-25p250 3D modeling of special effects, [ct] 99-2p130 3D, polygons
[ct] 99-2p188 realising 3D in hardware
[ct] 99-7p158 3D sight and display systems, [ct] 99-11p74 ILM
[ct] 99-12p194 3D game worlds, [ct] 99-17p164 image-based rendering
[ct] 99-19p248 programming Direct3D and OpenGL, [ct] 99-22p148 DirectX 7.0
[ct] 2000-1p144 3D-rendering with levels of detail, [ct] 2000-2p159 Linux 3D
[ct] 2000-8p90 modelling and animation of human bodies, avatars
[ct] 2000-8p202 generaton 3D on the fly, 3D chips, [ct] 2000-15p202 in games
[ct] 2001-5p198 3D PC graphics, [ct] 2001-25p94 3D displays
[ct] 2002-15p194 how 3D chips work
[iX] 95-10p138 OpenGL
[Uo] 96-12p96 PovRay
loudspeakers
[Byte] 91-7p249 Macintosh sound, [Byte] 98-7p32IS13 state of PC audio
[ct] 95-7p240 sound generation, [ct] 97-4p166 audio report
[ct] 99-4p98 digi radio/tv production
[PCW] 96-4p144 history of computer sound generation
visual output is often ideal (90% of human brain input)
sound provides additional 9% of the brains input
sound is more than ping or beep
in games and multimedia sound effects are part of desired output
but sound is also usefull for status monitoring
exa Whirlwind [Ross2] p62, TX-0 [Levy] p33 and LINC speaker [Clark] p395
connect to accu bit [Ross2] p62 digit 13, [Levy] p33 14th bit or bit 14
exa Apple Macintosh Sonic Finder
can be continuously monitored by human, backgroud activity [Norman1] p102
sound wave generators, analog output
radio leakage from processor/bus
exa listening to MTC on radio to determine if working [Clark] p354
exa Dompiers Altair [Levy]
single bit output
exa TX-0 music program, bit 14 of accumulator [Levy] p33
exa Dragon single bit sound gen [JamesM] p59
exa IBM PC single bit digital on/off, intended only for making beep
can reproduce more [Beck] IBM PC Linux pcspeaker, [ct] 88-8p74 syntext
by being used as input to an integration circuit, delta modulation
standard PC sound hardware is less capable than a $50.- tape recorder
IBM PC sound gen on motherboard, speaker in case, no volume control
better sound generator on video card, speaker and volume ctrl on moni
this would have made poss on MDA beep only, on CGA better for games
sound signals on same connector/cable as video, exa NeXT mono monitor
same keyb, joyst and mouse plugs on monitor, not back of system unit
or better keyboard plug on monitor and joystick/mouse plugs on keyboard
would have made video card a terminal card, enabled multiple users IO
anec CD bit stream is a fast single bit system, but fast 32..128 oversamp
even best PC sound cards are still only at 16 bit wave tables
multi bit, DACs
exa Alto 10 channel microcoded wave table player [Thacker] p280
exa Dragon 6 bit DAC, R-array for U/R, summ up I, then I->U [JamesM] p55
ultimate in realism, but can require a lot of memory (wave table)
or lots of processor time (synthesising wave)
sound synthesizer, exa SID chip in C64 [Angerhausen]
[ct] 98-10p144 music synthesizer definition with mod files
wave table sound, CD-like, stereo or even multichannel
[ct] 2002-2p112 5.1 sound connections
speech synthesizer [Byte] 92-4p165, [ct] 2002-18p92 robot voice
anec SC-01 chip in Juergs 8032
external synthesizers, connected via MIDI bus and commands
[Byte] 85-10IIPp127, [ct] 91-1p142, [ct] 99-24p178, [ctk] 86-11p181
[PCW] 88-2p170, [PCW] 94-1p331 general MIDI codes, [PCW] 95-4p388
sound generation approximation of sounds gives lifeless sound, exa techno
to sound like real analog instruments use source modeling, exa pan flute
for improvement [ct] 97-2p328 DSP physical modelling
sound processing requires executing a big lot of very simple ops
use simple fast processor, digital signal processor (DSP), exa 32020, 56001
similar to vector process, but usually integer data, fancier addressing
[Byte] 89-8p246 DSPs, [Byte] 89-12p243 sounds and images
[Byte] 92-8p269 digit signal processing, [Byte] 92-11p155 signal computing
[Byte] 92-11p177 DSPs 56001 vs 486, [Byte] 94-11p151 WinDSP
[Byte] 95-2p91 DSPs, AMD 29060 SHARC, Ni1000, [Byte] 95-11p171 MM procs
[Byte] 97-6p40IS17 DSPs, multimedia processors
[Byte] 98-40IS7 combined embedded CPU and DSP chips
[ct] 89-3p198 56001, [ct] 93-9p226 56001, [ct] 97-4p256 Multimedia DSPs
usually implemented as a second processor, exa on sound card, in modem
but the main processor can also do it, no extra HW
[Byte] 95-10p62 NSP, [ct] 98-24p17 NSP killed by Microsoft pressure
but beware of sound becoming annoying [Norman1] p103, config switch off
speakers generate lots of noise, just after offices have become quiet
use telephone handset (quiet, exists, users know it) as sound IO device
[PCW] 93-7p559 answerphone integration with email, listen over phone
users who want a loudspeaker can use speakerphone, give user the choice
multimedia
[Byte] 89-5p283 DVI, [Byte] 89-12p353 Media Lab
[Byte] 90-2p203 the 4 multimedia gospels, [Byte] 90-10ISEp105 DVI usage,
[Byte] 91-9p89 Pournelle learning experience
[Byte] 91-11p116IS59 Olivetti Pandora media workstation
[Byte] 91-12p153 for presentat, p163 chips, p177 Intel/IBM AVK, 189 QuickTime
[Byte] 92-5p107 making sense of MM, why should the user care for it?
[Byte] 92-10EGTWp33 Windows MM Extensions, Media Control Interface
[Byte] 93-8p193 Windows MME vs OS/2 MMPM/2 multimedia infrastructures
[Byte] 94-5p57 TI MVP multimedia processor, SIMD DSP
[Byte] 95-6p241 Win95 MM extensions, [Byte] 95-12p135 Win95 direct drivers
[Byte] 96-3p67 what's the story, storyboarding
[ct] 97-12p16 info-/edutainment fiasco
[ct] 98-6p262 Win98/NT5 multimedia extensions
[ct] 2002-20p218 SMIL animation format
[ctk] 94-8p251 FLI/FLC animation format
[PCW] 87-1p160 Domesday Project, [PCW] 92-2p242 Pandora
[PCW] 92-5p230 media labs smart TV, [PCW] 93-2p454 Video for Windows
[PCW] 93-6p376 Apple and Microsoft, [PCW] 94-9p452 video editing
[PCW] 94-9p455 (and cover) 1984 video, [PCW] 94-12p289 technology vs content
[PCW] 94-12p580 large copy of main 1984 picture of big brother
[PCW] 95-6p351 didn't miss anything, [PCW] 95-6p526 Media Lab
text, still pictures, sound, video and programs interleaved, time synced
mixture of text and video in 1968 [Engelbart] p204
simularities of animation, music notes and programming [Kay1] p258
is mixture of multiple medias types of usage in one medium
the name multimedia is actually a missnomer
power of MM is unification of multiple medias on one medium (bits)
the name unimedia would describe its strength better
but beware of one size fits all trap, beauty of simplicity vs usage
used for games, cartoons, education, visualisations, presentations and PR
but can be annoying for the audience
exa Werner interactive clicking around to search for short sound effects
vs enjoying a cartoon with continuous sound on video tape/disk
better use multimedia PC as a home cartoon editor, "print" to VCR/CD
exa sound bites are not natural, real things make varying cantinuous sounds
sound blanket all the time, with variations, troughs/peaks
anec Uptime demo music inserts, were simply noise effects
just a loud noise, breaking presentation, analog to early DTP font mess
multimedia can be interactive as before only individual teacher [Kay1] p255
"more people are entertained, more they will retain" [Byte] 97-1p40IS13
but beware of multimedia edutainment, is often only entertainment
with a knowledge "flavour", not real knowledge [Norman2] p20
it needs to be pictures and colourfull to apply to percieved user tastes
but this often results in visual junk-info so that "someting happening"
exa TV documentary films with pictures to fill screen
the pictures have no relationship to narrative, not referenced
and pre-made effects are allways the same, no content
at first they are cute, then effect wears off, become boring, nerving
exa building up menu with rotating icons, one after an other
pictures+video+sound often content free time waste, for entertain
only good for "couch potato turbo"
for serious information work they only get in way, slows down
computer is better used as super-book, fast search and delivery, text
anec Roberta Pournelle reading program, pictures for adults tick list
for the children learning the success of knowledge is the real reward
no real learning because constant flow hinders reflective mode of mind
for learning digestion time is needed, playback must be controlable
display flow pausable, single frame, fast/slow, backwards, rewind
see difference between watching raw TV and TV from a video recorder
I tape all documentaries, then watch them from tape, stop for writing
but also films better of tape, can pause to look at costumes/stage
this is specially needed in modern MTV-style filming, music videos
problems with others deciding your moves, less discovery [PCW] 92-2p134
to learn one need to be able to drill down on motivating subjects
better a knowledge laboratory to explore relationships, consequences
exa how life 1638-1715, user makes decisions, faces up [Byte] 89-10p360
[ct] 96-6p94 multimedia simulations, [ct] 96-9p178 multimedia education
[ct] 97-1p115 CD encyclopedias
multimedia disappointment
throwing hardware onto market with no visible use lead to disappointment
a medium should offer an author ways to express what he wants to say
a tool alone is no use, only with contents does it become interesting
thats why this work comes as text, not MM, MM only when needed
also bad implementation on many sys, exa CD-ROM installation [PCW] 93-1p178
anec MM is when Windows crashes under deafening noise from connect loudsp
some people believe in PC-TV combination devices for multimedia
[PCW] 95-3p462, [PCW] 95-12p110, [PCW] 96-2p259
but TV is home cinema (entertainment), PC is intelligent book (information)
watch TV in comfortable lounge sofa vs computing in straight office chair
different viewing distances, different physical arrangement of device
screen quality, TVs are unfit for displaying PC text resolutions
[PCW] 96-2p245 Forrester shows that normal users see this
[PCW] 96-3p35 but the analysts fail at it, miss target widely
the TV/video/audio industry will only really enter computing when it
becomes a threat to their own survival, by buying up computer firms
also the available devices are usually cut down, yesterdays technology
while today home usage (games) needs more processor than office use
result of all this is that such combos will be a flop
better separate devices, fitting usage style, arranged in places of use
for office/working a traditional PC with monitor
for lounge/entertainment
special multimedia computer with TV as output
exa CD-I [PCW], MS/Tandy, 3DO, Apple Pippin
but so far these have failled because too weak, no real marketing
upgrading/adding features difficult or even impossible monolithic
or preferably a real powerfull and expandable PC with TV as output
exa Olivetti Envision [PCW], Apricot [PCW] 96-5p56
virtual reality
[Byte] 95-5p85 see you around, image stiching, [Byte] 95-7p111 VR visualise
[Byte] 96-7p93 VR meets reality, on normal screens vs with helmet
[Byte] 97-7p32IS11 VR promises unfullfilled
[ct] 95-11p200 VR helmet wearing problems, dizzyness
[ct] 95-11p210 3D displays without helmet
[ct] 96-11p112 MuSE VR, [ct] 97-1p78 CAVE VR, [ct] 99-19p98 CAVE
[ct] 97-8p104 VR Stanislaw Lem, [ct] 97-10p134 VR in Japan
[iX] 95-5p68 VR basics
stereo/3d vision comes from 2 adjacent eyes diff inputs to the brain
this is why one eye moving position also gives stereo, used by one-eyed
this can be exploited by mixing 2 cameras pictures, exa ZDF ami football
technical base is helmet with small mounted displays
[Licklider2] p121 Sutherland PDP 1, [Byte] 88-9p243 headup display
[ct] 98-15p22 auto-stereoscope display, with linear lenses
cuts user completely off from real world, [ct] 92-1p54 begehbar Schmierzett
[ct] 98-20p262 limits of virtual reality, where the illusion breaks
some systems solve this by projecting computer output onto real word
as in head up displays in aircrafts
but these have problems with eye accommodation
anec VR helmet at TNC made Philip dizzy
touch
force feedback on joystick or mouse (kinestetic joystick or mouse)
[Byte] 91-10OLp43 mouse with force feedback
anec car servo steerings, users complained that they can't feel the road
gravity, acceleration
requires a moving room, very expensive, exa pilot training flight simulators
other sensory systems (smell, taste, temperature, thirst, hunger)
no use known to me, most likely too slow and imprecise to be of interest
Input Devices
switches, buttons, process data
exa MIT Whirlwind upgraded 1952 w interactive input, intervention registers
[Ross2] p63 Room 222 Cape Cod panels
levels sensors, amplifier electronics, analog signals, digital data
shaft encoders w multibit data for angles gives gliches when mult bit change
leads to gray code, exa mouse encoders
counters, clocks, timers, alarms
hardware clock for system time, real clock leds read in
also make all device output registers readable as input
anec non readable status bit in DL-11 lead to comment in terminal driver
"The following code is brought to you through the stupidity
of hardware engineering" [DECUServe] 9?-?pDS-20
this design defect was repeated by designers of IBM PC EGA video card
6845 chip on MDA/CGA was readable, replaced with more integrated chip
in this the registers were not readable, bad for state saving/restoring
corrected in VGA, all registers are now readable, used for DOS boxes
keyboards
[ct] 98-24p236 ten finger typing
keyboards with teletype code or ASCII code
TTY code 64 7 bit characters (32..95) + 32 Ctrl-codes, caps only
exa ASR-33 teletype
ASCII code 96 7 bit characters (32..127), caps and lowercase
exa glass teletypes, early terminals, ADM 3 [Raymond] "glass tty"
cursor control with Ctrl-?
ADM 3a no actual cursor control keys, despite screen cursor control
rather the HJKL hat arrows on top of them, used with Ctrl-*
Wyse WY-50 le BS/Ctrl-H, dn LF/Ctrl-J, -> up/ri Ctrl-KL [Cameron] p221
editors use HJKL (vi), Ctrl-SEXD (Wordstar) or Ctrl-BPNF (Emacs)
Ctrl-H/J work in vi, but Ctrl-L is redraw, note that Ctrl-K is unused
vi command/edit mode because Unix assumes only a (glass) TTY keyboard
cursor control with cursor keys
C64 cursor/fn keys as ASCII extension [Angerhausen]
Columbia Commander cursor control keys, left BS, down LF, up ^, right _
keyboards with ASCII and bucky bits
[Raymond] "bucky bits", [Raymond] "meta bit"
[Raymond] "space-cadet keyboard", [Raymond] "WAITS" PC Alt key
[Raymond] "WAITS" SAIL E invisible commands
exa SAIL Edit/Alt/Meta(8)+Ctrl(7)+ASCII(6..0) used for TV-EDIT, NLS
Ctrl allows 32 command codes, Meta (and M-C) allows additional 128 codes
exa MIT AI TV (Knight) for PDP 10/ITS LMeta+RMeta+LCtrl+RCtrl+Top+ASCII
anec the original Emacs text editor in TECO was written on one of these
the use of the bucky bit command style in Emacs is from here
is sometimes given nickname Esc-Meta-Alt-Ctrl-Shift [Raymond] "EMACS"
exa MIT Lisp Machine space cadet Super+Hyper+Meta+Ctrl+Top+Front+ASCII
nearly 8000 bucky bit combinations, not all used, allow sparse allocation
exa X Window servers Meta+char(7..0) char with Ctrl, Shift, ModeShift
such keyb have enough destinguishable key codes to enable modeless editors
exa Colouris em uses Fn keys [Salus] p141, VMS EDT numeric pad appl mode
but such keyboards have problems with only 8 bit wide OS input routines
exa Unix /dev/tty, VMS TTA:, MS-DOS CON: are all only made for TTY input
anec XTerm VT 102 emulator on X Window Meta(7)+ASCII(6..0) or char(7..0)
meta bit must be bit 7 like SAIL because Unix /dev/tty stream of bytes
but this collides with bit 7 of 8 bit character sets, exa ISO 8859-x
must use ESC+char to transmit meta-char to avoid confusion
send actual meta-char keys to user programs as Esc+char, as if no Meta
for this XTerm*VT100*eightBitInput resource must be set to "false"
but X*V*transla must still conv Meta to insert-eight-bit()
insert-eight-bit() is a missnomer, should be insert-with-meta()
then must treat 8 bit as data, insert it, not interpret as command
Emacs iso-insert, bash, .insertrc meta-flag and convert-meta settings
keyboards with ASCII and escape sequences
exa VT terminal series, increasing keyboard sophistication
VT 52 cursor keys EscA..D [DEC2] p99 VT 52 emulation mode of VT 320
VT 100 cursor keys Esc[A..D [DEC2] p87 ANSI mode cursor keys \]
VT 220 additional command keys Esc[1..6~, function keys, PF keys EscO* \]
modern keyboard layouts like LK-200 only appeared at the begin of 1980s
anec \ between left-shift and Z is not IBMs fault
forced on them by DIN standard, classic case of commitee missfeature
why didn't they use Alt GR key with the 3 keys between M and rshift
anec on NeXT no 102nd key, < and > are where NumLock, but \ on Alt-7
the old lousy PC keyboard was also standard [Byte] 82-11p398 Pournelle
that one was from ISO [Byte] 89-9p398
exa MS-DOS CON keyboard drivers, Windows keyboard drivers
make codes are converted to ASCII as far as possible
for non ASCII keys use ASCII=0 and the make code is passed back
the Alt key is treated as a shift bit, like Ctrl is
dead keys (', ^, `, ~, ") add accents to next key if this makes sense
exa SCO Unix and Linux /dev/tty console terminal drivers
the IBM MF-2 layout is similar, but not identical, to VT 220 layout
console drivers (and MS-DOS ANSI.SYS) make VT 220 escape sequences
use PC Home/End keys as VT Find/Select keys, pictures
also converting images to text using Optical Character Recognition (OCR)
[Byte] 90-7p243, [Byte] 93-12p203
[Byte] 92-6p58 Xerox Fax form from server, fill it out, fax it to server
then automatic OCR, then transaction, then answer is faxed back to user
[PCW] 94-8p390, [PCW] 95-467, [PCW] 95-11p97, [PCW] 96-9p130
also image/shape recognition
exa Deutsch robot image subtraction [Levy], fabrication quality control
also document image processing (DIP), scanned paper documents online
[Byte] 91-4p173, [PCW] 96-2p45 DIP blues, PlasmaDat DIP problems
also together with printer for photo manipulation, paintbox
[Byte] 92-5p372 digital faking photos, deception
[ct] 96-10p134, [PCW] 96-8p41, [ct] 97-2p214 image processing
[ct] 99-7p108 post processing images to improve them
is used routinely for "retouching" pictures for adverts [PCW] 96-9p132
also done with video, combine one persons image and an others actions
also eye tracking or hand/head motion detector as pointer replacement
[Licklider2] p120 Sutherland PDP 1, [Byte] 88-9p243, [Byte] 96-7p99
[ct] 97-9p58 eye track cursor, [ct] 97-9p126 gestures virt touch screen
[ct] 99-6p296 controlling computers by brain waves
[iX] 93-11p42 biological signals, eye movement, brain waves
[iX] 94-7p118 brain, [iX] 96-12p130 gestures
this is often used to control VR systems
scanner/screen/printer colour matching, screen Gamma correction
[Byte] 90-12p275, [Byte] 95-1p93 consistent colour, on screen, on printer
[Byte] 97-3p40IS17 colour managment, true colours
[ct] 96-10p180 scan/monitor/printer colours, models, correction
[ct] 2001-6p290 colour spaces, ICC diagram
[ct] 99-7p122 colour managment and calibration
[ct] 2002-21p232 calibration with simple methods
[PCMag] 95-3p28 filling colour palette for best "true" colour
microphones
sound wave recorders, analog input
single bit
exa Dragon single bit sound sense [JamesM] p61
exa [ct] 88-8p74 syntext recorder
compare input with 1 bit output, ind/dec DAC to follow, record DAC val
multi bit, ADCs
exa ADC chips
uses lots of comparators, are fast but expensive
exa Dragon ADC [JamesM] p104
compare inp with DAC out, logarithmic successive approx, cheap but slow
music instruments, for connection also MIDI, same as synthesizers
piano keyboards and foot pedals, laser harp
only trigger vs also strength, only time vs amplitude curve
mouth air pressure, as used in wind instruments (flute etc)
anec also used for mouth typing by handicaped people
a microphone and loudspeaker can be used for recording and playback
computer as powerfull phone answering machine, automatic answering
speakerphone like system, exa Xerox boards conferencing system
simulated tape recorder for email voice annotations, voice mail
connections line in (mic), line out (speak) and remote as tape recorder
stereo analog and digital line in and out like on HI-FI tape deck
this is known as Direct To Disk (D2D) recording
[PCW] 94-12p346, [PCW] 95-1p360
also without micro and speaker, just line-in and line-out as "tapedeck"
[ct] 98-21p118 digital audio, recording
same as CD player with line-out is replacement for record player
direct digital sound connection, CD->PC, no DAC->ADC
[ct] 2000-18p196 adding S/P-DIF to DAC3550 based MP3 players
S/P-DIF originally for DAC-less CD players to separate DAC module
recorded sound requires a lot of space, audio compression
using statistical compressor not optimal, make use of sound being sound
lossless linear predictive coding, as in Shorten and ist derivates
lossy psychoaccoustic compression FFT and remove unhearable, such as MP3
[Byte] 96-2p52 video and audio compression, [ct] 98-21p242 MP3
[ct] 99-9p200 MP3 player on parallel port, [ct] 99-10p260 part 2
[ct] 2000-3p130 MP3 how it works, [ct] 2001-1p98 audio archiving formats
[ct] 2002-19p94 MP3 replacements tested
[PCW] 94-10p342 DAB radio, [PCW] 94-12p517 MPEG vs Dolby AC-3
but quality loss, probems DCC/MD vs CD/DAT
again very subjective, also CD vs DAT or analog
[ct] 2000-3p144 MP3 hearing test, [ct] 2000-5p92 readertest MP3 vs CD
[ct] 2000-4p10 RIAA record dynamic curve also distortion
[ct] 2000-23p152 comparing various codecs MP3 vs the rest
[ct] 2002-13p224 RIAA curve correction for record->linein
analog also video recording and playback as in sound recording and playback
uses even more space, uses video compression
[Byte] 91-12p177 AVK, [Byte] 91-12p189 QuickTime
[Byte] 92-4p106 desktop video overview
[Byte] 92-5p129 raw material, [Byte] 92-6p131 graphs
[Byte] 92-7p143 cutting, [Byte] 93-2p225 QuickTime
[Byte] 93-3p129 desktop video conferencing
[Byte] 93-7p10 video conferencing will put real multimedia to use
[Byte] 94-1p107 VideoRISC
[Byte] 95-5p97 video workshop, desktop video not here yet, technolo problem
[Byte] 95-5p107 compression, [Byte] 95-7p103 SFX, [Byte] 95-10p69 H.32x
[Byte] 96-2p52 video and audio compression
[Byte] 96-5p125 videophone, because of net trafic at moment still gimmick
[Byte] 97-12p59 DVx MPEG 2 encoder chip
[ct] 91-2p32 Intel DVI 2 boards, [ct] 94-5p224 Video for Windows
[ct] 95-11p92 MPEG card w PCI bus mastering, [ct] 95-12p230 MM video chips
[ct] 96-11p222 video compress, [ct] 97-14p124 MPEG
[ct] 99-24p212 digital video recorder (DVR), TiVo
[ct] 2000-6p154 compressed video for internet streaming
[ct] 2000-26p94 PC as digital video recorder (PVR)
[ct] 2001-4p2004 Linux as video disk recorder, [ct] 2001-5p136 video cuttin
[ct] 2001-20p146 c't S.V.P. PVR, [ct] 2002-14p126 digitalising VHS and 8mm
[ct] 2003-6p266 H.264/AVC
[PCW] 90-1p148 VideoLogic DVA-4000 video win, grabber, pic in pic, teletext
[PCW] 92-11p462 DVI, [PCW] 93-3p330 video compression, [PCW] 93-6p479 MPEG
[PCW] 93-10p489 DVI, [PCW] 94-2p398 digital video, MPEG
[PCW] 94-10p342 video compression, use in broadcasting
[PCW] 94-12p519 ATI shared frame buffer interface
[PCMag] 95-4-11p104 digital video, boards and software
[Uo] 96-5p42 MPEG-2
motion video mem requirement even worse than normal bitmap because repeating
either use a series of JPEG pictures
exa C-Cube JPEG chip on NeXTdimension card, anec missing daughter board
or only every nth image and diffs, leads to video compression
Motion Pictures Expert Group (MPEG)
also speed of proc, assist with special hardware (de-)compression chips
MPEG real time decompression is possible on a fast general CPU
compression ist very heavy, special chips [Byte] 97-1p59 C-Cube MPEG
compress problems with fast moving structured backgrounds
exa ski race background snow structures, fences, forrest
ability to see this effect is dependant on the viewers visual system
timing of movements is critical to viewers, needs data streams in real time
[Byte] 96-2p60 Sun MediaCenter special Solaris w multithread stream driv
4 SuperSparc+ but used little, important RAID level 4, mult Fast SCSI
also data throughput problems of disk drives, specially CD-ROMs
for this Micropolis special AV versions of HDs, no recalibrate pauses
side effect of digital format is also postprocessing of ADC input
[ct] 2001-1p75 digitally processing analog recordings, decrackling
[ct] 2001-9p190 audio processing
speech recognition
[Byte] 88-9p243, [Byte] 90-7p225, [Byte] 92-4p135 natur IO and p151 speech
[Byte] 93-10p99 pen and voice, [Byte] 93-10p113 talk to your computer
[Byte] 95-12p97 voice control, [Byte] 97-10p32IS19 speech recognition,
[Byte] 97-12p55 using speech on PCs
[ct] 93-11p167, [ct] 94-9p122 telephone as voice terminal
[ct] 97-4p284 speech control, [ct] 98-5p120 speech recognition
[ct] 99-3p133 speech recognition
[PCW] 87-6p144, [PCW] 95-1p470 telephone s r, [PCW] 96-2p39 doesn't work
hands are not the only human motor system, humans can also generate sound
but speech recognition is problematic because of
speaker dependances, limited vocabulatory, stops between words
noise disturbance when multiple people
continuous speech over long time is tiring for user
slow and error prone
anec user in large office asks "how do you format a disk" joke
speech is good for specialised situations where hands are not free
exa postal service sorting packets, with trained operator
exa speech controlled telephone [PCW] 95-1p470
here both a microphone and a speaker for feedback is available
it is also only used for a short time, and the mic is protected
but even this is near universally disliked, menus unflexible and slow
phone desirable to all the problems described in [Norman2]
side effect of recording is digital (re-)distribution of audio and video
[ct] 97-1p94 DVD CDs, copy protection fights
[ct] 99-20p101 DVD playing on PC, regions
[ct] 99-20p132 DVD access controls
[ct] 99-24p30 DVD encryption crack DeCSS
[ct] 2000-2p28 DVD CCA dirty tricks
[ct] 2000-4p83 BMGs cactus data shield protected CDs first faillures
[ct] 2000-6p88 Napster, [ct] 2000-8p220 DVD CSS details
[ct] 2000-11p70 first hit against Napster, [ct] 2000-14p28 DeCCS legality
[ct] 2000-17p26 Napster prevents being closed until case handled
[ct] 2000-23p310 Napster and the end of feudal copyrights
[ct] 2001-3p90 moviez, [ct] 2001-4p64 what wrong with copy protection
[ct] 2001-6p150 P2P other than Napster, [ct] 200110p54 SDMI hacked
[ct] 2001-24p3 copy protection kills sympathies, drived people to copying
[ct] 2002-2p86 DA-AD copy losses irrelevant, analog hole, macrovision fils
[ct] 2002-6p158 moviez, [ct] 2002-8p204 e-bookz, [ct] 2002-15p18 TCPA
[ct] 2002-16p182 DRM systems, [ct] 2002-20p106 game cracking scene
[ct] 2002-22p204 TCPA, [ct] 2003-7p144 CD play on computer preventions
data gloves and suits
[Byte] 88-9p243 glove and position sensor, [Byte] 90-7p237 gestures
[ct] 96-6p76 intelligent room, [ct] 96-11p138 data suits
input users hand and body motion
are the technical base for controlling virtual reality systems
Debuggers
exa Whirlwind MIV-MDR, interactive MDR under MIV control, debugger [Ross2] p61
exa TX-0 FLIT [Levy] p32, PDP 1 DDT [Levy] p53, [Raymond] "DDT"
exa CP/M DDT, MS-DOS Debug [ctk] 88-8p189 MS-DOS Debug
exa Macintosh [ct] 98-23p266 MacsBug, Windows DrWatson
[Byte] 93-9p207 debugger support in Windows
early comp could be used interactively via the front panel switches
this allowed direct memory viewing and modifying, progr execution control
batch debugging was restricted to debugging statements and core dumps
interactive systems allowed the usage of better tools, interactive debuggers
show more memory then visible on front panel and show it in symbolic form
see a program run, what is actually happening at runtime
when micros appeared ROMs were cheap, way cheaper than DMA and front panels
often debugger built in, called monitor progr, runs immediately at startup
exa IMSAI, Microprofessor 1, ct Z80 66*66 [ct] 88-8p124 and 88-10p164
use of debugger for dynamic view of program in execution [Knuth] p259
also for exploring a system use a dissassembler [Levy] Harris Atari
Dragon disassemble in Basic used with [JamesM] to explore Basic internals
the debugger is a program that co-resides with the program to be tested
it takes at run time user input from the keyboard or control buttons
exa CP/M DDT
loaded above user program, to top of memory, just below CCP
exa MS-DOS Debug
uses 8088 segment system to load itself between command.com and user progr
exa Z80MU CP/M DDT replaced by a powerfull debugger running on the PCs 8088
dissassembler based on RESOURCE with labels, comments
anec on PC I used a similar program (SOURCER) on Form infected edit.com
because it was batch oriented it failed on encrypted code
only using Debug did I notice this, then decrypt, after further debug
for program test/debug go and breakpoints or single step
for break insert a temporary call instr pointing to entry point into debugger
at debugger entry save processor state as if IRQ occured, coroutine switch
later resume the program being tested by restoring its coroutine
also automatic inserting of break after next instr, gives single step exec
on some processors special one word BRK instr, sometimes called RST or SWI
some processors special HW support for single step execution, mode flag
as single stepping is slow also flow change mode flag [Dewar] 68030
or even breakpoint register, break when instr pointer = register
for watchpoints also support with watchpoint registers [Dewar] 80386
for even more powerfull breaking watch points or even watch expressions
such hardware features result in an processor trap when they are triggered
to let user enforce program breaks (perhaps in endless loop) use a break key
such a break key should be available in every OS, even when not debugging
for displaying and modifiying programs and their data
first octal/hex memory dump, move, fill, alter
later line disassembler and assembler, can be used as sole development system
exa Apple II ROM mini assembler used to write game [Levy]
main restriction of line assemblers vs batch ones is the lack of symbols
anec on C64 I intended to write a symbolic line/interactive assembler
would merge machine code speed, Basic editability and Assembler comfort
use a symbol table like a batch assembler but modify it by debugger
result is a interactive disassemble/assemble editor
but project got pushed away by Mandelbrot craze, Transputer, PC, MS-DOS
displaying IO from debugger and child program gives mixed output
switch between user program and debugger on one display
save user program screen state on entering debugger
incl command.com screen state before calling them, restore at exit
exa Microsoft QB/QC, Borland TurboPascal/TurboC
but also debugger on second display, with no mixed output
usefull for editors, form programs and others that use escape sequences
exa Microsoft CodeView, Borland TurboDebugger, 2nd display terminal on COMx
since the appearance of window systems this issue has become less important
for high level/symbolic debugging, symbol file/debug info [ctk] 90-3p361 Debug
debugger session state (progr name, processor state, breakpoints) quite big
save it in a .dbg file for fast reloading, returning to known position
debuggers can be controlled from user IO devices or even a second system
doesn't require going to the systems console or front panel
on target systems without user IO devices, such as embedded systems
use DMA from a second comp with debugger on it, gives a development system
if DMA access is coupled with a logic analyser for recording, gives ICE
also logic analyser on bus of a PC together with a debugger, exa Periscope
anec voyager monitor download and bit edit, not possible with front panel
Interactive Programming Systems
traditional compiled languages use a slow edit-compile-run-debug cycle
shell scripts are directly executed by an interpreter, no compiling
leads to faster edit-run-debug cycle
but at the price of slow program execution
for speeding up scripts use load time compiling, exa perl [Wall]
debuggers with a line assembler allow interactive programming and testing
but they are limited to assembly language, to working in machine instructions
interactive programming systems are interpreters for a HLL with commands for
editing, running, debugging, direct executing of language and OS commands
faster to use than editor/compiler/shell because no cycling between progr
also easier because no multiple command syntaxes and semantics to learn
enables programming by users, engineers and laboratory personnel
anec all-in-one already desired by users when PL/I was developed [Radin] p591
implementation as true interpreter vs precompiled/incremental compiler (fast)
editor semicompiles program line as soon as its entered
often this internal format is stored in files
exa MS Basic SAVE vs SAVEA, exa Emacs *.elc bytecode files
variables referenced by a dynamically generated name list
often no declaration required, variables generated on first writing
but reading undefined vars if no error message problems with defaults
for data structures dyn mem [Byte] 87-1p169 dyn mem, [Byte] 89-8p279 mem man
usually transparent alloc and dealloc (garbage collection) [ct] 90-4p286
sometimes ability of interpreter to evaluate runtime generated program code
this allows very powerfull programming techniques
modern interactive systems even dynamically compile native machine code
debuggers can link into the interpreters virtual machine and examine it
exa CL (debug ...) statement [Winston], QuickBasic and QuickC debuggers
anec Peter debug statement, set an instr for exec between every progr instr
line() and procedure() functions together with if and print
anec debugger output by 6502 emulator for testing Soft64
exa Basic
[Kurtz], [Byte] 89-10p268 25 years Basic, [Byte] 90-9p276 Kurtz micro Basic
exa Dartmouth Basic, HP Basic, MS Basic, CBM Basic, GW Basic, QuickBasic
by Kenemy and Kurtz from Dartmouth College for training programming
non-experts must be able to understand computers implications [Kurtz] p521
lecturing no good, hand on needed, like driving [Kurtz] p518 and p538
intended for teaching programming, using examples from students courses
derived from Fortran, simple syntax (only a few pages to explain [Baron])
efficiency vs simplicity, simplicity for user, not for implementor, like C
Language design ease of use first, also in Snobol [Griswold] p615
generally the computer shall do it, not the programmer, but not get in way
no explicit declarations, var generated on first reference
arrays auto dim with 10 is inflexible, better use index of first access
this would also have made the DIM statement superflouos
but problems with bugs when misspelling of a variable in source code
gen on write still sensible, but gen on read (with=0) no need, danger
automatic memory managment, garbage collection of unused string space
note gotos with line number target are bad, should be textual [Knuth] p128
then later because of simplicity also used for laboratory computers
exa HP 9830 Basic laborarory computer in 1973 [House] p412
then also good for rent-a-terminal systems because easy to learn [Levy]
then because of easyness and smallest memory requirements of all HLLs
it was chosen by HW hackers for their early 8 bit microcomputers [Levy]
exa Altair paper tape Basic, was Microsofts first microcomputer program
exa Apple Basic, sit down, switch on, type, like HP9830 [Byte] 84-12pA68
usually a ROM based interpreter with editor and load/save commands
tape or disk only for saving Basic code, no expensive disk drive required
for editing the program loaded in memory
on some systems only replace an entire program line, retype
on some line editor, call up program line with edit command, exa Dragon
but it is often quicker to retype the full correct line
on some others list block of lines to screen and then edit them, exa C64
full screen buffer edited, editing keys handled by kernal
screen split into logical lines, interpret edited line when enter
actual program editing only line replacement, special case of command
anec this is most likely also the PET editor so liked by Harris [Levy]
because of small memory size often weak error reporting
anec syntax error message so often that we called it syntax terror
Basic is often looked down at by mini computer hackers [Raymond] "BASIC"
I grew up on it, belong to few hackers who acknowledge to actually like it
actually I started with UCSD Pascal (Pascal, p-code, slow)
later at work colleagues showed me Basic, simpler, easier, switched
it is still the simplest language to use, exa copying C64 ROMs for Soft64
LUGS colleague joyous after finding portable basic on Linux CD-ROM
exa dBase, xBase
[Byte] 91-12p131 wither xBase
is a classic 4GL, saves code lines and work for its intended field of use
dBase is actually a microcomputer language, appeared first on CP/M
but is derived from a timesharing mini DB at NASA JPL [PCW] 91-2p101
no types or no explicit typing, no declaring of types as in Snobol [Griswold]
powerfull because symbols for variables are not bound when generated
data has type, symbol aquires it at assignment of data, same as in Lisp
but no error messages when unknown variables used
anec PlasmaDat m>n typo in DB def 1 day search for bug in my code
only after accidentally looking at DB def did I see the reason
anec CCW database num>nr thinko gave a system crash in dBase III
anec Key var in dBase IV not global like in dBase III, wrong value
also problems with closed architecture, incomplete language
test of a interact lang power is whether its CLI can be written in it
exa Lisp
[Winston], [Byte] 88-2p207, [Byte] 88-3p265 symboli, [ct] 85-7p38 and 85-8p36
Scheme dialect [Abelson], [Byte] 87-3p223, [Byte] 88-2p221, [ct] 87-11p130
[iX] 93-5p164 intro to Emacs M-Lisp
HLLs were designed as "easy" to learn for people with algebraic background
they also are very artificial and distanced from the machines structure
taking a "the computer shall do it" attitude may make HLLs easy to learn
but it prevents the user from using the processor at its full power
structured HLLs didnt't change this state of affaires
made it worse as complex syntax and semantics restrict expressiveness
expressions and statements as in other HLLs have limit [Backus] p43 and p71
Lisp was designed to be a hardware independent symbolic syntax (high level)
but still refers to general functioning of computer systems (low level)
it is therefore at same time low level and very high level [Brodie]
user directly types parse tree, originally upper level intended (M-expr)
but users found direct parse tree (S-expr) just as easy, no intrusing
orthogonal treatment of code and data (both are memory) as in Assembler
reading a variable or executing a function are equivalent [Raymond] "LISP"
because code and data equivalent easy to gen code at runtime and exec it
this is is a powerfull programming technique, often used in AI programs
anec Lisp first hidden from me behind FP lang and math exa in articles
obfuscated by functional, nonprocedural terminology
only after seeing that Lisp is simply a flexible procedural language
and FP only an independant design ideal did I manage to understand it
it was claim in [Abelson] that Lisp is procedural that unhid it for me
anec Lisp was in company of hard-to-read books [Winston] p7
no first class (built in) and second class (user defined) data types
all can be assigned, used as parameters, returned from a function
this leads to expandable language, language only defines a syntax
central memory alloc and dealloc system for code and global data
everything is stored in linked lists, cons+garbage collect
using lists and not strings [McCarthy] p175
advantage bigger than advantage from stepping from decimal to binary
instead of the usual HLL fixed allocated stack a push down list is used
return instr is pop frame into processor, gives continuations
anec this is the reason for MIT ITS users prefering the term
pdl for a stack [Raymond] "pdl (1)", [Raymond] "stack"
garbage collect free unused mem, no manual frees with large error potential
requires tracability of mem by system program external to users program
for this all memory datastructs must be interpretable
exa pointers identifiable for following and remapping
addresses and symbolic names replaced by dictionary structures
Lisp comes the nearest to machine code, because every list can be hooked
cons existing list after new part and assign new beginning to name
"Emacs is all hooks" in [Raymond] "hook" comes from its Lisp base
compiler based on environments, allways available on-line, for debugging
comparison of language elements with other HLLs
no complex grammars, flexibler, more predictable, more reliable
less elements, less rules, less to learn, less clashes
but at first tricky for people used to them (read too much into syntax)
easier parsing, easier compilers, recursive descent [Garfinkel2] p178
vs complicated context free grammar based C compilers, yacc
anec syntactic sugar and cancer of the semicolon [Abelson] p11
see also remarks about features vs power in systematics
less context dependancy, incremental compiling, no linking
soon as interactive operation appeared interesting for interact progr
similar uniformity also in APL (everything arrays), made at same time
also in Unix tools (text streams), Forth (words), Smalltalk (objects)
same also applies to incremental compiling and interactive use
higher semantic level than most HLLs, less details, less code lines
as code lines per hour is constant for a given programmer, faster work
this made Lisp the favourite language of hackers
it still partially is so (Emacs M-Lisp)
first implementation on IBM 70xx systems [McCarthy] p175 and p192, [Levy]
anec car/cdr from Assembler instruction set of that machine [Raymond] "cdr"
when PDP 6/10 were fast enough Lisp was ported on to them
there it aquired a interactive progr environment, editor, debug traps
but Lisps large processor load lead to desire for an optimised processor
CISC lead to idea of implement virtual CPU for HLL in microcode, EISC
macrocode specific to intended language or even to one specific compiler
allows language optimisation, but is also language dependant
multiple lang at same time, or even just one diff one, gives problems
as Lisp compilers are based on a virtual CPU, cons proc, put it into HW
cons coprocessor to the AI labs PDP 10, finished in 1975
later MIT, LMI and Symbolics Lisp Machines
[ct] 85-8p42 Symbolics, 32 bit CPU, microcoded, built from TTLs
stack (actually pdl) based processor with byte machine code
later special microproc [ct] 88-9p232 and 88-10p232 TI Microexplorer
also Alto Interlisp, 32 bit cons struct, byte machine code [Lampson] p306
paged virtual memory, cons memmap, incremental compiler for Lisp on top
similar in uniformity of code/data to a bare processor
but more powerful underlying structure, cons, instead of bytes
no memory smashes, leaking memory or similar problems
Lisp Machines need no processes, but result only one language usable
but as result only 1 language, no porting of SW in an other language
multitasking, but only coroutines (execution stacks), no processes
no user/system mode stacks, also because of pdl no signal/irq stack
no seperate device drivers, kernal, VMs, user env, HLL comp, user progs
instead loaded IO libs, input parser, online compiler and user routines
Lisp can be regarded as the Assembly notation of cons processor code
exa Forth
[Brodie], [Byte] 80-8p? in Tech librar, [Byte] 85-3p315 Pournelle meets Moore
written by Charles Moore (radio astronomer at NRAO) to be more productive
similar to Lisp but with far less resource requirements because static alloc
is a cross between Lisp and Assembler [Baron]
Lisp cons and autom garbage collect vs Forth dictionary and manual forget
this makes Forth weak in processing text, string const no problem
Lisp compiler environments vs Forth dictionaries
anec name Forth because supposed to be first fourth generation language
only 5 chars in name because file system limit of IBM 1130 [Baron] p190
anec Kay used a 1130 for Flex prototype no keyboard driven programming SW
only cards [Clark] p398, keyb input only 12 bit (punch card pattern?)
used on early micros as an alternative to Basic [PCW] 96-1p259 Jupiter Ace
either as language on existing kernal or DOS IO and disk system
or as Forth machine with Forth user IO and disk organised by 1k screens
allways implemented as an incremental compiler
usually on an virtual CPU, threaded code, but sometimes real machine code
takes 1.5..5 times as long as compiled code to run, very proc dependant
fast threading methods for the virtual CPU [Byte] 84-12p22 letters
multitasking, polyForth, xForth, 64th, special hardware [Byte] 85-3p363
anec in 85 I used Forth on my C64, gave up because no good compiler avail
in 95 found this article, containing ref to good Forth for that machine
similar to Lisp with Forth special HW is possible, NC4000 Forth processor
is a 16000 transistor RISC chip, made by the languages designer [Ting]
where Forth is the Assembly notation of its machine code
exactly same speed (6MHz) and addr range (64k*16) as Alto microcode proc
and was also used for generating colour video in software [Ting]
not all virtual CPUs are EISC, many language specific processors are RISC
exa NC4000 for Forth, Lilith for Modula, Transp for Occam, Hobbit for C
even in cases of a complex virtual CPU writing interpreter on RISC faster
when virtual machine is completely in cache they are equival to WISC
but RISC can also be used with code from a traditional compiler
anec SPARC came from a Lisp Machine project, tagged ADD [Dewar] p323
the register windows (virtual CPU allways has same reg number) and
the short addressing offsets [Dewar] p316 come from here
Text Editors
exa TX-0 Expensive Typewriter [Levy] p47, PDP 1 TECO [Levy] p95, [Salus] p36
source text edits required tape splicing, this was a lot of work, slow
it also resulted in splice rips while reading in
sometimes appearing with a load of part tapes and feeding them all was easier
this was possible as there was no operator who would complain of this
as interactive systems had a keyboard and a video display
read source in, display it on screen, edit in there and then punched out
editing features
editing granularity line vs character
new characters typed insert vs overwrite
word wrap insert CR on typing for too long, too many chars for line
then also leaving line by CR or arrow key, no reflow, orphaned line end
later no insert CR, only user typed chars, automatic reflowing
delete/move/copy (WS, NCE) vs copy/insert (X) vs cut/copy/paste (Alto, Mac)
editing position up/down, goto line, mouse point, search for strings/regexp
use search instead of cursor control or mouse, jump fast to position
exa Canon Cat [Byte] 87-10p121 leap keys, incremental search
short distance cursor fastest, mouse so long no scroll, but move hand
far jump search/leap forw/backw function only keys, few of them
same fast incremetal search in Emacs ctrl-s/r, is a great feature
repeated edits macro recording vs command procedures
for large, systematic edits (exa var renaming) search and replace, regexp
search and replace vs search and execute macro
allows search interactive and the replace macro, record while first edit
last action of the macro is "next search" then simply use
play (=replace and search), search (skip and search), none (abort)
search and replace as one combined statement/dialog vs 2 separate ones
non interactive search and replace facilities can be very dangerous
[Raymond] "search-and-destroy mode", [Pest] TECO introduces subtle errors
for better file viewing folding/outlining to reduce scrolling structured text
on the fly construction of views of document sys in NLS [Engelbart] p220
exa Emacs fancy diary using outline mode, Norberts wmf views mails
requires analysing document structure, predictable formats
file to edit loaded completely into memory limits max size
as assembler also limits max size use multiple source files and linker
file loaded partially, load in blocks, edit block, write, read next
exa TECO (from paper tapes!), CP/M ED
for stepping back in file first write rest, swap tape, reread, slow
later (requir disks) orig file plus all new text in temp file, data struct
write out new file at end of edit, exa Bravo, Emacs, Word [Lampson] p324
Windows
multiple buffers
desire to switch fastly between editing multiple files
without saving file, reloading it and refinding position
to keep clipboard contents alive for copying chunks of text between files
instead of saving part in a temp file, load target, insert file, del temp
leads to editors with multiple buffers, open command to make a new one
desire to do file managment without exiting editor
leads to editors with small shell duplicate in the editor, exa MS Word, WfW
desire to see multiple buffers at the same time
leads to splitting of the screen into virtual screens, windows
exa NLS in 1969/70 [Engelbart] p207/208
exa E multi-region windowing [Raymond] "WAITS", influenced Xerox PARC
exa Bravo [Lampson] p325, Emacs [Cameron]
exa Web browser frames allow subdivision of windows into pannels
also allow opening of additional browser windows
[Byte] 96-12p142 managing frames, [iX] 96-5p156 frames
anec [Libes] p189, [Salus] p155 vi no windows because crash
but see elvis and vim clones which added these and much more
screen division by time (switching) vs space (splitting) [Lampson] p315
desktop with windows floating on it vs parted screen
exa Smalltalk (win), Bravo/Emacs (parted), Cedar (tracks), Markup (popup)
overscan (full size of screen used) vs picture in screen (full raster used)
windows and multiple screens, dragging between screens
automatic window arangement [iX] 95-1p128
windows should only divide the screen (desktop+floating+subdivisions)
for moving/resizing/deleting use the mouse on the window border
the title bar belongs to the document displayed, not for moving/buttons
title bars none vs progr name vs document name vs both
window title not application-document but document-mode
put together in user defined row from machname, username, dir, prog, doc
in shell window display path as in prompt, anec bash problems with esc seq
Emacs status line with title vs GUI title and status 2 lines
iconified windows, anywhere on desktop vs in special icon region/win
iconified program on desktop vs NeXT icon dock vs Win95 taskbar
Widgets
[Byte] 87-11p265 GUIs compared, [Byte] 89-7p250 guide to GUIs
[Byte] 90-4p205 from TTY to VUI, [Byte] 91-6p124 GUIs compared
[PCW] 91-7p188 GUIs
buttons [Ross2] p97 light buttons (1960!), menus, scrollers, text edits
menus
pop up at window edge (Smalltalk) vs bar at top of screen (Macintosh) vs
in window (Windows, OS/2 1.x) vs floating on screen (NeXTstep) vs
pop up on left button (OS/2 2.x) vs pop up star shaped (Markup)
submenues that tear off and stay (Macintosh, NeXT, Sun OL)
pop up menues made only on use, can be context sensitive (OS/2)
desktop pop up menu like fvwm, Backmenu, OS/2, should be user definable
should contain system functions such as logout/shutdown, not in progman
scroll bars thumb size proportional vs constand (Windows)
arrows on thumb (OL), at ends (Macintosh/Windows), one end (NeXT), none (X)
behaviour drag tumb and paging (Macintosh/Windows), abs pos (NeXT, Emacs)
scroll text while dragging or not
editor rulers, tab bar, formatting, status at top vs bottom of window
widgets waste screen space
I got a big screen for seeing more data, not for wasting it on widgets
no title bars, you don't use them on paper documents
you recognize them from contents, and from remembering where you put them
pop up menues to save space
no icon bars (paper doesn't have them)
no resize widgets (no need, have you ever resized a piece of paper)
no scroll bars, use PgUp/Down keys or search function, you've got a keyboard
icons doesn't convey much information
dir full of Word docs all look same, all have the same icons
on Macintosh utility to display thumbnails of graphic files
what about a thumbnail of any document, recognize text arangement
a picture can say more than 1000 words, then they increase communicstion
a picture can say more than 100 words, even if these words are a table
but a picture can also say only one word or even less
icons needing undertitles have failed [Norman1] p20 BT instructions
anec mothers Sony Hi-8 Video stupid icon for dead Lithium battery
required us to find the manual to understand it, writing would be better
icons prevent fast scanning of filenames, because these are scattered
try sorting icons, alphabetical?, on size?, on colour?, on brightness?
attempts to process pictures [ct] 97-2p274 picture analysis search
icons are a regression back to age of hieroglyphs
2000 years ago humans progressed to alphabets, I have learned to read
anec Dennis Ritchie GUI intellect tone by Sonic t H [Garfinkel2] pXXXVII
GUIs have been designed for analphabets, I'm not one, I want efficiency
perhaps icons could be offered as one of many "languages" for analphabets
the configurable file "listing" in newer Mac Finders does this good
dialog boxes
[Byte] 93-8p203 elegant windows dialog boxes
exa open, save, search/replace, font/colour selectors
but also floating menus/toolbars/painttools
constantly show all open dialog boxes of all documents
vs only those of from currently activ document, saves clutter, exa NeXTstep
multiple selectors (font, colour) in a single panel
exa NeXT inspectors, OS/2 spiral notebooks, WinWord settings dialog
in one window swappable vs in multiple windows scattered vs both
one dialog shared between all docs of same type
vs each doc own one, can have diff position (over other doc!)
if separate dialogs (exa search) each own search string vs common
belong to a document vs to program, for each doc a set of positions
modal ones stop document vs entire program, NeXTstep is bad in this
dialogs get in the way, break flow of work, minimise use [Norman2] p34
are often the wrong thing [Norman1] p113 delete question box
users get used to pressing OK, only after notice wrong deletion
flood of windows/dialogs fill screen, lose overview [ct] 93-9p71
anec [Byte] 92-9p28 IBM ad for OS/2 Workframe/2 and Cset/2
window flooded, overloaded screen "software developer heaven"
has in 1 MDI window 9 open subwindows and 2 iconified windows
but they are acceptable in deviating cases, exa Plasma powder vs lot del
delete dialog with cancel as default good, but should uniform in a system
copy dialogs with multiple files on overwrite should offer choice of
Don't Overwrite, Overwrite, Overwrite All and Cancel copying
anec NeXT Don't, Ov, Can and Repeat tickbox for Ov All is unfriendly
anec NeXTstep find dialog keeps keyboard focus after successfull search
only way to get rid of that is search with return, but that hides box
GUI Libraries
writing GUI programs require many common routines to draw widgets
for this widget toolkit libraries were developed
many diff graphical elements with equivalent operations are simulated
similar behaviour (react to user input, display themselves)
use OO programming techniques, leads to OO frameworks for GUIs
program control with events
exa PlasmaDat events and objects description [Franklin4]
[Byte] 90-5p311 events, event driven operation
user HW input events (keyboard, mouse, timers, floppy insert)
Macintosh floppy insert event, no OK button in backup SW insert dialog
one Windows install progr also no OK, test insert with poll disk ready
GUI derived input events (buttons, menus, scrollers, other widgets)
GUI software events (app/window create/destroy/activate/deact/update)
update event, user program processes events, only internal change
separate update event triggers redraw, can be batched if many changes
system events (shutdown, kill task, user log out, power off)
anec Unix signals are also events, but only processor exeption oriented
with exeption of BSD Unix SIGIO user input signals for event oriented
building up initial objects of a program leads to UI builders, resources
these are the great rage among programming tools marketroids
but they can only create static objects, no runtime created ones, inflexible
see declarative programming for problems with this form of coding
anec Innoforms created from DB vs GUI design tools
they only make the viewer objects, not the documents behind them
[ct] 97-4p8 lead to surface-only progr style, no depth, saurier systems
they also lead to only data structures in memory
no ASCII source listing, lack of overview, transparency, bad documentation
they are not powerfull enough, not used by hackers
only "good" for beginners, for non programmers, for quick jobs
later when time to alter progr they have big problems, fraud is exposed
avoid using them at all or only use the for user demo prototyping
GUI build fail [Byte] 91-10ISEp74, RAD similar [Byte] 95-8p69, better 4GL
lots of different incompatible GUIs, all incompatible with each other
all have some good points, each has some bad ones
ideal would be the ability to chose your personal selection
result there are many incompatible GUIs and lots of functionality
[Byte] 91-11p221 portability and the GUI
despite extensibil no standard GUI API with plug in visual style libraries
classical example of closed software problems (incompatibility, waste, delay)
exa Xerox Alto Smalltalk
[Kay1] p254 state in 1977, [Byte] 85-5p151, [Byte] 90-10p138
[Byte] 91-8p108, [Byte] 91-8p108 10 years
[ct] 92-2p132, [ct] 95-11p324 8 year user experience, [iX] 95-2p114
[PCW] 89-3p180 EuroPARC Smalltalk, [PCW] 94-10p378
first system with a graphical user interface [Thacker], [Lampson]
developed to be incremental interactive system like Lisp [Lampson] p305
but based on code and data in objects, not in CONSes
anec the 80423 and 80286 segment systems were patterned after objects
in Smalltalk class and method defs are objects of classes class and method
the class object that defines classes is of class metaclass
Smalltalk object memory manag, even stack frames, as objects [Lampson] p305
Alto Smalltalk EISC processor, also Rekursiv for Lingo [Byte] 88-11p341
here again RISC has turned out to be better that EISC
anec SPARC from Lisp Machine from earlier SOAR (Smalltalk on a RISC)
these were most likely the RISC I and RISC II in [Dewar] p264
anec Mesa environm can't rival Lisp or Smalltalk flexibility [Lampson] p307
models and views
[Engelbart] p220 NLS separate universal client and servers
[Lampson] p320 decoupl interface and progr, configure, Bravo, Cedar, Emacs
2 independantly vertically scrollable section views of a buffer
Macintosh/Windows window split horiz, halves viewing hight
vs Emacs either cut frame in 2 windows or 2 use frames on X desktop
why not on Mac/Win with A3 monitor 2 tracks in a vertically split window
don't confuse with Excel vert split, both halves synchron vert scroll
if 2 views into one buffer show overlapping sections edits of this section
done in one viewer will change display in other viewer
when user presses a key have viewer convert cursor pos into buffer pos
then edit the buffer, then notify all viewers of buffer pos to redisp
these convert buffer pos into line pos, check if need to redisp
if so order data needed for redisp, use buffer pos for this
in Smalltalk for this model-view-controller (MVC) [ct] 93-9p174
for VC->M object pointer, for M->VC Changed method in Object class
controller (and its subclass) objests collect user input and call model
model objects have the file buffers, edit them, then call viewers
viewer objects update their part of the screen
this simplifies the program structure, only write MVC subclasses
for read-only viewing a file, simply forget to make controller object
for invisible processing forget both controller and viewer objects
one model class multiple view/ctrl classes, sibling classes
exa text editor, ruler bar, format bar/box/selector, even scroll bars
all different viewers/controllers for the same documents content
exa document as view/edit window, icon on desk, line in browser
all different viewers/controllers for a document file [Lampson] p321
exa fields in an open or save dialog box
are different viewers/controllers for a file path+name, anec Juerg VB
exa data visualisation different view types, view sections/directions
also allows invisible use of temporary documents (only a M, without V/Cs)
Macintosh or Windows have no MVC, they are not even object oriented
Macintosh MacApp and Windows MFC OO layers both don't have MVC either
NeXTstep Appkit at least is OO, has View and Responder hierarchy
but no classes for MVC, this is major omission
result of this no split viewer to text in Editor, no multi window mode
but in NeXTs DBkit and EOF libraries MVC has arrived [Byte] 95-4p175
but will it make it into OpenStep, is claimed to be a portable Appkit
Utah system has MVC, is base for the exitement [Byte] 95-4p30
Emacs has MVC, despite not being OO, multiple windows on one buffer possib
exa Apple Macintosh
[Byte] 89-6pMAC235 interface showing its age, [Byte] 89-8pMAC197 System 7.0
[Byte] 94-2p47 10 years Mac, [ct] 97-9p70 Mac OS 8, [ct] 98-11p24 iMac
Apple wanted to make a user friendly computer
Jef Raskin simple system based on Xerox Alto visit
later left Apple and made Information Apliance (IA), Swyftware, Canon Cat
Jobs complex system LISA (1983, $10000) based on Xerox Star visit
it was too expensive, users didn't go for it, failed
anec LISA file sys had new bit, when open file with it only Save Under
Macintosh sized down to barely realistic price level ($2500)
[PCW] 94-5p339 Macintosh development history
but as result insufficient hardware [Byte] 86-1p366 Macintosh gripes
first only 1 internal floppy drive, plug for 1 external
but you need 2 drives for copying, see Apple II, CP/M, IBM PC, Lisa
most uses got the 2nd external one, device laying around, more cost
one floppy only acceptable if also HD, first Macintoshes neither
anec on C64 I had only 1 drive to save costs, but for big copying 2
also C64 design w ROM Basic, RAM, disk only fast tape load/save
first only 128 kByte memory, expanded only after user complaints
anec Jobs "no one will want more than 128 kByte memory" [Byte] 92-6p101
in beginning underpowered, design errors [Raymond] "Macintoy"
own Alto/Smalltalk and Star/Cedar like GUI, first widely used GUI
for GUI elements ROM toolbox [Byte] 92-4p279 Macintosh programming
is a procedural library, not OO, also no standard OO language
claim integrated GUI vs grafted on GUIs on other systems isn't true
GUI routines are in toolbox, separate from MacOS "terminal" (Evnets+QD)
see D-line selection bit for addressing the 2 of them
and the Finder is a separate user level program
vs others (Windows/Unix) standard terminal (CON:/tty) and GUI "terminal"
on top of this TTY shell and GUI environment, also 2 layers
only difference is on the Mac all error handling and system admin in GUI
vs others often fall back onto TTY bases tools, but see NeTXstep
anec Apples own MacApp bypasses Macintosh toolbox, so much for integrated
why didn't they use Smalltalk, real OO, like on the Alto
this has wasted a lot of programmer time (and user time through bugs)
orig Macintosh 2..5 times Alto power, so should have been fast enough
at introduction (1984) revolutionary, showed users what to expect
since then not very much further development, Apple rested on its laurels
Windows slowly caught up [Byte] 94-12p10, where new Macintosh advantag
lots of "computer for the rest of us" evangelism, but no follow up on it
for the rest of us vs rest of them [Raymond] "for the rest of us"
anec 1984 video [PCW] 94-9p455, [PCW] 94-12p580
but ads did not show real advantage, no PC-like compatibility trouble
anec one good 3 page ad in [Byte] 92-8p17, but only brought twice
closed architecture, mainly deliberate
because "we know better" evangelism [Byte] 85-3p320 Pournelle Hackercon
same also with Apple III, our way, like a religion [Byte] 85-1p178 Woz
no clones allowed, not even with official OS licence, no spreading
nearest thing to a clone was the Outbound, when Apple had no notebook
selling ROMs with license but no HW around it would have
legitimized the Atari ST and the Amiga Mac emulator modules
anec Atari Stacy notebook with Mac emulator was first usable portab
this would have lead to an immediate clone market, more SW sales
result more SW for Macs inclusive the original, more for Apple
to do this Apple should have separated OS department from HW dept
like separating applications from OS, lead to Claris, big success
compare this with PCs, Microsoft seperate from IBM, wide spread
so everyone lost, Mac customers, Apple, PC cust, only IBM won from this
exa hurt customers because less choice [Byte] 91-12p285 no palmtop
anec the first palmtop was the Atari Portfolio (PC clone)
but at same time Atari also made its Stacy 68000 notebook
this ran a Mac emulator, could have also made Mac palmtop
problems of proprietary hardware
incompatible with everything else [Raymond] "proprietary"
problem of manufacturer having to make entire infrastructure
available component combinations are determined by manufacturer
closed to outsiders, leads to vendor lock in, customers misstrust it
result less customers, failure, becomes a self fullfilling prophesy
the Macintosh managed partly to escape this trap by being very superior
but never managed to become main system, unlike the far worse IBM PC
result Apple missed opportunity to establish Macintosh as major system
instead of innovation failed attempt to hinder others with lawyers
failed in end, and made lots of bad blood, wasted money for development
hackers view look and feel "copyright" as a threat to entire SW industry
because not only prevents dissemination of successfull user interfaces
fear of lawsuits make investment in writing any progr dangerous
copyright should only cover hard work, the programs implementation
it is the right to recover development costs that justifies copyright
no copyright for ideas [Levy] p330 or visuals
that the visuals are the key selling point should be irrelevant
especially annoying as the GUI was invented by Xerox, not Apple
court also saw this, Apple copyright only one-button mouse and trashcan
resulted in Apple having to pay lots of damages to Microsoft
anec "my house has windows, maybe mice in cellar, one day Apple will sue"
anec Macintosh not MacIntosh or McIntosh because trademark [Barry] p143
and too higher prices in the 1980s [PCW] 92-11p170 hindsight 84-11
anec 5 times I nearly bought an Apple, but in the end I was discouraged
II -> Dragon, SE30 -> 286er, IIFX -> NeXT, Newton -> HP, PPC -> Linux x86
anec Visicalc (which made Apple II success) nearly on DEC PDT 150
also discouraged by DEC, fiasco, lead to Apples success [Bell] p33
anec in days of the II Apple was a hackers company, failure worse for that
exa Microsoft Windows
[ct] 98-1p68 Windows 98, [ct] 98-7p60 Win98 final beta, [ct] 98-13p80 Win98
[PCW] 95-9p103 Windows 95, [PCW] 95-11p34 W95 hype bubble breaks
Microsofts for a long time successless attempt to bring a GUI to the PC
also a Smalltalk like GUI, first only window pannels (in 1.0)
only in 2.0 real floating windows but only one document per program
for multiple documents start multiple copies of program
gives 2 separate instances, mem sharing via mem manag
but only possible for programs written in medium memory model
in 3.0 multiple documents per program, but only w MDI interface, losing
MDI wastes lots of screen space when progr windows are not full screen
when full screen Macintosh-like but only w docs of that progr visible
when not full but doc using full progr win only one doc per progr vis
MDI confuses new users enormously and is more work for experienced ones
MDI defeates attempts to spread multiple docs onto dual screens
anec MDI was done so by Microsoft to avoid conflict with Apples lawyers
procedural languages and DLLs [Byte] 92-12p247 windows DLLs
for GUI DLL GDI.EXE for screen drawing, DLL USER.EXE for GUI elements
anec Windows icon hack [PCW] 92-11p451
anec it is widely believed that the Lisa/Macintosh lead to Windows as clone
this is wrong, Microsoft had a Star in 81
announced Windows in 1983, but 2 years late [Byte] 84-12p9
[PCW] 95-9p141, [CWS] 93-10-18pA5 Windows history
same Microsoft mouse is same age as Lisa
[Byte] 93-6p46 introduced in 83-6, [PCW] 93-7p230 tested in 83-7
this comes from writer of MS Word being writer of Bravo editor on Alto
but only available incomplete mid 85, is reason why people think clone
having no success until Windows 3.0 in 90 helped reinforce this view
late delivery and delays after announcements are common with Microsoft
exa Windows 1.0, 3.1 and 95 delays
exa common macro lang vs still separate VB, WB and VBA
[Byte] 87-6ASTp11 BG beyond macros, [Byte] 89-10p276 univ macros
exa OOFS shall appear in Cairo (1996/7) [Byte] 91-5p132
all data should be in an RDMBS [Byte] 93-1p97 Pournelle
a peek at OFS, an extension to NTFS [Byte] 95-8p52
or not any more, as Microsoft admits in [PCW] 96-6p34
this is endemic to way Microsoft works (or doesn't work) [ct] 92-6p36
Microsoft organisat structure [PCW] 94-5p456 Microserfs, [PCW] 96-4p116
many programmers + complex, badly defined interfaces = many bugs
constantly changing interfaces = not up to date programmers, worse
it is also used as a deliberate marketing tactic
[CWS] 93-10-18pA5, [Raymond] "brochureware", [Raymond] "FUD"
exa Apple Lisa Toolkit/32 [Byte] 84-12p124 using Object-Pascal
exa NeXTstep Appkit library using Objective-C[Byte] 97-6p65 Objective-C
NeXT founded by Jobs left Apple over Macintosh II further development fight
the machine repeated LISA failure because it was also too expensive
also repeated Macintosh 1 disk drive mistake with only 1 MO OD
no hard disk (not even for paging) or floppy disk (for backup/install)
anec paged so slow that NeXT retrofited all machines with 40 MB HDs
anec for copy swap disk, this is the Unix boot and swap disk
also repeated the mistake of going it own way, not compatible, closed
no X display server, no connectivity to other workstations
OS found niche as platform for custom application development/deployment
Objective-C has run time linking but failed to gain a large following
mainly because of commercially motivated distribution restrictions
NeXT and Sun are now defining OpenStep based on NeXTstep Appkit
OpenStep is only an API, NeXT implemented in Obj-C/DPS, Sun in C++/X
GNU is writing an implementation, GNUstep, on either X or DPS expanded X
[Uo] 95-11p88 Michlmayr interview
anec on NiCE NeXT server dir OpenStep with one subdir GNUstep
[ct] 97-3p126 Apple buys NeXT, technology merger in Rhapsody
[ct] 97-12p80 Apple Rhapsody
[ct] 98-11p26 Apple MacOS X, Carbon, Rhapsody with an MacOS like 3rd API
[ct] 99-9p116 MacOS X Server test
anec NS is the system that has changed the spelling of its name most often
exa Macintosh MacApp OO lib [Byte] 92-10p267 MacApp and TCL
using C++ [Byte] 88-8p215
C++ all important OO features are missing, overly complicated [Tittel]
obj are only fancy structs, runtime blocks of bytes [Garfinkel2] p206
static linking, no run time loading of new classes
C++ was originally not intend as OOP, just as improved C
OOP added later, but without leaving procedural linkage model
object types are static, compile time resolved, messages are calls
later virtual keyword, uses data structs, but built at compile time
C++ is better than C similarily as Smalltalk is better than Lisp
but Smalltalk is better then C++ similar as Lisp is better than C
C++ code explosion vs C [Garfinkel2] p215
C++ is to OO as sacharine is to sugar, looks like it, but no content
will lead to same problems with monolithic programs it supposed to solve
C++ has been called the Cobol of the 90s [Garfinkel2] p203
exa Macintosh TCL class library using C++ [Byte] 92-10p267 MacApp and TCL
exa Windows MFC OO lib using C++ [Byte] 90-8p133, [ct] 98-1p166 MFC C++ library
Documents
[Engelbart] p207 NLS integrades other data, postprocessed documents
[Byte] 92-12p143 document oriented interface
[Byte] 94-8p91 managing the new document, [Byte] 97-5p75 Doc Managment Systems
designing good Web pages
[Byte] 96-3p91, [Byte] 98-3p103 effective html forms
[Byte] 96-7p115 experience, [Byte] 98-5p103 effective HTML forms
[iX] 96-11p156, [ct] 96-7p188 Web presence, design, tools, juristics
[ct] 97-3p134 Web presence, p150 good page design, meta tags, char sets
[ct] 97-13p246 web page design, [ct] 98-22p132 WYSIWYG HTML editors
storing formatted/multifont/attribute/structured text in files, markup
formating codes, formated ASCII [PCW] 94-8p548, RTF, TeX, SGML, HTML
same storing graphics bitmaps (GIF, TIFF, PNG) and vectors (CGM, EPS)
early system NLS document formatting compiler 1975 [Engelbart] p211
TeX [Byte] 97-3p67
[ct] 97-15p274, [ct] 98-8p214 graphics in TeX, [ct] 99-5p224 TeX and LyX
HTML markup language for formatting text, embedding links, built the WWW
derived from ISOs SGML
[Byte 92-6p279, [Byte] 93-9p111, [Byte] 96-8p20, [Byte] 97-9p23 DHTML
[iX] 94-4p186 SGML vs ODA, [iX] 95-7p126 SGML, [PCW] 92-3p330
which came from the DODs CALS project [Byte] 92-6p279
is ASCII with embedded codes, writing [PCW] 96-1p246, 96-2p250 and 96-3p228
directly write HTML by hand vs HTML editor [PCW] 96-6p123 WebEdit
developing Web content, editor+server+browser [ct] 95-9p166
ASCII text stream with GUI power, like PostScript printing [Byte] 96-8p76
HTML expansions to increase expression abilities, Web attractiveness
expand HTML to use more data for more impressive results
[Byte] 95-3p30 versions, [Byte] 95-7p76 future
[Byte] 97-11p53 DHTML P1 [Byte] 97-12p61 DHTML P2 [Byte] 98-1p43 DHTML P3
[Byte] 98-3p58 improving the web HTML 4.0, XML, CSS, DHTML
[ct] 95-7p250 HTML 3.0, [ct] 97-3p72 Microsoft extensions for IE 4.0
[ct] 97-12p240 style sheets and incomplete implementations
[ct] 97-16p156 Netscape 4.0 DHTML and Javascript
[ct] 98-4p234 DHTML IE JScript, [ct] 98-8p208 HTML 4.0
[ct] 2000-6p244 XML formatting with XSL, [ct] 2002-2p172 XML
[ct] 2002-9p54 web link halflife, [ct] 2002-20p232 Mozilla and XUL
originally HTML (1.0?) had only 1 letter tags
nchor, old, eader, talic,