Understanding Computers, URL: http://neil.franklin.ch/Underst_Computers Author: Neil Franklin, neil@franklin.ch, Last Modification: 2007.11.14 To Do --- general [ct] from 2001-1 on record references --- 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 nothing open at the moment 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 --- 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 <- TTY Ctrl-H (8), *<- VT DEL (127), * VT 220 remove (Esc[3~) \] but other keyb use *<- Ctrl-H (8) and * DEL (127), Pericom switchable anec problem with Scheuber Versaterm wrong setting Forth uses variable set to BS or DEL to detect user pressing *<- key VT 220 cursor keys and numeric keypad normal vs application mode, EscO* Emacs configuration for using keypad in application mode [Cameron] p221 confusion of the escape seqences Esc[* and EscO* with Meta-[ amd Meta-O \] result that Emacs can not use Meta-[ or Meta-O on any system \] same only Ctrl-a..z because ASCII keyboards only send 0..31 no separate Ctrl-A..Z because Shift ignored when Ctrl, only 32 codes escape sequences leads to problems with multiple bytes per key exa XVT esc key code conversion problems of call vs flexibility of pipe vs Emacs sequence decoding with multiple keytables keyboards with keymatrix+diodes+PIO periodical scanning by IRQ driven program in monitor ROM or OS scan coordinates (0/0..7/7) converted to ASCII by scanning program exa Dragon [JamesM], C64 [Angerhausen] on systems with progr scanned displays connected scan routines, exa TK-51 keyboards with make/break codes circuits similar to above but with own microprocessor embedded in keyboard conversion of scan codes to ASCII by program in OS allows simple keyboard hardware and great encoding flexibility but conversion problems when errors in conversion tables exa PC-Outline ue bug, fathers PC AltGr 1 vs 7 bug, dead keys in XFree exa IBM PC keyboard hardware [Byte] 83-5p402 keyboard, XT interface [ct] 88-6p148 Knoepfchen Knoepfchen 3 different layouts, 5 different signalling methods first PC keyboard 10 Fn keys left and numeric pad right w integr cursor then AT keyboard with separate numeric and cursor control block todays MF-2 standard appeared only 1988 with the PS/2 anec MF-2 102nd key for <>\ 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, <--/Del as Delete/Remove NumLock as Gold, shift-Gray+ as missing keypad key some programs eval VT Find/Select as PC Home/End keys as in MS-DOS exa I have configured less and Emacs to use these keys in this way use LeftAlt key as Meta key, as in XTerm deliver it as Esc+char for 8 bit char sets exa Linux XFree and XTerm on IBM PC XFree uses PC Alt keys as Meta key, XTerm works like the Linux console coverting PC Home/End/<--/Delete to Find/Select/Delete/Remove either in X server with xmodmap or in XTerm with XTerm*translations at the moment I do <--/Del in xmodmap, Home/End in translations this because I want Del/Remove in Emacs but still want Home/End unlike the Linux console both XFree and XTerm do not work on dead keys despite keysymdef.h and XKeysymDB files having 2 diff names for them alphabet key layout variants [Norman1] p145 alphabetic, no learning advantage, but slow to use, is bad [Norman1] p147 QWERTY, from Sholes typewriter [Norman1] p145, or not [Byte] 91-7p303 [Raymond] "QWERTY", [Plauger2] p159 exa of history bug [Byte] 82-11p16 for fast typing, [Byte] 82-11p386 history for no jamming [Norman1] p146, later discovered high speed [Norman1] p147 but also all keys for word typewriter on top row [Norman1] p229 national variants, localisation, not much effect, but bad [Norman1] p229 SHRDLU, from Linotype [Norman1] p146, from hand printers letter bins from english letter frequency EATIONSHRDLU [Shea] p737 code breaking Dvorak [Byte] 82-11p16, [Norman1] p147 speed +10%, insufficient difference keyboards with small LCDs in key caps, soft remapping [Norman1] p151 they would alter display on press shift/ctrl/alt, like GUI soft keyboards such keyboards have been made, but are very expensive, no great advant ergonomic keyboards, handrests, nonlinear keys [PCW] 92-12p183 [PCW] 96-2p190 ergonomics and RSI, [ct] 2000-13p228 ergonomics generally ergonomic angeling for hand positions none vs fixed vs variable small price increase (fixed +100, variable +200) vs down time, injur cost funny shapes of ergonomic devices are result of human anatomy switches vs foil layers, resistance linear vs non, quiet vs click vs beep power key, soft power switch [Norman1] p135 allows system to enforce proper shutdown, unmount disks before power off Macintosh power key only for on, for off the shutdown menu must be used NeXT power key on and off, when pressed while running dialog box but it is there where command key block, is often hit accidently, is bad better put it in corner of keyboard like on Macintosh same also volume and brightness incr/decr keys hit accidentally are more work, less precice than analog controls on monitor/speaker HP 9000/715 and SGI Indigo [PCW] 93-9p457 soft power switches are on the machine case, are out of the way, this is even better but they are still soft, trigger proper system shutdown anec a soft power switch was already used on 198x-es Triple-X Unix box GUIs are based on using a mouse, but should let advanced users use keyboard exa on Alto keyboard there were no arrow or command keys [Thacker] p273 exa Macintosh first no arrow, command or function keys even when they appeared badly supported, only shift-arrow for selecting anec Kompal no problem on real VT 320 and DECterm (VT 340 emu on X) but problems on Macintosh running Versaterm, because of keyboard exa NeXT also no command or function, also no separate backspace and delete today still no text selection by shift-arrow, like vintage Macintosh no PageUp/Dn keys for scrolling, must be done with scroll bars anec NeXTs own Edit.app editor has Emacs key mode to circumvent this uses Ctrl-A/E for home/end, anec Ctrl-A misstyping uses Ctrl-V for PageDn but no Meta-V for Up, as there is no Meta key no function keys, SoftPC uses Cmd-0..9 for F-keys, Terminal.app none no moving between fields with Tab and shift-Tab, but in mail writer Tab if reason for this was to make them usable in text fields then why not use Command-Tab and shift-Command-Tab no Esc to cancel dialog boxes, some dialogs have Command-W, but not all also driver maps ^, ' and ` keys to chars whith codes above 127 result of this ^ fails in regexp search box and on grep command lines same `` for inserting stdout into Unix command lines fails, losing anec NeXT in advert great "usable by keyboard for experienced" claim was based on many menu points having Cmd-*, but Macintosh has Option-* Windows and OS/2 even have Alt-Menu + Menupoint, best of all cursors are required for typing on to video screens shape underline, block, vertical bar, steady/blinking, user configurable GUI vertical bars badly visible, I keep on having to search for them keyboads are ideal for collecting dirt, failing, even shorting power supply to prevent this clean them regularily [Byte] 90-12p73 Pournelle A20 crash use running warm water (shower) and rub, no soap or similar dry with cool hair dryer, check temperature by going over hand anec my DTK has taken 5 washings, only label blanked, office Cherry drowned chord keyboards, keysets [Licklider2] p119, [Engelbart] p200 (1964-8!), [Thacker] p273 not popular [Norman1] p150 no info on keys, all in head, also no interleaving [Byte] 82-11p5, [Byte] 88-12p248 NLS [PCW] 93-6p236 Twiddler, [PCW] 93-9p235 Microwriter, demise because Managment [PCW] 93-10p166 JPL Data Egg portable data recording device joysticks, joypads and paddles, other game controls [Forster] exa PDP 1 for Spacewar 3 switches and fire button [Levy] p64 exa Apple II 4 paddles or as 2 analog joysticks, 4*NE555 [Byte] 84-12pA71 exa C64 joyst 4 switch (Atari), paddles cap load time [Angerhausen], IBM PC continuous position reading by program, not just reporting single movements button/switch state as 0(off)/1(on) and 01(end-a)/00(middle)/10(end-b) shape as pushbutton, mechanically held switch, trigger autofire simulated press/release of button/trigger, full/burst/off, speed joystick 2 directions, each 3 or n postions, plus addit fire buttons handle shape bat or ball (button on base) vs grip (button top/trigger) can be used for left/reight and forward/backward (or faster/slower) pair of single direction joysticks for car steering plus power/brake or even full proper shape steering wheel and pedal box pair of levers for tank/bulldozer sides, or for train power/brake pair of joysticks for flying or RC or joke/stick+thrust+rudderpedals or even full proper shape joystick+thruststick+controlpedals these with many trigger buttons and coolie hat for view direction pair of joysticks for mechas move 4dir/rotate/duck/jump, 1 each leg joystick digital vs analog position recording digital simple "there or not", precise timing, good for shoot-em-up analog "exactly here", good for flight simulator [PCW] 96-5p323 digital presses leaf switches vs microswitches vs break lightbeam joypad buttons on rubber pad, small keyboard with game-friendly layout analog input paddle vs spinner, pos in limited range vs motion infinite range paddles use pots, resistor, time for capacitor charge [Angerhausen] SID position usually 0..255, lever position, analog joystick (2 position) exa DB9 200..200k from 5V, in C64 1800pf and SID 2* GND count to 2.5V exa Apple ][ game 0..150k from 5V, software reset and time up to 3ms exa Dragon 32 6bit DAC and 4-in analog Mux and 393 Op-Amp to PIO pin in joyst mechanism pin through 2 tracks vs 2 barrels spinners 2bit gray coded angle, but also used for MS sidewinder joystick no support on GUI machines today, because Alto did not have one dropped by Windows despite the IBM PC hardware supporting them only added back very late, to promote windows as gaming system was once standard on parallel/serial/game card dropped because GUI doesn't use it and cost cutting today only if built into sound card, because that also used for DOS games light pens and touch screens [Ross2] p65 Room 222 Cape Cod light gun anec Whirlwind scope input program (1953) [Ross2] p68 photo cell and scope [Ross2] p97 light pencil to throw light buttons [Licklider2] p119 light pen and light gun, touch screens [Byte] 92-7p287 touch screens problem with arm going tired, cramped muscels [Raymond] "gorilla arm" not actually fault of pen but of combination pen + vertical display surface switching keyboard/pen, pen on finger [Licklider2] p120 today these are mainly used for public data kiosks, simple, short usage time mice [Licklider2] p119, [Engelbart] p195 (1964-8!) [Byte] 90-11p395 evolution, mechanisms, [Byte] 93-3p180IS3 Honeywell mouse [Byte] 93-6p46 pictures wood and MS mice, [Byte] 95-9p112 Mouse System 1982 [PCW] 93-2p530 Honeywell mouse, [PCW] 95-2p338 HP Omnibook pop out mouse buttons 1, 2 or 3 [Card] p504, [Lampson] p317, [Norman1] p182 orig Alto mouse 3 button, also on Sun, SGI, Mouse Systems, Logitech buttons used for text select, insert/paste, popup menu in scroll bars down to pos, absolute/drag pos, up to pos then Apple 1 button dumbed down [Raymond] "dumbed down" using pull down menu for cut/paste commands is slow [Card] p525 anec they actually patented the 1 button mouse is with the trashcan the only thing the copyright court case left them then Microsoft and NeXT 2 button, half way 2nd button first not used on either system, later for popup menus exa OS/2 popup menu of window under cursor, NeXT of active window 3rd button of newer Logitech used for common commands [PCW] 96-6p30 Microsoft drag and drop to allow editing without menu or 3 buttons one of best things Microsoft did for GUIs was drap&drop editing in Word but X has had menu-less select&paste editing since its beginning also 3rd analogue dimension, MS thumb wheel for vertical scrolling buttons down/up vs pressure measuring encoders mechanical (NLS, Microsoft), optical (Sun), optomechanic (Logitech) video camera (Microsoft) [ct] 2000-2p80 connect special port (PC), serial port (PC), keyboard (NeXT), ADB (Macintosh) dual mice for pointing and scrolling (or mouse and trackball) mouse moves an manipulator/arrow/"hand", not direct an actual object allows replacing various hardware controls w pictures and "grab in screen" mouse pointers often badly visible, config, colour, hair cross as in SR CAD naming text/mouse cursor/pointer vs caret/cursor, I will use the former anec NeXT mouse pointer image doesn't automatically follow DPS windows after a mouse select and Command-C cut pointer over scroller stays text anec on Prime Westward graphics terminal w ana joystick and crosshair mouse is very good for direct manipulation (drag & drop) style work many attempt to replace it, but it is as efficient as direct pointing mouse vs other technologies, speed/errors [Card] p495 mouse is a Fitts's Law device [Thacker] p272, [Card] p496 parallaxis offset critic [Licklider2] p119 but the on-screen pointer has no offset, the actual device no abs posit joystick vs mouse, joystick good for control games (has a handle to grip) but mouse better for pointing/selecting stuff, but SR CAD analog joystick track* vs mouse, mouse ist faster for selecting, analog hand movement vs track* only differential movements, increment pointer position pen vs mouse, mouse has better parallaxis (mouse cursor is on screen) pen is only good when direct on display, actually superiour for drawing trackballs, trackkey (J-Key), trackpoints, trackpads [Byte] 91-2p223 trackball, trackpad, touchscreen, Isopoint, key joystick [ct] 97-12p64 MS force feedback joystick, [ct] 98-7p74 Trackman marble [PCW] 95-10p27 Logitech marble technology these are mainly of interest for portables because no table space is required but they are all inferiour to mice for normal desktop work trackball needs 2nd hand for buttons as dificult to hold and move vs mouse also buttons move with mouse hand, can use both at same time portable pointing devices are a question of taste [Byte] 95-10p150 but HP Omnibook popout mouse called dubious achievement [Byte] 95-10p161 actually I prefer the popout mouse to any af the track* devices anec thumball (trackball in joyst) even usable in aircraft [Byte] 88-9p243 graphics tablets, pen pads, handwriting [Licklider2] p120 stylus pad that is also display [Byte] 90-7p243, [Byte] 91-2p211 pen, Go, [Byte] 91-4p207 neuro handwriting [Byte] 92-4p10 is world ready for pen, [Byte] 92-6p159 PenWin, gestures [Byte] 92-7p128 PC gets more person, Newton [Byte] 92-9p159 outlook for pen computing, [Byte] 93-1p251 digitiser tablet [Byte] 93-10p99 pen and voice, [Byte] 93-10p105 pen computing [ct] 92-5p212 pen with fuzzy, [ct] 93-11p248 handwriting recognition [ct] 97-7p68 Newton 2000, [ct] 98-6p330 programming Newton [iX] 93-10p40 Newton [PCW] 93-6p448 Newton, Amstrad Penpad, [PCW] 94-4p262 pen troubles [PCW] 96-2p72 Newton blues, [PCW] 95-12p23 HP OmniGo and Grafiti allow precise recognizing of fine pen movements very good for entering sketches or handwriting, widely used in CAD digitizer tablets, back projection screens or flat screens [Byte] 93-1p251 encoding position, direction, touch/notouch vs force recording separate devices vs overlaid over screen, parallaxis problem alternative to keyboards is handwriting recognition and editing by proofreader marks [Licklider2] p121 but problems with high processor requirements, specially in palmtops and problems with low recognition reliability, sometimes called scribbletops [Byte] 92-9p159 the SW for pens not there yet, [PCW] 94-4p262 Apple insisted on handwriting for Newton PDA, main problem with it handwriting claimed to be needed because managers won't use a keyboard is still not fully developed, unreliable, high processor requirements today only usable in vertical markets, data collection, form automation and handwriting is slow even if fully recognized typewriters were invented for faster writing, keyb for Newton [PCW] 96-2p57 [Engelbart] p234 handwriting too slow, same with speech recognition pen systems may beat keyboards for japanese, but not for alphabet [Byte] 96-9p40IS15 pen for Chinese text entry scanners and digital cameras ability to display bitmap images leads to desire to insert photos these must be entered into computer somehow, make 2-dimensio array of pixel scanners mechanical shape flatbed, document [PCW] 96-3p179, [PCW] 95-7p460 [Byte] 92-6p347 colour scanners, [PCW] 96-9p129 scanners function handheld and dia slides barcode scanners, 1 line with inprecise alignment but also later 2D pixel fields for photo sensor based scanners and also RFIF for radio scanning [ct] 2002-9p86 barcode and transponder for connecting