|
Optron #36
16 июня 2000 |
|
Likbez - assembler - a view from afar: memory ZX Spectrum.

Assembler - a view from afar
Continued.
Beginning at | | 20, 21, 24, 25, 28-30,
32, 33, 35
{} Infarh, 2000
My friends, I am saddened! All available
Assembler komandy we have studied ...
But do not be discouraged! From the study of
language, we go directly to programming. In order for this
process to be successful, need to start
how to learn ...
Memory Allocation Speccy
So, memory ... With the address # 0000 and at # 3fff
inclusive located ROM on your computer. There stitched
operating system (OS). Naturally, in its composition
there are many useful procedures that
try to seduce you and make use of yourself in your own
programs. Of course, this is quite acceptable. But not always
...
OS - a program highly reliable, versatile. But beyond these
advantages, we have pay brakes work and the complexities of
using the above Rom. Personally, I have this state of affairs
is not satisfied, and therefore all the necessary tools I
I do, if possible, myself.
But it's the lyrics, we extend the lesson. After
ROM is an area of memory reserved
under the screen. It starts at address # 4000 and
ends with the address # 5aff. Moreover, to
address # 5900 is a region of graphics and
Further - the attributes.
Then there are the memory occupied by variables of the OS.
The sizes of these regions vary depending on various factors,
however, As a rule, you can racschityvat that
to address # 6000 at # ffff - free
space.
So, if you choose to work
completely independent of the OS, you can safely use all the
RAM. However, in order to be able to
sometimes refer to the operating system, preferably below
# 6000 does not go away. Do not forget that
that a certain amount of memory you need
allocate to the stack. I, as a rule, the most suitable
alternative in which the value The SP register at the beginning
of the program is set to # 6000. This made it possible to use
those bytes that have remained between my program and system
areas.
By the way, usually when you're in
shell editor and run the program
out from under him, the stack will be installed so
that problems in the work for you, as a rule,
not arise.
But enough! It is time to try to write
some kind of program. Upload your editor.
At the same time remember that different editors
have some differences. When I give examples, keep in mind what
is meant Editor XAS. If you use others to make adjustments
according to its specificity.
Thus, the beginning of the program. Typically, this
operator ORG, which indicates to the editor
from any address you want your code
received after the compilation of your text.
So feel free to put the first line of your
program ORG # 6000.
Now we shall understand what resources you
have, if you - Spectrum 128.
Of course, it has the same memory area
that the 48th version. But besides them, you can use the
so-called "Memory pages". To better understand this look at the
scheme:
Page 7
Page 6
Page 4
Page 3
Page 1
page 0
# C000
Page 2
# 8000
page 5
# 4000
ROM 128 (16k)
# 0000
ROM 48 (16K)
# 0000
Before you - a model of paging memory.
Figures on the right show the start address of memory areas,
which we consider to order.
Early ROM is located.
Next - the screen area, the system variables and everything
else that will fit up to address # 8000. This page has been
vacant memory | 5.
Then - Home | 2 (# 8000 - # BFFF).
The above-mentioned pages are always
in its place, and therefore no problems with
they do not. But that's behind them comes the
interesting ...
Memory area with a # C000 on # FFFF is designed to display
pages that are optional. When restarting you see the page | 0,
instead of which you can connect page | | 1, 3, 4, 6 or 7.
Specificity is that can be connected to only one page, and while
it is active, all the rest reside in
the shadows. "One can draw an analogy with an alternative set
of registers (command EXX, remember?). Only there were two sets
of registers, and here you can see six pages. For their shift
is port # 7FFD, which sends control byte.
Before we give a detailed explanation of each bit of this
port, some general information about the screen. In the 48th
version of the area of the display memory is starting at
address # 4000 (page 5). For 128 Spectrum of the situation is
similar, but ...
Area of memory in bytes # 1B00, located in a page | 7
starting at address # S000, can be used as an additional
screen. His organization will be exactly
correspond to the normal screen, in all
except, of course, the address location.
And now - we describe the port:
Bits D0-D2 determine which page
will be displayed from the address # S000.
Bit D3 charge of the active screen. If
it is set to "0", active standard
screen (at page 5).
Bit D4 controls the current ROM. He, being
set to "0" connects the ROM-48 and
setting it to "1" - ROM-128.
Bit D5 is blocking the port. If you send in
it "1", a port is disabled until the next
Reset'a completely unavailable.
Bits D6, D7 do not cause problems: they
128th version is not involved.
And finally, something programmopodobnoe:
ORG # 6000
; Activating ROM-48, Screen | 1
; Include Page 0
LD BC, # 7ffd
LD A, # 10
OUT (C), A
, And read the first byte
LD HL, # c000
LD A, (HL)
; Change it and put on
And the same place, but in page 1
CPL
LD E, A
LD A, # 11
OUT (C), A
LD (HL), E
; Rebuilding Page 0
LD A, # 10
OUT (C), A
; Its first byte of the compare
; With a modified previously
LD A, (HL)
CP E
; Analyzing the results
JR NZ, mode128
; Mode 48
...
...
mode128
Thus we get a program that determines whether the computer on
which it is running, the extended memory. The first byte of
page 0, we invert and place in page 1. Produce switched back
and compare proinvertirovanny byte available. If they are
equal, then switch has not occurred and computer, most likely
the 48th. Otherwise, proceed to the mode of 128th memory.
Let us now examine the additional screen. For starters just
take a screen file and place it on the drive name
say, "screen.C". In order to implement a code block from the
disk into the code program, use the operator "LCODE".
Write the following:
ORG # 6000
; Connect page 7
LD A, # 17
LD BC, # 7ffd
OUT (C), A
; Copy of it loaded the screen
LD HL, scr
LD DE, # c000
LD BC, # 1b00
LDIR
; Rebuilding Page 0
, And activating the second screen
LD A, # 18
LD BC, # 7ffd
OUT (C), A
; Not prevent a slight delay
, For the vision of the result
LD BC, 0
wait
DEC BC
LD A, B
OR C
JR NZ, wait
RET
scr LCODE "screen"
If all goes well, you get the picture that you put in
second screen. It will last as long on
how much is enough delay loop. After this
control is passed to the editor and it will automatically
restore the screen | 1.
Pay attention to what to display | 2 does not necessarily
have an active page 7. It is enough that mode is selected the
corresponding bit of port.
Well, this one will suffice. See you soon!
To be continued ...
Other articles:
Similar articles:
В этот день... 15 November