Scenergy #01
31 мая 1999

Coding - Driver RAM DISK'a for ZX-Spectrum'128.

<b>Coding</b> - Driver RAM DISK'a for ZX-Spectrum'128.
 Driver RAM Disk'a for the ZX Spectrum 128


          1. Instead of joining

 It was a very long time ... Or, to be
exact - in the courtyard stood a 1995-th year. As
once in a while, we, like all beginners
Spectrum team worked directly over
many projects, and planned to make
more. Some of these projects
naturally applies to such genres as
game and the demo (including the plans were
notorious Megaball and Paradise Lost).
And that is also quite obvious to
start-up team - we've had problems with
software. In particular, we did not have enough
programs to work with sprites - it
simply not there.
 It was then that the idea SpriteLand'a.
At first it was just a bunch of protsedurok
not having not only the public interface, but
did not cumulate. Each of them
simply run out of Zeus'a,
rehearsed, and then the results manually
unloaded by BASIC. Subsequently
(Where such a "convenience" we
sick and tired) wrote the first version
interface (on BASIC'e) and were taken
attempts to assemble it all in a heap.
 More - more. We have already become clear that
of "utility for internal use"
This program is gradually grows into something
quite competitive ...
 Version 1.0 appeared in October of 1995,
Then, literally within a month
came up to version 1.19. And
version 1.11, even managed to sell Logrosu
for "big money" - $ 100! :)
Apparently, so version 1.11 was the most
widespread, despite some
bugs.
 At version 1.19, oddly enough all
decayed ... And the decayed capital -
as much as 2 years:) And this is despite the fact that
there sat a couple of ugly bugs, and
some necessary functions simply
absent.
 Resuscitation of the project no matter how SpriteLand
strange happened thanks to the emergence
Project Scenergy, the first issue of which you
currently watching on the screen
your monitor. Was produced significantly
Modified version 1.25, but further
me she had never left. The thing is,
I was planning to publish it in
annex to the zero number Scenergy, but
a number of reasons it was never released.
 Now, in the first issue you Scenergy
It starts with two gifts: a new version
SpriteLand'a in the annex, as well as in
As a bonus, this article. :)
 "Where the hell was he?" - You ask - "when
What is life SpriteLand'a,
when the article is something about the RAM Disk? ". My answer:
 The fact is that during development
SpriteLand'a created two very
useful things: a driver and RAM Disk'a
interface library. The time has come, and
Now I want to publish their source code
for use throughout the Spectrum scene.
 It is always easier and more enjoyable
use to design their programs
ready, the organized and well
documented source code, rather than
try for the umpteenth time to reinvent the wheel.
 That is why the pages I Scenergy
I would like to begin publishing the different source
texts. I hope that experienced coders
support me in this endeavor - because of
this will all just good! Not for nothing
on all other platforms are written in a heap
Articles with the descriptions of the algorithms
published sources pile - it is very
contributes to the development platform. That's right
learn from this good tradition!


         2. A few general words

 So what we have today? In this
article you will find a complete description of the driver
RAM Disk'a and annex - itself the source
format TASM v3.0.
 All (c) at the source and description
belong to me - Flying / DR. Wherefore, I,
as the copyright holder, authorize its
free use for any purpose.
Also allow to patch the source with
to its completion or alteration to your
needs. The only condition - to save
copyrights.
 This driver was created specifically for
SpriteLand'a. Date of last revision:
10/25/1995 (antiquity of which:)). When
establishment used TASM v3.0 (c)
RST7/CBS and STS v2.6 (c) Stalker, for which they
thank you so much!
 I hasten to note that I have not finished the
driver specifically for publication - it
it is in the form in which it stands in
SpriteLand'e. This is partly because my
laziness thoroughly understand the source
written by more than 3 years ago, and partly
the fact that I do not want to go into full
work program. About 100% bug-free
this driver I can speak
Based on what has been 3 years he
works in SpriteLand'e and for all this time
no bugs in it is not noticed.
 Again due to my laziness in the text
source code remains a bit vague
description of the driver features a slightly
clumsy English (because it is not TASM
supports Russian characters and Glory
God! :))


        3. Characteristics of drivers

 Utility: This program
is a driver for the RAM Disk'a
ZX Spectrum 128.

 Specifications Driver:
 - Maximum number of files on the RAM

   Disk'e: 256
 - File size: 1 .. 65535 bytes.
 - The maximum amount of disk: 64kb

   (More on this below)
 - Operations are supported:

   - Read

   - Record

   - Remove

   - Rename

   - Optimization of space RAM Disk'a
 - The principle of organization: a-la TR-DOS, but

    memory is not divided into sectors

    minimum unit - 1 bytes.
 - How it works: a-la TR-DOS. Ie through

   entry point to the transfer function number

   and the parameters in registers.
 - Memory requirements:

   - The driver itself: 1588 bytes

   - Buffer for the operation: 256 bytes

   - Catalog of RAM Disk'a: 256 * 6 = 1536 bytes

   - The rest of the page based memory can be

     used under the RAM disk.
 Directory can be paged in
memory, the driver itself and a buffer should
stay below # C000.
 All operations with data on the RAM Disk'e
made through the buffer. This allows
remove all restrictions on the address
location data for read / write.
The buffer size can be varied at
compilation, however, should remember that
too small buffer size will lead to
general slowing down procedures RAM
Disk'a.
 It should be noted that in contrast to TR-DOS
files on the RAM Disk'e not have a name -
only the number, which, in essence, is
file name and is used in all
disk operations.


           4. Driver Features

 All work with the driver of RAM Disk'a
performed through a single point of entry.
Number of the calling function and the necessary
parameters are passed through registers.

 The general format of the call driver functions:


       LD A, <function number>

       CALL RAMDRV

 Output for all functions of the contents
register reflects the current state of RAM
Disk'a:
 - Flag CY indicates success or

   ended with the driver.

   CY = 0 - everything is OK

   CY = 1 - error. In this case, A

   would be an error code (see below)
 - Register B contains a number of

   used descriptors. In general,

   If it is not equal to the number of files

   on the RAM as Disk'e Deleted files too

   occupy descriptors before will

   Optimization space

   RAM Disk'a.
 - Register C contains a number of

   free memory pages.
 - Register of HL contains the number of

   free memory currently in use

   page. Thus as registers

   C and HL can estimate the total number of

   free memory on RAM Disk'e.


 Driver functions:

# 00 - driver initialization RAM Disk'a.

      Directory is cleaned and

      initialize all internal

      variables. This function must be

      call before you start working with RAM

      Disk'om.
Parameters:

      No

# 01 - Reading a file from the RAM Disk'a in memory.

      Reading is made to any address

      in memory, but only the main

      computer memory! Read / write

      Page memory driver does not know how!

Parameters:
 HL - Address of buffer in memory to be

      reads.
 DE - The size of the read block. If DE = 0

      the size of the block will be taken from

      descriptor file in the directory.
 B - Number of retrieved files.
Possible errors:
# 03 - 'Object is non exist'. File with the same

      number on the RAM Disk'e absent.

# 02 - Writing to a file on the RAM Disk.

      Recording from any address

      in memory, but only from the main

      computer memory! Read / write

      Page memory driver does not know how!

Parameters:
 HL - Address of buffer in memory, which will be

      recorded on the RAM Disk.
 DE - The size of the recording unit.
 B - Number of the recording file.

Possible errors:
# 01 - 'No free ram disk space' Out

      space to write the file to

      RAM Disk. Worth a try

      free up space, making the optimization

      RAM space Disk'a.
# 02 - 'Catalogue overflow'. All the descriptors

      Directory RAM Disk'a busy. Worth

      try to free the descriptors

      occupied by deleted files, making

      optimization space RAM Disk'a.
# 05 - 'Object is already exist'. File with

      this number is already in RAM Disk'e
# 03 - Deleting a file from the RAM Disk'a.

Parameters:
 B - Number of deleted files.

Possible errors:
# 03 - 'Object is non exist'. File with the same

      number on the RAM Disk'e absent.
# 04 - Rename the file.

Parameters:
 B - Old file number.
 C - A new file number.

Possible errors:
# 05 - 'Object is already exist'. File with

      this number is already in RAM Disk'e

# 05 - Optimize RAM Space Disk'a

      This function is similar to the operation

      MOVE in TR-DOS. As a rule, cause

      it should be in case of errors

      'No free ram disk space' or

      'Catalogue overflow' when trying to

      record file as it may

      frees disk space and

      descriptors employed remote

      files.

      For example, in SpriteLand'e call this

      function is built into the procedure

      Driver error handling RAM Disk'a

      and after receiving appropriate

      error at first tries to

      defragment the RAM space

      Disk'a, then re-done

      attempt to write the file, and only

      case of repeated failures is given

      error message.
Parameters:

      None.

Possible errors:

      None.

# 06 - Getting information about the current

      state RAM Disk'a.

      Actually, this function is purely

      formal because return it

      data and so returned to each

      accessing RAM Disk'u. But sometimes

      it is useful to learn about the current

      state RAM Disk'a nothing in this

      not doing.

Parameters:

      None.


Possible errors:

      None.

# 07 - Getting information about the file.

Parameters:
 B - File Number.

Return values:
 B - File Number.
 C - Number of page on which

      beginning of the file is located. If

      C = # FF, then the file does not exist

      on the disk.
 HL - Address to which the file resides

      on the RAM Disk'e. In principle, data

      Registers C and HL can get

      to file data directly to

      Disk'e RAM, but I do not do it

      advise as no one can

      guarantee that the file

      entirely located in one page

      memory.
 DE - The length of the file.
Possible errors:

      None.


         5. Error messages.

 These error messages are returned
A case in every time you call the driver
RAM Disk'a. If the error code is different from
# 00 - CY flag is set as a sign
erroneous conclusion.

# 00 - 'No errors'. All OK.
# 01 - 'No free ram disk space' Out

      space to write the file to

      RAM Disk. Worth a try

      free up space, making the optimization

      RAM space Disk'a.
# 02 - 'Catalogue overflow'. All elements in

      catalog RAM Disk'a busy. Worth

      try to free the descriptors

      occupied by deleted files, making

      optimization space RAM Disk'a.
# 03 - 'Object is non exist'. File with the same

      number on the RAM Disk'e absent.
# 04 - 'Illegal function number'. Function

      with this number is not in

      driver.
# 05 - 'Object is already exist'. File with

      this number is already in RAM Disk'e


     6. The directory structure RAM Disk'a

 The directory structure Disk'a RAM:
+0 [Byte] File Number.
+1 [Byte] starting page number or

          # FF if this descriptor

          free.
+2 [Word] Address of the beginning of the file in memory.
+4 [Word] size.
 Data from (a) and (2) form a complete
pointer to the beginning of the file in the space
RAM Disk'a.
 Number of pages - the logical (# 00 .. # FE).
Physical page number is taken from
Table RAMPAGE (see below)


    7. Description of the internal variables

 Strictly speaking, the source is sufficiently
well commented (though in English
dubious quality:)), so here
I will describe only the most important variables
and function.


                  EQUS:


CATLEN EQU 6

   The size of each directory entry RAM

   Disk'a. At the moment, is 6 bytes

   thus, the entire directory is:

   6 * 256 = # 600 = 1536 bytes.

   Postscript to this variable in the source

   states that when resizing

   directory entry to be rewritten

   multiplication CATLEN the procedure GETPADR

   so be aware! :)

CAT EQU # C000

   Directory location in memory. As I

   have already said - it can be located

   anywhere (even on pages where he

   sits in SpriteLand'e). More details

   See description on CATPAGE and

   procedures SETCATP.

BUFLEN EQU 256

   The buffer size for data exchange between

   Disk'om RAM and main memory. In

   original form is located in the body

   driver, but can be located on

   any address below # C000.

MAXFUNC EQU 7

   The number of functions supported

   Driver RAM Disk'a. Need for

   validation function number.

RAMPORT EQU # 7FFD

   Port number of switching pages.

   Originally intended to do

   support for extended memory (as

   below), but before the end of this idea has not

   has been implemented ...



                 Variables

PAGES DEFB 4

   Number of memory pages used

   a RAM Disk. In principle, the RAM size

   disk'a not limited to 64KB, but because

   in SpriteLand'e (where I got this

   source) of free memory left

   only 64kb - and here, respectively,

   is the number 4. An increase in the size

   RAM disk'a - below.

MAINRAM DEFB # 10

   Number of pages included by default

   as the main computer memory.

   I will explain a bit: The driver actually can

   work (read / write) with only

   the main computer memory, which

   As is known, consists of a 5-st, 2 nd, and

   another one (any) included in the page
Articles with the descriptions of algorithms, procedures,
koderskih various tricks to enable
improve the performance of programs ... And in
appendix, we will see high-quality
source that will be useful not
only novice coders.
 Dreaming ... :) Let's see - can my
dreams come true ...


   Address # C000-# FFFF. So, the number of the

   pages and must be set in this

   variable. The page number should be

   Physics!

   By the way, if you change this number of the country
   particle - you can read / write and other

   pages of memory:)

CATPAGE DEFB # 11

   Page number in which the

   Catalog RAM Disk'a. It remains of

   SpriteLand'a in which directory RAM

   Disk'a lies in the paged memory. Number
   Pages must be physical!

RAMPAGE DEFB # 13, # 14, # 16, # 17

   This table lists the physical

   number of pages allocated for RAM Disk.

   Their number is specified in the variable

   PAGES.
BUFFER DEFS BUFLEN

   Buffer for data exchange. If desired,

   can be rearranged to another location.

FUNCT

        DEFW INIT

        DEFW READ

        DEFW WRITE

        DEFW ERASE

        DEFW RENAME

        DEFW MOVE

        DEFW SYSINFO

        DEFW OBJINFO

   This is a table of pointers to procedures

   implement the corresponding functions

   Driver RAM Disk'a. Address Procedure

   selected by the feature number.

 Procedure, I will not describe here - those
who need it, will be able to deal with
them yourself. The more so because each procedure
in the source file contains a comment with a brief
description and listing of its input
parameters.


             8. Prospects.

 Naturally, the first thing you want
to do with this driver - make it
work with different top memory
computer models.
 Getting to write this article, I have
just looked at the source, and found that
obstacles to this no! :) How
Still cool, I wrote the program 3 years
ago! :) Apparently affected by training
3 rd POVT'a course at the university.
 In general the only thing that interferes directly
immediately begin using this driver with
upper memory - no proper
switcher pages of upper memory.
 What should be done to make it work?
 1) Insert the procedure for switching
page top of memory instead of the procedure
CHPAGE. At the entrance of this procedure
transferred to the logical page number
RAM Memory Disk'a. This procedure should
take a physical page number from the table
RAMPAGE and turn it on. All registers must
be preserved.
 2) A remake of procedure
SETMRAM and SETCATP so that they included
pages respectively of main memory and
Catalog RAM Disk'a. (For more details see
descriptions of variables and MAINRAM CATPAGE).
 Everything! :)
 Thus, you will receive the full
working RAM Disk with a maximum capacity
# FE * # 4000 = 4,161,536 bytes, or nearly 4Mb!

 In addition, it would be nice to add another
functions in addition to the existing. Make
it is also easy:
 1) Write a new function driver. All
procedures for dealing with low-level RAM
Disk'om at the start of the driver.
 2) Add a pointer to the table
FUNCT.
 3) Change the number of functions in MAXFUNC.
 And yet - the function will be part of the driver.


              9. Afterword

 Hopefully, this driver useful to you.
Its really easy to use
when writing a number of programs (SpriteLand'a,
for example:)).
 I also hope that other coders
support my initiative, and in the pages
our journal, we see good





Other articles:

Chars - the charts with 116 questionnaires staff meeting Scenergy.

Charts - the best: Organizer, Musician, Coder, Cracking group, Scener, Group, Demo, Mazazine, Party.

Charts - Best: Single Coder, Cracker, Graphilian, Organizer, Musician, Group, Site.

Charts - Statistics - the numbers and thinking.

Coding - Driver RAM DISK'a for ZX-Spectrum'128.

Coding - On the use of macros or TASM 4.12 - RULEZ!

Coding - the implementation of Phong Bump Mapping on the Speccy.

Coding - sync with the music in demah.

Cracking Scene - crack contest.

Cracking Scene - Illegal scene on the Speccy.

Demo Parrt - venue CC'999.

Demo Party - gloomy thoughts Random'a: "What should I do for you to believe in design Haosa'999?"

Demo Party - New demopati: Designs Haosa'999 - past and future.

Demo Party - Pro Fun Top and all-all-all ... (Belated report Serzh'a in 5 parts)

Demoscene - Chaosite - technical data on Haosaytu.

Demoscene - the history of composition and softografiya Omega Hackers Group.

Demoscene - A new group Novgorodoskaya "RaZZLeRS".

Demoscene - An Open Letter to the scene and Kano himself.

Demoscene - the composition and the contacts of the Lithuanian group zERo.

Editorial - Information section - INDEX ...

Groups - statistics about the active groups: Digital Reality

News - Codebuster track stolen from Zhenya? Fatality site has moved. Extreme leaves the Spectrum. Wait for a 4-th number Subliminal Extacy? Lithuanian group Zer0 longer suschesvuet. Phantasy returned to the stage! Problems with Complex compo. Disputes about associations.

Sceneexplorer - Conments - based on questionnaires: "What about the Sprinter and dumate GMX", "where taking the program," in which networks have addresses.

Sceneexplorer - The results of the survey.

Sceneexplorer - List of questioning.

Scenergy - How to contact us.

Scenergy - Work with Scenrgy Setup.

VIP - Interview with David Brabenom c, author of the great game Elite.

VIP - An Interview with galandskoy demo group The Lords.

VIP - An interview with the Moscow Spectrum team - Cosmic (Progress).

Warez Pack - description of the application log: Energy Trackmo, Forever: Final Release, Yes.

Warez Pack - description of the application log: First Association

Warez Pack - description of the application log: Pussy: Love from Titanic, CrossWord.

Warez Pack - description of the application log: SpriteLand v1.27

Warez Pack - description of the application log: Worms


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Similar articles:
FT'98: Music Compo - Review of music-works with Fun Top'a.
Humor - All of the elections ... me!
Hacker - computer pirates.
Music Box - interviews with JAM'a.

В этот день...   2 May