Table of
Contents for MMURTL V1.0
(PDF version)
The MMURTL V1.0 PDF file uses bookmarks as a table
of contents. When you open the bookmarks for viewing (F5 or Window Menu, Open
Bookmarks) in Abobe Acrobat, the same items are listed as shown below and you
may jump directly to them by clicking on them with your mouse.We have provided
this file to help you if you desire to leave the PDF file open in full screen
or full page width. The page numbers match the PFD file page numbers. Simply save
or print this and you’re all set!
CHAPTER
1, INTRODUCTION...................................... 3
OVERVIEW.................................................... 3
WHAT THIS BOOK IS
ABOUT..................................... 4
WHO SHOULD USE THIS
BOOK.................................... 5
MY BASIC DESIGN
GOALS (YOURS MAY VARY)...................... 6
A BRIEF DESCRIPTION
OF MMURTL............................... 7
USES FOR
MMURTL............................................. 9
SIMILARITIES TO
OTHER OPERATING SYSTEMS.................... 10
HARDWARE
REQUIREMENTS...................................... 10
CHAPTER
2, GENERAL DISCUSSION AND BACKGROUND................ 11
WHERE DOES ONE
BEGIN?...................................... 11
YOU ARE WHERE YOU
WERE WHEN................................ 12
THE DEVELOPMENT
PLATFORM AND THE TOOLS..................... 13
THE CHICKEN AND THE
EGG.................................... 13
EARLY HARDWARE
INVESTIGATION............................... 15
THE REAL TASK AT
HAND (PUN INTENDED)....................... 17
A STARTING
POINT........................................... 17
THE CRITICAL
PATH.......................................... 17
WORKING
ATTITUDE........................................... 18
CHAPTER
3, THE TASKING MODEL................................ 19
TERMS WE SHOULD
AGREE ON................................... 19
RESOURCE
MANAGEMENT........................................ 20
TASK
MANAGEMENT............................................ 21
SINGLE VS. MULTI
USER...................................... 21
THE HARDWARE
STATE......................................... 22
THE SOFTWARE
STATE......................................... 22
CPU
TIME................................................... 23
SINGLE
TASKING............................................. 23
MULTITASKING............................................... 23
COOPERATIVE
MULTITASKING................................... 24
PREEMPTIVE
MULTITASKING.................................... 24
TASK
SCHEDULING............................................ 25
WHO, WHEN, AND HOW
LONG?................................... 25
SCHEDULING
TECHNIQUES...................................... 26
TIME
SLICING............................................. 26
SIMPLE COOPERATIVE
QUEUING............................... 27
PRIORITIZED
COOPERATIVE SCHEDULING....................... 27
VARIABLE TIME
SLICING.................................... 28
OTHER SCHEDULING
FACTORS................................... 28
MIXED SCHEDULING
TECHNIQUES................................ 29
FULLY TIME SLICED,
SOME COOPERATION...................... 29
TIME SLICED, MORE
COOPERATIVE............................ 29
PRIMARILY
COOPERATIVE, LIMITED TIME SLICING.............. 30
PRIMARILY
COOPERATIVE, MORE TIME SLICING................. 30
THE TASKING MODEL I
CHOSE.................................. 30
INTERRUPT
HANDLING......................................... 32
CHAPTER
4, INTERPROCESS COMMUNICATIONS...................... 33
INTRODUCTION............................................... 33
MESSAGING AND
TASKS........................................ 34
SYNCHRONIZATION............................................ 34
SEMAPHORES................................................. 35
PIPES...................................................... 36
MESSAGES................................................... 36
SEND AND
WAIT............................................ 36
REQUEST()................................................ 41
RESPOND()................................................ 43
LINK
BLOCKS.............................................. 43
REENTRANCY
ISSUES.......................................... 44
INTERRUPT
LATENCY.......................................... 45
MEMORY MANAGEMENT
ISSUES................................... 46
CHAPTER
5, MEMORY MANAGEMENT................................ 47
INTRODUCTION............................................... 47
BASIC
TERMS................................................ 47
MEMORY
MODEL............................................... 48
SIMPLE FLAT
MEMORY....................................... 48
PAGED FLAT
MEMORY........................................ 49
DEMAND-PAGED FLAT MEMORY.................................
50
VIRTUAL PAGED
MEMORY..................................... 51
DEMAND PAGED
VIRTUAL MEMORY.............................. 53
DEMAND-PAGED
MEMORY MANAGEMENT........................... 53
SEGMENTED
MEMORY......................................... 53
MEMORY
MANAGEMENT.......................................... 54
TRACKING LINEAR
MEMORY ALLOCATION.......................... 55
BASIC MEMORY
ALLOCATION UNIT............................... 55
LINKED LIST MANAGEMENT.....................................
55
MEMORY MANAGEMENT
WITH TABLES.............................. 60
TRACKING PHYSICAL
MEMORY................................... 60
INITIALIZATION OF
MEMORY MANAGEMENT........................ 60
MEMORY
PROTECTION.......................................... 62
AN INTEL BASED
MEMORY MANAGEMENT IMPLEMENTATION............ 62
A FEW MORE WORDS
ON SEGMENTATION......................... 61
HOW MMURTL USES
PAGING..................................... 63
PAGE TABLES (PTS)........................................
62
PAGE DIRECTORIES
(PDS)................................... 62
THE MEMORY
MAP........................................... 63
CHAPTER
6, HARDWARE INTERFACE............................... 72
HARDWARE
ISOLATION......................................... 72
THE
CPU.................................................... 73
THE BUS
STRUCTURE.......................................... 74
SERIAL
I/O................................................. 74
PARALLEL I/O...............................................
75
BLOCK-ORIENTED
DEVICES..................................... 76
KEYBOARD................................................... 76
VIDEO...................................................... 77
DIRECT MEMORY ACCESS
(DMA)................................. 79
TIMERS..................................................... 87
PRIORITY INTERRUPT
CONTROLLER UNIT (PICU).................. 88
CHAPTER
7, OS INITIALIZATION................................ 89
BOOT ROM...................................................
89
THE BOOT
SECTOR............................................ 90
OPERATING SYSTEM
BOOT IMAGE............................... 100
OTHER BOOT
OPTIONS........................................ 100
BASIC HARDWARE
INITIALIZATION............................. 100
STATIC TABLES AND
STRUCTURES.............................. 101
INITIALIZATION OF
TASK MANAGEMENT......................... 101
INITIALIZATION OF
MEMORY.................................. 102
DYNAMIC TABLES AND
STRUCTURES............................. 103
CHAPTER
8, PROGRAMMING INTERFACES.......................... 104
APPLICATION
PROGRAMMING INTERFACE......................... 104
MECHANICAL
DETAILS........................................ 106
PORTABILITY
CONSIDERATIONS................................ 107
ERROR HANDLING AND
REPORTING.............................. 107
SYSTEMS PROGRAMMING
INTERFACE............................. 108
INTERNAL
COOPERATION...................................... 108
DEVICE DRIVER INTERFACES..................................
108
A DEVICE-DRIVER
INTERFACE EXAMPLE......................... 109
ANNOUNCING THE
DRIVER TO THE OS......................... 110
A CALL TO THE
DRIVER.................................... 112
CHAPTER
9, APPLICATION PROGRAMMING......................... 114
INTRODUCTION.............................................. 114
TERMINOLOGY............................................... 114
UNDERSTANDING 32-BIT
SOFTWARE............................. 114
TABLE 9.1 - MEMORY
ALIGNMENT............................ 115
OPERATING SYSTEM
CALLING CONVENTIONS...................... 115
STACK
USAGE............................................... 116
MEMORY
MANAGEMENT......................................... 116
TABLE 9.2 - BASIC
MEMORY MAP............................ 117
OPERATING SYSTEM
PROTECTION............................... 118
APPLICATION
MESSAGING..................................... 119
STARTING A NEW
THREAD..................................... 119
JOB CONTROL BLOCK.........................................
120
BASIC
KEYBOARD............................................ 121
BASIC
VIDEO............................................... 122
TABLE 9.3 -
FOREGROUND COLORS (LOW NIBBLE).............. 122
TABLE 9.4 -
BACKGROUND COLORS (HIGH NIBBLE)............. 123
TERMINATING YOUR
APPLICATION.............................. 123
REPLACING YOUR
APPLICATION................................ 124
CHAPTER
10, SYSTEMS PROGRAMMING............................ 125
INTRODUCTION..............................................
125
WRITING
MESSAGE-BASED SYSTEM SERVICES..................... 125
INITIALIZING YOUR
SYSTEM SERVICE.......................... 125
A SIMPLE SYSTEM
SERVICE EXAMPLE........................... 126
LISTING 10.1 - A
SYSTEM SERVICE......................... 126
THE REQUEST
BLOCK......................................... 127
ITEMS IN THE REQUEST
BLOCK................................ 127
THE SERVICE
CODE.......................................... 128
CALLER INFORMATION
IN A REQUEST........................... 128
ASYNCHRONOUS
SERVICES..................................... 129
SYSTEM SERVICE ERROR
HANDLING............................. 129
WRITING DEVICE
DRIVERS.................................... 130
DEVICE DRIVER
THEORY...................................... 131
BUILDING DEVICE
DRIVERS................................... 131
HOW CALLERS REACH
YOUR DRIVER............................. 132
DEVICE DRIVER SETUP
AND INSTALLATION...................... 132
SYSTEM RESOURCES FOR
DEVICE DRIVERS....................... 133
INTERRUPTS.............................................. 133
DIRECT MEMORY
ACCESS DEVICE (DMA)....................... 134
TIMER
FACILITIES........................................ 134
MESSAGE FACILITIES
FOR DEVICE DRIVERS..................... 134
DETAILED DEVICE
INTERFACE SPECIFICATION................... 135
DEVICE CONTROL
BLOCK SETUP AND USE...................... 135
TABLE 10.1-.
DEVICE CONTROL BLOCK DEFINITION............ 135
STANDARD DEVICE CALL
DEFINITIONS.......................... 137
DEVICEOP FUNCTION
IMPLEMENTATION........................ 138
DEVICESTAT
FUNCTION IMPLEMENTATION...................... 139
DEVICEINIT
FUNCTION IMPLEMENTATION...................... 139
INITIALIZING YOUR
DRIVER.................................. 140
OS FUNCTIONS FOR
DEVICE DRIVERS........................... 141
STANDARD DEVICE
ERROR CODES............................... 141
CHAPTER
11, THE MONITOR PROGRAM............................ 142
INTRODUCTION..............................................
142
ACTIVE JOB (VIDEO
& KEYBOARD)............................. 142
INITIAL
JOBS.............................................. 142
LISTING 11.1.
SAMPLE INITIAL.JOB FILE................... 143
MONITOR FUNCTION
KEYS..................................... 143
TABLE 11.1.
MONITOR FUNCTION KEYS....................... 143
MONITOR PROGRAM
THEORY.................................... 143
PERFORMANCE
MONITORING.................................... 144
MONITOR SOURCE
LISTING.................................... 145
LISTING
11.2.MONITOR PROGRAM SOURCE LISTING............. 145
CHAPTER
12, DEBUGGER....................................... 162
INTRODUCTION.............................................. 162
USING THE
DEBUGGER........................................ 162
ENTERING THE
DEBUGGER................................... 162
EXITING THE
DEBUGGER.................................... 162
DEBUGGER
DISPLAY........................................ 163
DEBUGGER FUNCTION
KEYS.................................. 163
DEBUGGING YOUR
APPLICATION................................ 165
DEBUGGER
THEORY........................................... 165
TABLE
12.1.PROCESSOR EXCEPTIONS......................... 167
CHAPTER
13, KEYBOARD SERVICE............................... 169
INTRODUCTION.............................................. 169
AVAILABLE
SERVICES........................................ 170
TABLE
13.1.AVAILABLE KEYBOARD SERVICES.................. 170
READ KEYBOARD...........................................
170
NOTIFY ON GLOBAL
KEYS................................... 171
CANCEL NOTIFY ON
GLOBAL KEYS............................ 171
ASSIGN
KEYBOARD......................................... 171
KEY CODES AND
STATUS...................................... 172
ALPHA-NUMERIC KEY
VALUES................................ 172
TABLE 13.2 -
.SHIFT STATE BITS.......................... 172
LOCK-STATE BYTE
(THIRD BYTE)............................ 173
TABLE 13.3 - LOCK
STATE BITS............................ 173
NUMERIC PAD
INDICATOR................................... 173
KEY
CODES................................................. 174
TABLE 13.4 - .KEYS
VALUES............................... 174
FUNCTION STRIP KEY
CODES................................ 175
TABLE 13.5 -
FUNCTION KEY STRIP CODES................... 175
NUMERIC PAD KEY
CODES................................... 176
TABLE 13.6 -
NUMERIC PAD KEY CODES...................... 176
CURSOR, EDIT, AND
SPECIAL PAD KEY CODES................. 176
13.7.ADDITIONAL
KEY CODES............................... 176
YOUR KEYBOARD
IMPLEMENTATION.............................. 177
CHAPTER
14, THE FILE SYSTEM SERVICE........................ 178
INTRODUCTION.............................................. 178
FILE
SPECIFICATIONS....................................... 178
NETWORK FILE REQUEST
ROUTING.............................. 178
FILE
HANDLES.............................................. 179
FILE OPEN MODES...........................................
179
FILE ACCESS
TYPE.......................................... 179
BLOCK
MODE.............................................. 179
STREAM
MODE............................................. 180
LOGICAL FILE
ADDRESS...................................... 180
FILE SYSTEM
REQUESTS...................................... 181
LISTING 14.1 -
OPENFILE REQUEST IN C.................... 181
TABLE 14.1 - FILE
SYSTEM SERVICE CODES.................. 181
PROCEDURAL INTERFACES.....................................
182
DEVICE ACCESS
THROUGH THE FILE SYSTEM..................... 182
TABLE 14.2 -
DEVICE STREAM ACCESS....................... 182
FILE SYSTEM
FUNCTIONS IN DETAIL........................... 183
OPENFILE................................................ 183
CLOSEFILE............................................... 183
READBLOCK............................................... 184
WRITEBLOCK.............................................. 185
READBYTES...............................................
185
WRITEBYTES.............................................. 186
GETFILELFA.............................................. 187
SETFILELFA.............................................. 187
GETFILESIZE............................................. 188
SETFILESIZE............................................. 188
CREATEFILE.............................................. 189
RENAMEFILE.............................................. 190
DELETEFILE..............................................
190
CREATEDIRECTORY......................................... 191
DELETEDIRECTORY......................................... 191
GETDIRSECTOR............................................ 192
FILE SYSTEM
THEORY........................................ 193
INTERNAL FILE
SYSTEM STRUCTURES......................... 193
FILE CONTROL
BLOCKS................................... 193
FILE USER
BLOCKS...................................... 193
FAT BUFFERS...........................................
194
FILE
OPERATIONS......................................... 195
READ.................................................. 195
WRITE................................................. 195
CLOSE................................................. 195
CHAPTER
15, API SPECIFICATION.............................. 197
INTRODUCTION.............................................. 197
PUBLIC
CALLS.............................................. 197
PARAMETERS TO
CALLS (ARGS).............................. 197
TABLE 15.1 -
SIZE AND TYPE PREFIXES................... 197
TABLE 15.2 -
ADDITIONAL PREFIXES...................... 198
TABLE1 5.3 -
COMPOUND PREFIXES........................ 198
ALPHABETICAL CALL
LISTING................................. 202
ADDCALLGATE............................................. 202
ADDIDTGATE.............................................. 202
ALARM................................................... 203
ALIASMEM................................................
203
ALLOCDMAPAGE............................................ 204
ALLOCEXCH............................................... 204
ALLOCOSPAGE............................................. 204
ALLOCPAGE............................................... 205
BEEP.................................................... 205
CHAIN................................................... 205
CHECKMSG................................................ 206
CLRSCR..................................................
206
COMPARE................................................. 207
COMPARENCS.............................................. 207
COPYDATA................................................ 207
COPYDATAR............................................... 207
DEALIASMEM.............................................. 208
DEALLOCEXCH............................................. 208
DEALLOCPAGE............................................. 208
DEVICEINIT..............................................
208
DEVICEOP................................................ 209
DEVICESTAT.............................................. 209
DMASETUP................................................ 210
FILLDATA................................................ 211
GETCMDLINE.............................................. 212
GETCMOSTIME............................................. 212
GETCMOSDATE............................................. 212
GETDMACOUNT.............................................
213
GETEXITJOB.............................................. 213
GETIRQVECTOR............................................ 213
GETJOBNUM............................................... 214
GETNORMVID.............................................. 214
GETPATH................................................. 214
GETPHYADD............................................... 215
GETPJCB................................................. 215
GETSYSIN................................................
215
GETSYSOUT............................................... 215
GETTIMERTICK............................................ 216
GETTSSEXCH.............................................. 216
GETUSERNAME............................................. 216
GETVIDCHAR.............................................. 217
GETVIDOWNER............................................. 217
GETXY................................................... 217
INBYTE..................................................
217
INDWORD................................................. 217
INWORD.................................................. 218
INWORDS................................................. 218
INITDEVDR............................................... 218
ISENDMSG................................................ 219
KILLALARM............................................... 220
LOADNEWJOB.............................................. 220
MASKIRQ.................................................
220
MICRODELAY.............................................. 220
MOVEREQUEST............................................. 221
NEWTASK................................................. 221
OUTBYTE................................................. 222
OUTDWORD................................................ 222
OUTWORD................................................. 222
PUTVIDATTRS............................................. 223
PUTVIDCHARS.............................................
223
QUERYPAGES.............................................. 224
READCMOS................................................ 224
READKBD................................................. 224
REGISTERSVC............................................. 224
REQUEST................................................. 225
RESPOND................................................. 226
SCROLLVID............................................... 226
SENDMSG.................................................
227
SETCMDLINE.............................................. 227
SETEXITJOB.............................................. 228
SETIRQVECTOR............................................ 229
TABLE 15.4 -
HARDWARE IRQS............................ 230
SETJOBNAME.............................................. 230
SETNORMVID.............................................. 231
SETPATH................................................. 231
SETPRIORITY.............................................
231
SETSYSIN................................................ 232
SETSYSOUT............................................... 232
SETUSERNAME............................................. 232
SETVIDOWNER............................................. 232
SETXY................................................... 233
SLEEP................................................... 233
SPAWNTASK............................................... 233
TONE....................................................
234
TTYOUT.................................................. 234
UNMASKIRQ............................................... 234
UNREGISTERSVC........................................... 235
WAITMSG................................................. 236
CHAPTER
16, MMURTL SAMPLE SOFTWARE......................... 237
INTRODUCTION.............................................. 237
COMMAND LINE
INTERPRETER (CLI)............................ 237
INTERNAL
COMMANDS....................................... 237
CLS (CLEAR
SCREEN).................................... 238
COPY (COPY A
FILE)................................... 238
DIR (DIRECTORY
LISTING).............................. 238
DEBUG (ENTER
DEBUGGER)................................ 239
DEL (DELETE A
FILE)................................... 239
DUMP (HEX DUMP
OF A FILE)............................. 239
EXIT (EXIT THE
CLI)................................... 239
HELP (LIST
INTERNAL COMMANDS)......................... 239
MONITOR (RETURN
TO MONITOR)........................... 239
MD (MAKE
DIRECTORY)................................... 240
PATH (SET FILE
ACCESS PATH)........................... 240
RD (REMOVE
DIRECTORY)................................. 240
RENAME (RENAME A
FILE)................................ 241
RUN (EXECUTE A
.RUN FILE)............................. 241
TYPE (VIEW A
TEXT FILE ON THE SCREEN)................. 241
EXTERNAL COMMANDS.........................................
241
COMMANDS.CLI
FILE....................................... 241
GLOBAL "HOT
KEYS"....................................... 242
CLI SOURCE
LISTING........................................ 242
LISTING 16.1.CLI
SOURCE CODE LISTING VER. 1.0........... 242
A SIMPLE
EDITOR........................................... 259
EDITOR
SCREEN........................................... 259
EDITOR
COMMANDS......................................... 259
TABLE 16.1 - FILE
MANAGEMENT AND GENERAL COMMANDS....... 260
TABLE 16.2 -
CURSOR AND SCREEN MANAGEMENT COMMANDS...... 260
LISTING
16.2.EDITOR SOURCE CODE......................... 261
DUMBTERM.................................................. 285
LISTING 16.3 -
DUMBTERM SOURCE CODE..................... 285
PRINT..................................................... 288
LISTING 16.4.PRINT
SOURCE CODE.......................... 288
SYSTEM SERVICE
EXAMPLE.................................... 292
SERVICE.C
LISTING....................................... 293
LISTING 16.5 -
SIMPLE SERVICE SOURCE CODE............... 293
TESTSVC.C
LISTING......................................... 295
LISTING 16.6 -
TESTSVC.C................................ 295
CHAPTER
17, INTRODUCTION TO THE SOURCE CODE................ 296
COMMENTS IN THE
CODE...................................... 296
CALLING
CONVENTIONS....................................... 296
ORGANIZATION.............................................. 296
BUILDING
MMURTL........................................... 299
LISTING 17.1 -
ASSEMBLER TEMPLATE FILE.................. 300
USING PIECES OF
MMURTL IN YOUR OS......................... 301
USING PIECES OF
MMURTL IN OTHER PROJECTS.................. 301
CHAPTER
18, THE KERNEL..................................... 302
INTRODUCTION.............................................. 302
NAMING
CONVENTIONS...................................... 302
KERNEL
DATA............................................... 302
LISTING
18.1.KERNEL DATA SEGMENT SOURCE................. 303
LOCAL KERNEL HELPER
FUNCTIONS............................. 303
ENQUEUEMSG................................................ 304
LISTING
18.2.QUEUEING FOR MESSAGES AT AN EXCHANGE....... 304
DEQUEUEMSG................................................ 305
LISTING
18.3.DE-QUEUEING A MESSAGE FROM AN EXCHANGE..... 305
DEQUEUETSS................................................ 305
LISTING
18.4.DE-QUEUEING A TASK FROM AN EXCHANGE........ 305
ENQUEUERDY................................................
306
LISTING
18.5.ADDING A TASK TO THE READY QUEUE........... 306
DEQUEUERDY................................................ 307
LISTING
18.6.DE-QUEUEING THE HIGHEST PRIORITY TASK...... 307
CHKRDYQ................................................... 307
INTERNAL PUBLIC
HELPER FUNCTIONS.......................... 308
REMOVERDYJOB............................................ 308
LISTING
18.8.REMOVING A TERMINATED TASK FROM THE READY
QUEUE.................................................
308
GETEXCHOWNER............................................ 309
LISTING
18.9.FINDING THE OWNER OF AN EXCHANGE......... 311
SETEXCHOWNER............................................ 312
LISTING
18.10.CHANGING THE OWNER OF AN EXCHANGE....... 312
SENDABORT............................................... 312
PUBLIC KERNEL
FUNCTIONS................................... 314
REQUEST()............................................... 314
LISTING
18.12.REQUEST KERNEL PRIMITIVE CODE........... 314
RESPOND()............................................... 317
LISTING
18.13.RESPOND KERNEL PRIMITIVE CODE........... 317
MOVEREQUEST()........................................... 320
SENDMSG()............................................... 321
LISTING
18.15.SENDMSG KERNEL PRIMITIVE CODE........... 321
ISENDMSG().............................................. 323
LISTING
18.16.ISENDMSG KERNEL PRIMITIVE CODE.......... 324
WAITMSG()...............................................
325
CHECKMSG().............................................. 329
LISTING 18.18
-CHECKMSG KERNEL PRIMITIVE CODE......... 330
NEWTASK()............................................... 332
SPAWNTASK()............................................. 334
ALLOCEXCH()............................................. 337
DEALLOCEXCH()........................................... 338
GETTSSEXCH()............................................ 339
LISTING
18.23.GETTSS EXCHANGE CODE.................... 339
SETPRIORITY()........................................... 340
LISTING
18.24.SET PRIORITY CODE....................... 340
GETPRIORITY()........................................... 340
LISTING
18.25.GET PRIORITY CODE....................... 340
CHAPTER
19, MEMORY MANAGEMENT CODE......................... 342
INTRODUCTION.............................................. 342
MEMORY MANAGEMENT
DATA.................................. 342
INTERNAL CODE.............................................
343
INITMEMMGMT............................................. 343
LISTING
19.3.CONTINUATION OF MEMORY MANAGEMENT INIT... 344
LISTING
19.4.CONTINUATION OF MEMORY MANAGEMENT INIT... 344
LISTING
19.6.ALLOCATION OF MEMORY MANAGEMENT EXCHANGE. 345
LISTING
19.7.FINISHING MEMORY MANAGEMENT INITI........ 345
FINDHIPAGE.............................................. 346
LISTING
19.8.FIND HIGHEST PHYSICAL PAGE CODE.......... 346
FINDLOPAGE..............................................
347
LISTING
19.9.FIND LOWEST PHYSICAL PAGE CODE........... 347
MARKPAGE................................................ 348
LISTING
19.10.CODE TO MARK A PHYSICAL PAGE IN USE..... 348
UNMARKPAGE.............................................. 348
LISTING
19.11.CODE TO FREE A PHYSICAL PAGE OFR REUSE.. 349
LINTOPHY................................................ 349
LISTING
19.12.CODE TO CONVERT LINEAR TO PHYSICAL
ADDRESSES.............................................
349
FINDRUN................................................. 350
LISTING
19.13.CODE TO FIND A FREE RUN OF LINEAR MEMORY 350
ADDRUN.................................................. 352
ADDALIASRUN............................................. 353
LISTING
19.15.ADDING AN ALIASED RUN OF LINEAR MEMORY.. 353
ADDUSERPT............................................... 355
LISTING
19.16.ADDING A PAGE TABLE FOR USER MEMORY..... 355
ADDOSPT.................................................
356
LISTING
19.17.ADDING AN OPERATING SYSTEM PAGE TABLE... 357
PUBLIC MEMORY
MANAGEMENT CALLS............................ 359
ADDGDTCALLGATE.......................................... 359
LISTING
19.18.ADDING A CALL GATE TO THE GDT........... 359
ADDIDTGATE.............................................. 360
LISTING
19.19.ADDING ENTRIES TO THE IDT............... 360
ALLOCOSPAGE............................................. 361
LISTING 19.20.ALLOCATING
A PAGE OF LINEAR MEMORY...... 361
ALIASMEM................................................ 362
LISTING
19.21.CODE TO ALIAS MEMORY.................... 362
DEALIASMEM.............................................. 365
LISTING
19.22.CODE TO REMOVE ALIAS PTES............... 365
DEALLOCPAGE............................................. 366
LISTING
19.23.DEALLOCATING LINEAR MEMORY.............. 366
QUERYMEMPAGES........................................... 368
LISTING 19.24.CODE
TO FIND NUMBER OF FREE PAGES....... 368
GETPHYADD............................................... 369
CHAPTER
20, TIMER MANAGEMENT SOURCE CODE................... 370
INTRODUCTION.............................................. 370
CHOOSING A STANDARD
INTERVAL.............................. 370
LISTING 20.1.LOOP
IN TIMER ISR.......................... 371
TIMER
DATA................................................ 371
LISTING 20.2 -
DATA AND CONSTANTS FOR TIMER CODE........ 372
TIMER CODE................................................
372
LISTING 20.3 -
EXTERNAL FUNCTIONS FOR TIMER CODE........ 372
THE TIMER
INTERRUPT..................................... 372
LISTING 20.4 -
THE TIMER INTERRUPT SERVICE ROUTINE
373
SLEEP()................................................. 375
LISTING 20.5 -
CODE FOR THE SLEEP FUNCTION............ 375
ALARM()................................................. 376
LISTING 20.6 -
CODE FOR THE ALARM FUNCTION............ 376
KILLALARM().............................................
377
LISTING 20.7 -
CODE FOR THE KILLALARM FUNCTION........ 377
MICRODELAY()............................................ 377
LISTING 20.8 -
CODE FOR THE MICRDELAY FUNCTION........ 378
GETCMOSTIME()........................................... 378
LISTING
20.9.CODE TO READ THE CMOS TIME............... 378
GETCMOSDATE()........................................... 379
LISTING 20.10 -
CODE TO READ THE CMOS DATE............ 379
GETTIMERTICK()..........................................
380
LISTING
20.11.CODE TO RETURN THE TIMER TICK........... 380
BEEP_WORK()............................................. 381
LISTING
20.12.HELPER FUNCTION FOR BEEP() AND TONE()
381
BEEP().................................................. 382
LISTING
20.13.CODE TO PRODUCE A BEEP.................. 382
TONE().................................................. 382
LISTING 20.14 -
CODE TO PRODUCE A TONE................ 382
CHAPTER
21, INITIALIZATION CODE............................ 384
INTRODUCTION.............................................. 384
OS GLOBAL
DATA............................................ 384
LISTING 21.1 -
MAIN OPERATING SYSTEM DATA............... 385
OPERATING SYSTEM
ENTRY POINT.............................. 386
LISTING 21.5 - END
OF INITIALIZATION CODE............... 393
INITIALIZATION
HELPERS.................................... 393
LISTING 21.6 -
INITIALIZATION SUBROUTINES............... 394
LISTING 21.7 - INITIALIZE
CALL GATES AMD THE IDT........ 397
CHAPTER
22, JOB MANAGEMENT CODE............................ 403
INTRODUCTION.............................................. 403
RECLAMATION OF
RESOURCES.................................. 403
JOB MANAGEMENT
HELPERS.................................... 403
LISTING 22.1 - JOB
MANAGEMENT SUBROUTINES............... 403
JOB MANAGEMENT
LISTING.................................... 411
CHAPTER
23, DEBUGGER CODE.................................. 433
INTRODUCTION..............................................
433
DEBUGGER INTERRUPT
PROCEDURE.............................. 433
LISTING 23.1 -
EXCEPTION HANDLERS FOR ENTERING DEBUGGER
433
CHAPTER
24, SELECTED DEVICE DRIVER CODE.................... 458
INTRODUCTION.............................................. 458
IDE DISK DEVICE
DRIVER.................................... 458
LISTING 24.1 - IDE
DEVICE DRIVER DATA (DEFINES AND
EXTERNS)................................................ 459
LISTING 24.2 -
CONTINUATION OF IDE DRIVER DATA (PROTOS
AND
DEFINES)............................................ 459
LISTING 24.3 -
CONTINUATION OF IDE DRIVER DATA (DATA
STRUCTURES)............................................. 463
LISTING 24.4 - IDE
DEVICE DRIVER CODE (INITIAKIZATION)
464
LISTING 24.5 -
CONTINUATION OF IDE DRIVER CODE (CODE)
468
LISTING 24.6 -
CONTINUATION OF IDE DRIVER CODE (DEVICE
INTERFACE).............................................. 475
THE RS-232
ASYNCHRONOUS DEVICE DRIVER..................... 479
RS232.H................................................. 479
LISTING 24.7 -
RS-232.H HEADER FILE................... 480
THE RS-232C DEVICE
DRIVER............................... 481
LISTING 24.8 -
RS-232 DEVICE DRIVER CODE (DEFINES AND
EXTERNS).............................................. 481
LISTING 24.9 -
RS-232 DEVICE DRIVER CODE CONTINUED
(REGISTER
BITS)....................................... 484
LISTING 24.10 -
RS-232 DEVICE DRIVER CODE CONTINUED
(STATUS
RECORD)....................................... 485
LISTING 24.11 -
RS-232 DEVICE DRIVER CODE CONTINUED
(DCB)................................................. 486
LISTING 24.12 -
RS-232 DEVICE DRIVER CODE CONTINUED
(DCB
INIT)............................................ 486
LISTING 24.13 -
RS-232 DEVICE DRIVER CODE CONTINUED
(ISR AND
CODE)........................................ 488
LISTING 24.14 -
RS-232 DEVICE DRIVER CODE CONTINUED
(INTERFACE)........................................... 495
CHAPTER
25, KEYBOARD SOURCE CODE........................... 501
INTRODUCTION.............................................. 501
KEYBOARD
DATA............................................. 501
LISTING 25.1 -
KEYBOARD DATA AND TABLES................. 501
KEYBOARD
CODE............................................. 509
KEYBOARD
ISR............................................ 509
LISTING 25.2 -
KEYBOARD ISR CODE...................... 509
KEYBOARD
TRANSLATION.................................... 510
LISTING 25.3 -
KEYBOARD TRANSLATION CODE.............. 511
READING THE FINAL
BUFFER................................ 515
LISTING
25.4.READ KEYBOARD BUFFER CODE................ 515
THE KEYBOARD
SERVICE.................................... 516
LISTING
25.5.KEYBOARD SYSTEM SERVICE CODE............. 516
KEYBOARD
PROCEDURAL INTERFACE........................... 522
LISTING 25.6 -
CODE FOR BLOCKING READ KEYBOARD CALL
522
DEBUGGER
KEYBOARD....................................... 523
LISTING 25.7 -
DEBUGGER READ KEYBOARD CODE............ 524
KEYBOARD HARDWARE
SET UP................................ 524
LISTING 25.8
-CODE TO INITIALIZE THE KEYBOARD HARDWARE 524
KEYBOARD SERVICE
INITIALIZATION......................... 525
LISTING 25.9 -
KEYBOARD SERVICE INITIALIZATION........ 525
HARDWARE
HELPERS........................................ 527
LISTING 25.10 -
LOW-LEVEL KEYBOARD CONTROL CODE....... 527
CHAPTER
26, VIDEO CODE..................................... 529
INTRODUCTION.............................................. 529
VIRTUAL VIDEO
CONCEPT..................................... 529
VGA TEXT
VIDEO............................................ 529
THE VIDEO
CODE............................................ 530
LISTING 26.1.VIDEO
CONSTANTS AND DATA................... 530
LISTING 26.2 -
CODE TO INITIALIZE VIDEO................. 531
LISTING 26.3 -
CODE TO SET THE VIDEO OWNER.............. 531
LISTING 26.4 -
CODE TO SET NORMAL VIDEO ATTRIBUTE....... 533
LISTING 26.5 -
CODE TO GET THE NORMAL VIDEO ATTRIBUTE
533
LISTING 26.6 -
CODE TO GET THE CURRENT VIDEO OWNER...... 534
LISTING 26.7 -
CODE TO CLEAR THE SCREEN................. 534
LISTING 26.8 -
CODE FOR TTY STREAM OUTPUT TO SCREEN..... 535
LISTING 26.9.CODE
TO SCREEN VIDEO ATTRIBUTES............ 537
LISTING 26.10 -
CODE TO PLACE VIDEO CHARS ANYWHERE ON
THE
SCREEN.............................................. 538
LISTING 26.11.CODE
TO GET A CHARACTER AND ATTRIBUTE..... 539
LISTING 26.12.CODE
TO SCROLL AN AREA OF THE SCREEN...... 540
LISTING 26.13 -
SUPPORT CODE TO SET HARDWARE CURSOR
POSITION................................................ 542
LISTING 26.14.CODE
TO SET CURSOR POSITION............... 542
LISTING 26.15.CODE
TO RETURN CURRENT CURSOR POSITION
543
LISTING 26.16 -
CODE TO EDIT A LINE ON THE SCREEN....... 544
RELATING MMURTL'S
VIDEO CODE TO YOUR OPERATING SYSTEM..... 546
CHAPTER
27, FILE SYSTEM CODE............................... 547
INTRODUCTION.............................................. 547
HOW MMURTL HANDLES
FAT.................................... 547
PHYSICAL
(ABSOLUTE) SECTOR NUMBERS...................... 547
HIDDEN
SECTORS.......................................... 547
LOGICAL BLOCK
ADDRESS (LBA)............................. 548
MS-DOS BOOT
SECTOR...................................... 548
FILE SYSTEM
INITIALIZATION.............................. 548
FILE SYSTEM
LISTING....................................... 549
LISTING 27.1 -
MS-DOS FAT-COMPATIBLE FILE SYSTEM CODE
549
CHAPTER
28, DASM; A 32-BIT INTEL-BASED ASSEMBLER........... 617
INTRODUCTION.............................................. 617
DASM
CONCEPTS............................................. 617
USING
DASM................................................ 618
APPLICATION
TEMPLATE FILE............................... 618
LISTING 28.1 -
SIMPLE APPLICATION TEMPLATE FILE....... 619
LISTING 28.2
- A MORE COMPLICATED TEMPLATE
FILE...... 619
COMMAND LINE
OPTIONS.................................... 620
LIST
FILE............................................. 620
ERRORS
ONLY........................................... 621
DYNAMIC LINK
LIBRARIES................................ 621
DEVICE
DRIVERS........................................ 621
DASM SOURCE
FILES....................................... 621
LOCAL
(NON-PUBLIC) DECLARATIONS....................... 621
MEMORY
MODEL............................................ 621
DASM PROGRAM
STRUCTURE.................................. 622
LISTING 28.3 -
ALTERNATING DATA & CODE IN A TEMPLATE FILE 622
DOT
COMMANDS............................................ 622
DASM VERSUS DOS
ASSEMBLERS.............................. 625
DASM ADDRESSING
MODES................................... 625
TABLE 28.1 -
.SPECIFYING MEMORY OPERANDS.............. 626
STORAGE
DECLARATIONS.................................... 628
DB (DEFINE
BYTE)...................................... 628
DW (DEFINE
WORD)...................................... 628
DD (DEFINE
DOUBLE WORD)............................... 628
DF (DEFINE FAR
WORD).................................. 628
DASM PECULIAR
SYNTAX.................................... 629
PUBLIC
DECLARATIONS................................... 629
EXTRN
DECLARATIONS.................................... 629
LABELS AND
ADDRESS.................................... 630
SEGMENT AND
INSTRUCTION PREFIXES...................... 630
CALL AND JUMP
ADDRESSES............................... 631
386 INSTRUCTION
SET....................................... 634
TABLE 28.2 -
SUPPORTED INSTRUCTIONS..................... 634
EXECUTABLE FILE
FORMAT.................................... 638
TABLE 28.3 - TAG
USAGE.................................. 639
TAG
DESCRIPTIONS........................................ 640
ERROR CODES FROM
DASM..................................... 642
YOUR OWN
ASSEMBLER?..................................... 644
CHAPTER
29, CM32; A 32-BIT C COMPILER...................... 646
INTRODUCTION.............................................. 646
MEMORY USAGE AND
ADDRESSING............................... 647
IMPORTANT INTERNAL
DIFFERENCES............................ 647
VARIABLE LENGTH
ARGUMENT LISTS.......................... 647
CM32 LANGUAGE
SPECIFICS................................... 648
FAR
CALLS............................................... 648
INTERRUPT
FUNCTIONS..................................... 648
SUPPORTED C
LANGUAGE FEATURES........................... 648
LIBRARY HEADER
FILE ACCESS.............................. 650
LIMITATIONS
(COMPARED TO ANSI).......................... 650
STRUCTURE
LIMITATIONS................................. 650
FAR EXTERNAL
FUNCTIONS.................................. 651
TYPE CONVERSION
AND POINTERS............................ 651
INITIALIZATION OF
STATIC VARIABLES...................... 652
OTHER
IMPLEMENTATION DEPENDENT INFORMATION............ 654
USING
CM32................................................ 654
COMMAND LINE
OPTIONS.................................... 654
LIBRARY
FUNCTIONS....................................... 655
LISTING 29.1 -
SUPPORTED LIBRARY FUNCTIONS............ 655
LIBRARY CODE
EXAMPLES................................... 657
LISTING 29.2 -
STANDARD FILE I/O FOR MMURTL........... 657
LISTING 29.3 -
STANDARD STRING FUNCTIONS FOR MMURTL .. 662
--------------------------------------------------------------