|
Think #40
05 ноября 1999 |
|
NEOS - Description of a new operating system for the Spectrum.

NeOS - the new operating
system for the Spectrum
(C) 1999 Megus / Brainwave ^ X-Project.
The idea of creating a completely new system
for the Spectrum in the air is already very
long. Perhaps many were taken for the establishment, but not
many have the strength, patience, and and knowledge can bring
such serious work until the end. In 1997, work on
new OS launched Pavel Fedin, but he later, by
Unfortunately, disillusioned with the idea. However, he has
left a large number of specific theoretical developments, which
later became the basis NeOS. Therefore, NeOS author of the
concept of law is Pavel Fedin, and development of ideas and the
implementation of all zadumok been engaged I Roman Petrov
(Megus / Brainwave ^ X-Project).
The decision to create a new OS for the Spectrum
appeared not to scratch it as
me and Pavel Fedin (hereinafter
just developers) prompted the following reasons:
1. There are alternatives to TR-DOS (iS
DOS) is obsolete, because was originally
designed for machines with memory
48Kb. Also in the iS-DOS, there are some
torye restrictions that do not give this
freedom of the programmer.
2. Currently, there are many
Spectrum models with memory than 128
KB, but the management of memory in each
machine made by his own standards
one that causes some difficulties
a programmer.
3. Also there are many more
periphery, but in this area
there is no firmly established
standards, as each developer
strives to make all their own way.
4. TR-DOS, in fact, is not polnotsen
Noah operating system. Actually
it's just a tape emulator
Operations on the diskette.
5. Absence of an integrated file system
(As in TR-DOS, and in iS-DOS) hindered
preserves the use of external media
high-capacity data (HDD, CD-ROM ..).
There are other reasons, but those
that have just been listed, are the most important. All
described problems are solved in NeOS.
Here is a brief list of features that provides a programmer
and NeOS user:
- Supports up to 4MB of RAM (the theoretical
cally - up to 1GB);
- Implemented a system of block allocation
memory, which will facilitate further
implementation of the (pseudo) multi-tasking;
- Implemented a system driver that Snee
maet problem of incompatibility of different
Noah periphery;
- Implemented the system library functions;
- Ability to work with any external storage ring
Telem data;
- Full support of the Director
thorium;
- Ability to work with files of arbitrary
length (up to 4GB);
- Supports long file names
Noah and 16 characters with three-character
extension;
- Implemented the "transparent" support of times
personal file systems.
Now, all this in more detail.
NeOS supports up to 4MB of RAM,
while the programmer does not have any problems if operating
under with this memory, as Work carried out by
system functions NeOS, and the programmer has
should not worry about the support of all the possible ways to
implement the extended memory. For subsequent implementation of
multitasking in NeOS system was implemented memory management:
scaling in the selection paged memory. The size of allocated /
freed block is a multiple of 1K.
To work with external devices (not
only with them) was implemented system
drivers. Driver held in memory
in the form of "chains": the beginning of each driver is a
pointer to the next. Thus, the total number of drivers
installed in the system is limited only by available memory.
Each driver has its own name, by which the
be searched. Drivers are divided into
2 types: resident and nonresident. K
resident drivers are caused by
each interrupt, a non-resident - the driver, specifically
calling program. Each type has its own chain.
From the driver program can be called
follows: first, to find (open) the driver on his behalf, after
then on the received address and the page
contact number of the function in register A.
Since in the future we plan to implement multi-tasking system
has been implemented library functions. At the moment This
system is not particularly important. Organization of libraries
in memory is similar Organization drivers ("chain"), how to
work with libraries are also similar.
Working with external data storage
carried out through two levels of
Drivers: disk drives and
drivers, file systems (FS). When working
files the programmer must use
Driver FS, and he has, in turn, uses the disk device driver.
Thus providing support for any FS on any type of storage
device. In NeOS implemented "transparent" support
various FS. This means that the system
can be installed multiple drivers
FS and NeOS will work with any of them.
When you select a disk device is
appeal to each driver for the FS
determining whether the disc FS. As
only a driver recognized the disc as
"Own" this driver is active
for the device, and further
operations with files on the disk will be
produced by it. Therefore,
NeOS eliminates the need for a Copy
such as MS-DOS <-> TR-DOS, because system itself
can perform similar operations.
As in any full-fledged DOS, in NeOS
capacity to work with subdirectories
which is so lacking in TR-DOS. Also in
NeOS no restriction on the length of a file specific to TR-DOS
and iS-DOS, the maximum length of the file can be NeOS is equal
to 4GB, which can not be considered restrictive.
To implement the elementary contact
with the user in NeOS integrated team
interpreter allows you to perform basic commands and system
management simple disk operations. There is a possibility
combine a sequence of shell commands in a so-called batch files
(batch files), which represent from a common text files. So
as the built-in interpreter
very modest, the possibility of
install an external interpreter
The developers had originally agreed
that the system will be placed in ROM in the region occupied by
128 BASIC. This allowed maintain compatibility with virtually
all existing software for the Spectrum (this
Page ROMs used by a single program, the developers still have
not found any one that would not work in the presence of ROM
NeOS). In the ROM is the core system (Brainwave BIOS), the
shell, as well as the most necessary driver, without which the
operation of the system is impossible. Because cater for all
users for selecting a standard set of
Driver is not possible, it was decided to write
installer NeOS. With installer
each user can customize NeOS
system the way he wants. It can
choose the standard drivers, the type of computer (for use with
expanded memory) color, language, system messages, layout
keyboard, etc. The result of
the installer is finished image ROM
which is already possible to "stitch up" in Rom. It should be
noted that NeOS does not work with ROM TR-DOS 5.03, for normal
work with NeOS ROM drive to TR-DOS, which
it is possible to directly consider
floppy drive controller status register
(Port # 1F VG93). It is recommended to use NeOS with TR-DOS
5.13, which will be attached to the system.
To date, the core of the system is completely ready, and
passes through the stage of active beta; parallel is
writing software, without which the system can not exist, as
well as to build library of drivers. Because one group
able in the short term to ensure the system
most necessary software developers invite all interested to the
system cooperation. NeOS - it's free
Distributable (freeware) product, but for a certain sum of
money (it is still not defined), anyone can become a
Registered User NeOS.
Each registered user will receive from us a complete set of
NeOS (installer, a library of drivers, the base soft), full
documentation Programmer a small book, and we undertake to
inform such users of the output of the most interesting
software for NeOS and help in acquiring them.
In developing NeOS attended:
- Roman Petrov (Megus / BW ^ XPJ) - razrabot
SC system, writing the kernel and more
part of the driver;
- Pavel Fedin - development of the system;
- Andrei Mikheev (MAV / BW ^ XPJ) - writing
drivers, constructive criticism;
- Andrei Isayev - writing drivers FDD,
constructive criticism;
Neposredstvnnogo participation in development is not
accepted, but tips help, criticism
and morally supported by:
- Roman Miliukov - author of the idea Installs
torus;
- Denis Dmitriev (Dismaster / XPJ) -
constructive criticism;
- Denis Sotchenko - constructive critical
ka, tips for organizing memory and
multitasking;
- Jarek Adamski - constructive criticism,
useful advice;
- Evgeny Malkov (Tim Kelly / KGS), Alec
Sandre Kormishin, Yuri Voynalovich, all
Brainwave, the whole X-Project, Mihal
Bukowski (YERZMYEY / H-Prog), ehokon
ence REAL.SPECCY - a moral
support.
Contact the author:
424019, Russia, rep. Mari El, Yoshkar-Ola, ul. The festival,
d. 77, kv. 13, Petrov Roman Sergeyevich.
Phone: (8362) 22-66-09, 14:00 to 22:00 (mosk. time).
FidoNet: 2:5052 / 7.37
ZXNet: 500:8362 / 1
E-mail: megus_bw@mail.ru
Description of the shell
NeOS v1.0
Shell NeOS
designed for elementary control
system and files. It allows you to perform
commands that can be divided into 2
main groups:
- Team management system;
- Team work with disk
devices;
When you first start NeOS made
attempt to run the file "neosboot.bat" with
disc set in the CMOS boot.
In the absence of this file is
access to the command line editor.
In version 1.0 of the interpreter is
limited, but this will be fixed in
future versions.
Command interpreter
Team management system
1. VER
Command displays information about
Version NeOS.
2. MEM
Command displays information about
available upper memory.
3. CLS
Command clears the screen and fills
its current attributes.
4. CLW
Command clears the current text box
and fills its current attributes.
5. COLOR attr
Command sets the current attributes
attr.
6. BORDER color
Command sets the border color
color.
7. RAM page
The team consists of # C000-# FFFF
page number of the page.
8. CALL addr
Team invokes,
at the address addr.
9. STACK addr
Command sets the stack pointer
the address addr.
10. HEX
Command sets the output of all the numbers
in hexadecimal.
11. DEC
Command sets the output of all the numbers
in decimal form.
12. SILENCE
Command turns off the sound AY.
13. POKE addr byte
The team enters the 8-bit number in byte
cell addr.
14. PEEK addr
Command displays the 8-bit number of
cell addr.
15. DPOKE addr word
The team enters the 16-bit number in work
cell addr and addr +1.
16. DPEEK addr
Command displays the contents of cells and addr
addr +1 as a 16-bit number.
17. TEXTWIN x y width height
Command sets the current window
koordintami upper left corner x and y,
wide width, tall height. Coordinates
and window sizes are set in the familiarity 8x8
pixels.
18. MEMMAP
Command displays pokilobaytnuyu map
Employment memory.
19. EXIT
The command produces output in the StartUp
Menu.
Teams work with disk device
1. LOAD file [addr [length]]
The team loads the first length bytes
file into the address addr. Options addr and
length optional.
2. SAVE file addr length
This command writes the file file length
length from the address addr.
3. RUN file [param]
Command starts to execute code
file file. Characters found after
file name may be perceived as
parameters of the program.
4. RUNS file
Command starts the execution
a batch file named file. Batch
file - a text file containing
sequence of commands NeOS. In addition to
standard commands there are additional:
"+" - The device to display the executable
commands on the screen;
"-" - Off the map
executable commands;
"" - A symbol of comment - all current
Line is considered for the comment and
ignored.
The last line must necessarily
end with a newline (# 0D,
or # 0D, # 0A), otherwise it will not
implemented.
5. CD [path]
Command sets the current path
and / or device. In the absence of
parameter, the command displays the current
way.
6. DIR
Command displays the file names
contained in the current directory.
7. REN file1 file2
Command renames file1 to
file file2.
8. DEL file
Command removes the file file. Read-Only
files are removed from the preliminary
confirmation.
9. MKDIR name
The command creates a new directory name.
10. RMDIR name
Command deletes an empty directory name.
In NeOS set the standard for
file extension:
*. Cnp - executable;
*. Bat - batch file;
*. Drv - driver library;
*. Lib - library of functions;
*. Scr - screen file (6912 bytes).
The upper memory NeOS organizes itself
small area (1Kb) for their
domestic needs. Memory allocation in
this area is as follows:
256b - buffer command line;
512b - time domain for different
functions;
114b - the current path
In kernale there is a region reserved
to call some useful functions
shell. Here are their
Description:
# 00FC. Input string
Function represents the editor
character string. It provides
the following facilities for editing:
- The ability to move along a row
arrow keys;
- Ability to insert symbols in
mid-line;
- The ability to switch
Russian / Latin registers, as well as
Caps Lock.
At the end of the set to end of line
appended code # 0D.
Input: HL - address of the edit buffer;
B - the length of the input string.
Exit: -
# 00FF. Command interpreter
The function performs the action specified in
command line. If interp +2 and interp +3
equal to zero, use the built-
Larry, otherwise -
appearance, which indicates this
variable.
Log in: -
Exit: -
# 0102. Read number
The function reads from a string 16-bit
number. The number can be in
hexadecimal and decimal
form.
Input: HL - address of string.
Output: HL - a limited number;
DE - the address in the following numbers;
C = 0 - number of considered successful;
C = 1 - error while reading.
# 0105. Shut AY
The function is similar to the SILENCE
shell.
Log in: -
Exit: -
# 0108. Change directory
Function is similar to the CD
shell.
Input: HL - address of string.
Exit: -
; *** Labels from 0 to 16383.
DRV_BEG equ 23831; # 5D17
ERR_SP equ 23827; # 5D13
ERR_JP equ 23829; # 5D15
F_DRV equ 23844; # 5D24
F_LIB equ 23851; # 5D2B
F_RES equ 23858; # 5D32
HK_INT1 equ 23810; # 5D02
HK_INT2 equ 23812; # 5D04
HK_INT3 equ 23814; # 5D06
HK_INT4 equ 23816; # 5D08
HK_INT5 equ 23818; # 5D0A
HK_NMI equ 23820; # 5D0C
HK_ERR equ 23808; # 5D00
LIB_BEG equ 23835; # 5D1B
NEOSFD equ 23865; # 5D39
PROGRET equ 23825; # 5D11
RES_BEG equ 23839; # 5D1F
STACK_P equ 23823; # 5D0F
TEMPFA equ 23296; # 5B00
TOTR equ 23913; # 5D69
VARLEN equ 23843; # 5D23
abhl equ 234; # EA
adddrv equ 90; # 5A
addlib equ 96; # 60
agetcel equ 240; # F0
agetatr equ 243; # F3
alloch equ 117; # 75
allocl equ 120; # 78
atrf equ 1; # 1
border equ 5; # 5
brd_l equ 46; # 2E
brd_r equ 48; # 30
brd_u equ 50; # 32
brd_d equ 52; # 34
buttons equ 54; # 36
cd equ 264; # 108
chpag equ 114; # 72
chpagl equ 144; # 90
chdrv equ 204; # CC
cinterp equ 255; # FF
click equ 84; # 54
cls equ 147; # 93
clw equ 150; # 96
countrs equ 68; # 44
csymdrv equ 156; # 9C
curpage equ 27; # 1B
curdbl equ 39; # 27
dabhl equ 237; # ED
dbhl equ 228; # E4
drbox equ 189; # BD
drive equ 33; # 21
drvnum equ 34; # 22
drivdsc equ 35; # 23
drivtab equ 37; # 25
dskerr equ 41; # 29
exprog equ 87; # 57
fdrvcal equ 210; # D2
filatr equ 153; # 99
flags1 equ 57; # 39
flags2 equ 58; # 3A
fontadr equ 4; # 4
freeh equ 123; # 7B
freel equ 126; # 7E
getmax equ 129; # 81
hpagchg equ 141; # 8D
interp equ 70; # 46
keywait equ 78; # 4E
keywclk equ 81; # 51
lastkey equ 16; # 10
lastki1 equ 20; # 14
linput equ 252; # FC
limcrd equ 12; # C
mesger equ 165; # A5
mprealc equ 132; # 84
neos_r equ 59; # 3B
neostmp equ 63; # 3F
nmi_hnd equ 102; # 66
opendrv equ 105; # 69
openlib equ 108; # 6C
openfil equ 207; # CF
paginf equ 135; # 87
pagset equ 138; # 8A
pagemp equ 21; # 15
pnum8 equ 168; # A8
pnum16 equ 171; # AB
pnum32 equ 174; # AE
pnt_x equ 42; # 2A
pnt_y equ 44; # 2C
ports equ 29; # 1D
putch equ 159; # 9F
puts equ 162; # A2
putspr equ 198; # C6
raminfo equ 111; # 6F
ramtop equ 25; # 19
rbytes equ 213; # D5
rblock equ 219; # DB
rbhl equ 225; # E1
remdrv equ 93; # 5D
remlib equ 99; # 63
recdisk equ 201; # C9
readnum equ 258; # 102
repwait equ 17; # 11
reprate equ 18; # 12
repcnt equ 19; # 13
scrlup equ 177; # B1
scrldw equ 180; # B4
screup equ 183; # B7
scredw equ 186; # BA
scrtatr equ 246; # F6
scratr equ 0 # 0
scrcrd equ 2; # 2
scrbeg equ 67; # 43
sens_x equ 55; # 37
sens_y equ 56; # 38
silence equ 261; # 105
strcmp equ 249; # F9
styles equ 6; # 6
sysinfo equ 75; # 4B
symdrv equ 14; # E
textwin equ 8; # 8
vmenu equ 195; # C3
wbytes equ 216; # D8
wblock equ 222; # DE
window equ 192; # C0
zbhl equ 231; # E7
The general concept of Brainwave BIOS v1.0
Brainwave BIOS is the core
OS NeOS. BIOS
gives the programmer a set of
certain management functions
system. All functions can be divided into
several types:
- System-wide functions;
- Functions to work with drivers and
libraries;
- Memory management functions;
- Functions of the disk;
- Functions to the screen;
- Other features
Appeal to the system functions is
by kernalya located in
a specific point of ROM. As
improvement of the system will grow and
kernal, but all the old features will be
remain in their seats.
Many of the BIOS functions do not check
the correctness of input data. This
done to improve the speed of their work.
To control external devices
system provides an opportunity
install the appropriate drivers.
Each driver can have its
their own internal functions. For
each type of device installed
certain standard functions
driver. Thus, replacing
devices in a similar but
implemented differently, it suffices to replace
driver.
Since the BIOS provides only a minimum
necessary functions, the programmer can
plug in their own libraries
functions. Certain types of libraries (in
according to their purpose) and
set the standard. Thus, when
create a new library of any type
painlessly as possible replacement of the old
library to the new without losing
compatibility.
Restarts the system BIOS
RST # 0: Reboot system
Complete system reboot. Intercept
This restart is impossible.
RST # 8: Error manager
Error handler. Follow the instructions
RST # 8 indicates the error code. When
value HK_ERR equal to 0 is called
standard error handler, otherwise
If the transition goes to the specified address.
RST # 1910-RST # 30: Interrupt handlers
Restarts are designed to handle
interrupts from external prihodyashih
interrupt controller.
RST # 38: Interrupt handler
Handler traps (IM 1).
B # 000E is the address internal
Error Handler, and # 0016 - Address
built-in shell.
Standards for drivers of different types
Devices
For resident drivers available
The following restriction: These drivers do not
to spoil the area TEMPFA. If
driver uses this field, then all
changing cells need to remember and
output to recover. If the driver of
do not use, but uses calls
functions of BIOS, then make sure to save those
Bytes TEMPFA, which uses the function
BIOS.
Driver File Systems
These drivers provide job
NeOS with any file system
(TR-DOS, MS-DOS, iS-DOS, etc.). After
install this driver will also be
polled to determine
membership drive.
Standard driver features:
# 00. Identify disk
Function determines whether the disk belongs to
this device on a given file
system. Upon successful identification
sets the root directory of the current.
Log in: -
Output: Z - disk belongs to the system;
NZ - disk does not belong to the system.
# 01. Set system variables
The function sets the system
variables to work with the system.
Log in: -
Exit: -
# 02. Catalogue info
Function gives basic information about
current directory.
Login: IX - a pointer to the descriptor
directory.
Exit: -
# 03. Close file
The function closes the file. If the current
Sector file is not recorded, it
written, if I am heading
file is recorded and the title.
Login: IX - file descriptor.
Output: Z - file closed;
NZ - error closing.
# 04. Create file
The function creates a file of unit length. In
file descriptor to be filled
the first 26 bytes.
Login: IX - file descriptor.
Output: Z - file is created;
NZ - the file is not created.
# 05. Read bytes
The function reads a sequence
bytes from the file.
Login: IX - the file descriptor;
BC - the length of the sequence;
HL - address of the boot.
Output: HL - address after boot;
Z - reading success;
NZ - move abroad file.
# 06. Write bytes
The function writes a sequence
bytes in the file.
Login: IX - the file descriptor;
BC - the length of the sequence;
HL - address of record.
Output: HL - address after recording;
Z - the CD has been successful;
NZ - can not write.
# 07. Set file position
The function sets the file position.
Login: IX - the file descriptor;
BC - position (lower 2 bytes);
HL - position (highest 2 bytes).
Output: Z - position is set;
NZ - there is no such position.
# 08. Delete file
The function deletes the file. Do not remove the Read
only files.
Input: HL - the file name.
Output: A = 0 - file is deleted;
A = 1 - no such file;
A = 2 - Read only.
# 09. Set file attributes
The function sets the file attributes.
Input: HL - the file name;
C - attribute.
Output: A = 0 - attributes set;
A = 1 - no such file;
A = 2 - can not install.
# 0A. Create directory
The function creates a directory.
Login: IX - the name of the directory.
Output: A = 0 - directory is created;
A = 1 - there is no place for creation;
A = 2 - can not create.
# 0B. Delete directory
The function removes an empty subdirectory.
Input: HL - the name of the directory.
Output: A = 0 - all OK;
A = 1 - there is no directory;
A = 2 - impossible to remove.
# 0C. Set path
The function sets the directory for
one level deeper than the current (or
return to a higher level or to the root
directory). If the string is
are two characters point '.', then there
transition to a higher level. If the point is one,
then go to the root directory.
Input: HL - address of the directory name (19b.).
Output: A = 0 - the path is established;
A = 1 - there is no path;
A = 2 - can not install.
# 0D. Get file number
Function on the file name gives the number of his
descriptor in the directory.
Input: HL - filename (16 +3).
Output: A = # FF - no such file;
other values of A - number of
descriptor file (0-253).
# 0E. Get catalogue cell
Function gives a file descriptor
starting at a particular location.
Input: C - number of the initial file;
B - number of items to
reading;
HL - address of where to put opsateli.
Exit: -
# 0F. Reread FAT buffer
The function updates the buffer FAT.
Input: C - sector number FAT.
Exit: -
# 10. Disk Info
Function gives basic information about
disk.
Login: IX - pointer to handle the disk.
Exit: -
Drivers character output
These drivers provide output
single characters on the screen and other
possible character display device.
Standard driver features:
# 00. Print character
Function displays a single character on
screen. Code # 0D - linefeed (CR + LF)
Input: C - character code (# 0D - CR + LF).
Exit: -
# 01. Set coordinates
The function sets the coordinates of the print
characters on the screen. Positioning
is the current text box.
Log in: BC - coordinates;
Exit: -
# 02. Init driver
Initialize the driver and setting up on
current text box.
Input: C = 0 - initialize the driver
C = 1 - restore the original
video mode.
Yield: BC - the character size in pixels
Basic Mode Spectrum
(256x192). Size equal to # FF
means that this
coordinate size of the unstable
(B - y, C - x).
DE - limiting the coordinates X and
by Y, are available when a text
window specified on the screen.
# 03. Put string
The function outputs the string of characters.
Marker for the end of the line is the code # FF. In
line can meet the following
control codes:
db # 10, N - Set the color of ink N;
db # 11, N - Set the color of paper N;
db # 12, N - Installation bright N;
db # 13, N - install flash N;
db # 14, N - setting current attributes;
db # 16, X, Y - coordinate the installation print.
Input: HL - address of string.
Exit: -
Driver-volatile memory (CMOS)
These drivers are provided for
access to CMOS, get the current time
etc. The CMOS stores some settings
NeOS.
Standard driver features:
# 00. Read byte from CMOS
The function reads a byte from CMOS.
Input: L - number of bytes in the CMOS.
Output: A - bytes read from the CMOS.
# 01. Write byte to CMOS
The function writes the byte in the CMOS.
Input: L - number of bytes in the CMOS;
E - value to write.
Output: Z - write was successful;
NZ - can not write byte.
# 02. Read time from CMOS
The function reads the time from the CMOS.
Log in: -
Output: L - seconds;
H - minutes;
E - watch.
# 03. Read date from CMOS
The function reads a date from the CMOS.
Log in: -
Output: L - number;
H - per month;
E - day of the week;
D - per year.
# 04. Write time to CMOS
The function writes the time in CMOS.
Input: L - seconds;
H - minutes;
E - watch.
Output: Z - has been established;
NZ - can not set the time.
# 05. Write date to CMOS
The function writes the date in CMOS.
Input: L - number;
H - per month;
E - day of the week;
D - per year.
Output: Z - date set;
NZ - can not set a date.
Disk device driver
These drivers provide job
NeOS with disk devices. Drivers
file systems do not work yourself to the disk
and use the features of this type
drivers.
Standard driver features:
# 00. Get info about drive
Function gives basic information about
device.
Input: C - Sector size (256/512 = 1 / 2)
DE - address where to put the table
describing the device.
Exit: -
# 01. Read sectors
The function reads a sequence
sectors from the device.
Input: HL - address of the boot;
B - number of sectors;
DE - number of the initial block;
C - number of sectors in the block.
Output: A = 0 - the sector is read;
A = 1 - a nonexistent block;
A = 2 - invalid number of sectors;
DE - unit number after the reading;
HL - address after reading;
C - number of sectors in the block.
# 02. Write sectors
The function writes a sequence
sectors on the device.
Input: HL - address of the boot;
B - number of sectors;
DE - number of the initial block;
C - number of sectors in the block.
Output: A = 0 - the sector is read;
A = 1 - a nonexistent block;
A = 2 - invalid number of sectors;
DE - unit number after the recording;
HL - address after recording;
C - number of sectors in the block.
Format accommodate drivers
and libraries in memory
Drivers and libraries in
memory as a "chain". That is the beginning
Each driver / library is
link to the next unit of the chain. So
way to search for a specific
driver / library, you must go on
chain. On the one hand, this structure
slows down access to the drivers
but on the other hand this method
removes the limitation on the number of
simultaneously installed
drivers / libraries and their number is limited
Only free memory.
Header format drivers / libraries
Offset Length Description
0 2 next page number
Driver
February 2 address of the next driver
(# FFFF-end of the chain)
April 1 a flag byte driver
May 1 Length of the driver's name
6 ... Driver Name
... ... The body of the driver
The first 4 bytes - a reference to the following
driver / library and the rest are
information about the driver / library.
The length of the name of the driver / library should not
exceed 16 characters.
The layout of the flag byte (0 / 1):
bit 0: Controls whether the file system
(No / yes);
bit 1: reserve;
bit 2: resident / resident driver;
bit 3: is a character device
O (no / yes);
bit 4: activity / inactivity of driver
(For resident driver);
bit 5: reserve (should be 0);
bit 6: same bat 5;
bit 7: same bat 5.
For a library, a flag byte can not be held
no information.
To refer to a specific
the driver must do the following
Operations:
- Open the driver (a function of BIOS);
- On the received address / page
apply to the driver.
Number of driver functions specified in
register A.
The system must
attend the following drivers:
- Keyboard driver (kbd.drv);
- Driver CMOS (cmos.drv);
- Print driver is a character (symXX.drv);
- Driver (s) disk drives
(Fdd.drv / hdd.drv / cd.drv / ram.drv etc);
- Driver (s) file systems (trdos.drv,
msdos.drv, isdos.drv etc).
Reserved a number of standard
Names of drivers for certain types of
Device:
- Mouse.drv - mouse;
- Joystick.drv - joystick;
Format driver library
The library serves as a driver for
shared storage of the same type of drivers.
Drivers are stored in a movable form,
ie You can download the driver at any
memory area and configure it to work
in its special function (source for
work with the driver library
attached to a set of delivery NeOS).
Header Format Library
Offset Length Description
0 4 Id "DLIB"
April 1 Number of drivers in the Bible.
May 3 Reserve
Total 8 bytes.
Next come the headlines drivers.
Header format driver
Offset Length Description
0 16 Name of Driver
Feb. 16 start position driver
(Relative to the
drivers, and not from the beginning
la files)
February 18 The body length driver
February 20 number of elements
matching pattern
January 22 a flag byte driver
January 23 Reserve
Total 24 bytes.
Format storage driver
First comes the body of the driver
compiled at address 0. Then comes
matching pattern. Matching pattern
consists of a two-byte pointers
asbolyutnye address in the body of the driver
relative to its beginning. 6 and 7 bits
High Byte pointer - a reserve for
further improvements in the format.
Thus length of the driver may not exceed
16K.
Due to the characteristics when setting
there is some restriction on the code
Driver: absolute addresses within the body
driver must be listed 2
sequence of bytes. That is, for example,
appeal to the table can not be done
as follows:
...
ld a, offset
add a, TAB \ 256 ml. b. address table
ld l, a
adc a, TAB/256; Art. b. address table
sub l
ld h, a
...
TAB db 0,1,2,3,4,5
...
Function "Driver / library manager"
This set of functions responsible for the
drivers and libraries. Number
simultaneously installed libraries
drivers is limited only by memory
computer as a driver's memory and
libraries are located in a "chain"
that is in front of each driver / library
is a reference to the next. Drivers
divided into two types:
- Resident, that is working on
interrupt;
- Non-resident, that is caused by
program specifically, but not automatically.
Prerequisite is
find the first driver and libraries
low memory (# 0000 - # BFFF). Since the ROM
must present at least one driver
and a library, then this condition is satisfied
always.
Options:
# 005A. Add driver
Function sets a new driver
(Any type).
Input: HL - address of the driver;
BC - his page.
Exit: -
# 005D. Remove driver
Function removes the driver.
Input: HL - pointer to name (in the lower
memory).
Output: Z - Driver deleted successfully;
NZ - the driver is not found.
# 0060. Add library
Function sets a new library.
Input: HL - address of the library;
BC - Home of the library.
Exit: -
# 0063. Remove library
Function removes the library.
Input: HL - pointer to name (in the lower
memory).
Output: Z - Library removed successfully;
NZ - Library not found.
# 0069. Open driver
Function searches for the driver and returns
information about it.
Input: HL - pointer to name (in the lower
memory).
Output: HL - address of the driver (# FFFF -
driver not found);
BC - page driver;
DE - Driver header length;
A - flags of the driver.
# 006C. Open library
Function searches the library and returns
information about it.
Input: HL - a pointer to the name of the library
(At the bottom of memory).
Output: HL - address of the library (# FFFF -
library was not found);
BC - Home of the library;
DE - header length of the library.
Function "Disk manager"
This set of functions responsible for the
with disk devices. Options
provide access to both files
directories, as well as directly to
disk sector. Almost all of the functions
executed through the appropriate
Driver, this block is
Managing and removes some of the problems with
programmer.
In NeOS v1.0 can connect up to 19
disk devices (hereinafter will be
perhaps 26 disk drives).
Options:
# 00C9. Recognize disk
Function determines the membership
current storage device to any
installed file system. When
successful identification is also establishes
root directory of the current.
Log in: -
Output: Z - system is defined;
NZ - the system is not defined.
# 00CC. Change disk drive
Function changes the current disk
device. Determining whether
drive system is not made.
Input: A - number of the device.
Output: Z - the choice is made;
NZ - no such device.
# 00CF. Open file
The function opens the file for
random access (read / write).
Before opening a file descriptor should
be set to the file name and address of the buffer
reading.
Login: IX - file descriptor.
Output: Z - the file is opened;
NZ - file could not be opened.
# 00D2. File driver caller
Function makes an appeal to driver
file system. Number of driver functions
given in the register A.
# 00D5. Read bytes from file
The function reads a sequence
bytes from the file (forwarded to the driver
file system).
# 00D8. Write bytes to file
The function writes a sequence
bytes in the file (forwarded to the driver
file system).
# 00DB. Read sectors
The function reads a sequence
sectors with the current device
(Forwarded to the driver disk
devices).
# 00DE. Write sectors
The function writes a sequence
sectors on the current device
(Forwarded to the driver disk
devices).
Function read / write bytes from / to file
made in the kernal, not only for the convenience
call. Since different devices can
be active in different file system, then
can go hand in hand to work with two
files on different
devices and, accordingly,
belonging to different systems. Function
refer to the file system driver
to the driver of this device,
a function of the read / write byte address to
device where you open the file.
Continued in the next issue.
Other articles:
From the Author - Long time no newspapers ... |
NEOS - Description of a new operating system for the Spectrum. |
WANTED - Searching software ... |
Advertising - Advertisements and announcements ... |
Similar articles:
В этот день... 13 November