As happens sometimes a shame when useful
program with enviable persistence refuses
use the entire amount of computer memory and
naively believes stupid that the 128 or 256
kilobyte - a breathtaking luxury for
the late twentieth century.
(C) Denis Parinov, 1996.
When they say "memory" that are due to memory, ie memory that
is directly connected to the microprocessor and is designed for
storage and execution of programs and data directly involved in
operations.
Under the memory-management software to understand
access and distribution among programs.
In the ZX Spectrum computer processor is used Z80, which has
a 16-bit bus addresses, which allows it addressed
to 2 ^ 16 = 65536 memory cells. In the model
ZX Spectrum 48 processor itself could
addressed to all the memory cells.
But in the model ZX Spectrum 128 address
space of the processor was not enough and his
the developers decided to use a paging memory model.
Page model of memory differs from the linear so that each
cell has a linear its own individual address and the processor
may be addressed to it at any time, and paging, the cells are
arranged in groups (pages) on 16 Kbps and the processor may be
addressed in any time to 32 kilobytes of memory linear
(RAM), to 16 kilobytes (ROM), as well as to 16 kilobytes paged
memory (RAM).
Switching memory pages is carried out with
command
Page model of memory. OUT 32765, n, where
n - Configuration
Port 32765 dec /
7 Page # 7FFD hex.
Appointment of bits
Page 6 D0 ... D2 - Room
current page
4 page hosted in
address range
3 starnitsa with 49152 (# C000)
to 65535 (# FFFF).
1 page D3 - current ROM:
# FFFF 65535 0-128 ROM, ROM 1-48
0 page D4 - active screen
0-normal to 16,384 /
# 4000, 1-extra # C000 49,152 are
positive with the 49152 /
2 page # C000 at the 7 th page
memory.
D5 - lock
# 8000 32768 port 32765 / # 7FFD
5 Page D6 .. D7-in ZX Spect
rum 128 is not used
characterizes.
# 4000 16384 Before switching
pages must
16K ROM, follow these
steps:
# 0000 0 a) move
stack pointer to
address below 49152, it can be done from
assembler command LD SP, # BFFF or BASIC
49151 CLEAR command.
b) put in a system environment variable 128-th
BASIC "BANK" (23388) configuration value
port 32765 (# 7FFD), to the interruption
page of RAM is not switched to normal
state.
Example:
LD (STACK), SP; Save stack pointer
LD SP, # BFFF; Set stack 49151
LD HL, # C000;
LD A, 1, Switch to 1-th country
CALL BANK; per unit of memory.
LD B, (HL); Take the contents of the cell
, 49152 on the 1 st page of memory.
LD A, 0 Switch to 0-th country
CALL BANK; per unit of memory.
LD C, (HL); Take the contents of the cell
, 49152 on the 0-th page of memory.
LD SP, (STACK); recovery index
; Stack.
RET; return from the program.
BANK DI; disable the interrupts.
PUSH BC; Remember BC.
LD BC, # 7FFD;
OR # 10; Install ROM 48.
LD (23388), A; Change lane. BANK.
OUT (C), A; Output to port 32765 values
; Chenie battery.
POP BC; Recall BC.
EI; Enable interrupts.
RET; Return from subroutine
Additional screen.
The computer ZX Spectrum 128 has
second, additional screen.
It is located at the 7 th page of memory
49,152 addresses (# C000) and has exactly the same
structure as a conventional screen. Only
difference is the 15-th bit of screen addresses to
normal screen, this bit is 0, and the
Supplementary 1.
Switching between screens is carried out
port 32765 (# 7FFD), to display an additional screen should run
the program:
DI; Disable interrupts.
PUSH BC; Remember BC.
LD BC, # 7FFD;
LD A, (23388) Get the contents of the first. BANK
SET 3, A; Install the third bit is determined
, That returns the active screen.
LD (23388), A; Post New znaeenie in
; Variable BANK.
OUT (C), A; Output port 32765 (# 7FFD)
, The contents of the battery.
POP BC; Recall BC.
EI; Enable interrupts.
RET; Return from the program.
For conventional screen:
DI; Disable interrupts.
PUSH BC; Remember BC.
LD BC, # 7FFD;
LD A, (23388) Get the contents of the first. BANK
RES 3, A; Reset the third bit is determined
; Yuschy active screen.
LD (23388), A; Post New znaeenie in
; Variable BANK.
OUT (C), A; Output port 32765 (# 7FFD)
, The contents of the battery.
POP BC; Recall BC.
EI; Enable interrupts.
RET; Return from the program.
The above program operates only display one of the screens by
changing the third bit of the port configuration.
Before displaying the image for an additional
screen should include the 7 th page of memory and
display an image.
After that you can include any other
memory page, the image will be displayed
yet installed the third bit is the port # 7FFD/32765.
Invalid use of incomplete
Addressing the port configuration.
Due to lack of information on the above topic, novice
programmers trying to understand other people's programs and at
some point find a "best" way to switch pages with the command
OUT (# FD), A.
They safely replace more cumbersome:
LD BC, # 7FFD
OUT (C), A
more compact: OUT (# FD), A.
Since there are no programs running on
computers Scorpion, Profi and others whose memory is 128K.
By the way, if you really were talking about these cars, then
consider the short-memory management in Scorpio.
Port # 7FFD (32,765), the appointment of bits:
D0-D2 - the page number memory, placed with
Address # C000.
D3 - choose 1 of the first screen to display on
display.
D4 - select ROM 48.
D5 - turn off the port # 7FFD.
D6 - not used.
D7 - not used.
Port # 1FFD (8189), the appointment of bits:
D0 - replacement ROM zero page memory.
D1 - select option ROM with a shadow
service monitor.
D2 - is not used.
D3 - output to RS-232.
D4 - Bank of RAM. (0-basic, 1 advanced).
D5 - STROBE signal to CENTRONICS.
D6 - not used.
D7 - not used.
The sample program will demonstrate the above.
Suppose we want to save the contents of the screen on the 8
th page fault, bring another image, wait for pressing and
restore the screen.
ORG # 8000; Move the stack to
LD (STACK), SP; address # 7FFF, to
LD SP, # 7FFF; could return
; Found from Progressive. BANK.
LD A, 8; Choice 8-th page
CALL BANK; memory.
LD HL, # 4000; Installation param.dlya
LD DE, # DB00; save screen
LD BC, # 1B00; address # DB00.
LDIR; Save the screen.
LD A, 0; Choosing 0-th page
CALL BANK; memory.
LD HL, # C000; Installation param.dlya
LD DE, # 4000; display
LD BC, # 1B00; image # C000
LDIR; Displays.
RES 5, (IY +1); clicking Reset flag
LOOP BIT 5, (IY +1); key is pressed?
JR Z, LOOP; Repeat if not
; Pressed.
LD A, 8; Choice 8-th page
CALL BANK; memory.
LD HL, # DB00; Installation param.dlya
LD DE, # 4000; impeccably. Screen
LD BC, # 1B00; to address # DB00.
LDIR; Displays.
LD A, 0; Choosing 0-th page
CALL BANK; memory.
LD SP, (STACK); Recover stack.
RET; Return of the prog
; FRAMEWORK.
STACK DEFW 0; Cell Storage
, The stack pointer.
BANK DI; disable the interrupts.
PUSH BC; Save BC.
PUSH AF; Save AF.
AND # 08; Page Number> 7
RLA; Result
LD BC, # 1FFD; issue
OUT (C), A; the port # 1FFD.
POP AF; Recall AF.
AND # 07; Adjust
, Page number
; Port # 7FFD.
OR # 10; Install ROM 48.
LD B, # 7F; issue in
OUT (C), A; port # 7FFD.
POP BC; Restore BC.
EI; Enable interrupt
; Of.
RET; Return of the prog
; FRAMEWORK BANK.
Note. Transfer the stack is necessary if he
is above the address # C000, as at room
memory page from # C000, information at
placing the stack will not match the return address.
As you see, not much memory of the Scorpion
Spectrum harder. So do not forget
support in their programs the possibility of its
use, and thank all our customers will appreciate your work.