__
//
/
/ - Т R A D Е
// _
ПРЕДСТАВЛЯЕТ
____________________________________________________________
_______________ ___ ______
/ ____/__ __/ / /
__ | || / | | /| || || |
__ | || / || | || || |
_____ | | _/ | | || || |
______/ |_| ___/|_| _||_||_|
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒ Т U R В О A S S Е М В L Е R ▒▒▒▒
▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒ Version 1.2 ▒▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒
▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
Данный текст является редакцией описа-
ния STORM, помещенного в ZX-FORMAT #7.
Editor
√ Text window size 40*20 characters
each familiar place is 6*6 pixels.
√ Scrolling text into a frame! (1/50 sec)
√ PAGE UP, PAGE DOWN in five frames.
√ Search thousands of lines per second.
√ Evil tokenized text format.
√ Text size (degree of tokenization)
XAS/1.3
ZXASM/2
ALASM/1.4
TASM4/1.5
√ Block operations on arbitrarily
marked lines. (when unloading
markings are retained regardless of the text).
√ Memory string length up to 40 characters.
√ Syntax checking as you type.
√ Automatic line layout.
√ Short dialing option
(LD, JR do not require input).
√ SCROLL UP, SCROLL DOWN functions.
√ Built-in IMPORT FROM DISK and EXPORT
TO DISK (from/to text format).
√ Full line editor
√ It is possible to change colors
Compiler
√ Compilation time
XAS/1.5
ZXASM/3
ALASM/1.4
TASM4/4
(attention! Due to the fault of some damn-
details in ZF #7 the data given therein
The information about the time is incorrect...)
√ Any number of operators per line.
√ Any number of operands for one
operator.
√ Arithmetic with respect to priorities.
√ 22 arithmetic, logical and special
cial operations.
√ Tags up to seven characters long.
√ The total number of tags is about 1536
(11.5 Kb buffer, each mark takes
3+LABEL_LENGTH bytes.)
√ When compiled, replication is possible
lines
√ Possibility of placing the code at the address
not matching ORG.
√ Naturally, INCBIN/INCLUDE.
√ Compilation speed depends little on
total number of tags.
√ Increased speed due to advance
calculated/translated numbers.
√ Support for undocumented commands.
√Built-in macros such as LD BC, HL
Other
√ Directory cache for INCBIN/INCLUDE.
√ Fast disk procedures.
√ Recognition of text on a page in a casual manner
tea of restart.
√ Autoload STS on startup.
-------- Memory allocation ----------
Required machine configuration -
128k, TR-DOS 5.03/5.04.
STORM does not touch banks 0,2,5 (48th pa-
crumple), there he puts the compiled
code. The rest of the banks are free in some places,
in some places no...
0 Free.
1 Killed when entering/returning to STORM.The user program can
be stupid with it too. STORM uses
her only during her work.
2 Free.
3 The first 4k contains a piece of STORMA.
Go away - you won't be able to enter it anymore.
The next 12k stores the table of me-
current You can kill.
4 Completely occupied STORMom.
5 STORM rattles BASIC areas
#5B00...#5BFF, #5E00...#5EFF
The rest is free.
6 Program text. You can kill if
necessary.
7 2nd screen + STS.
The second screen area is used
STORMom for work. If desired, you can
You can kill everything. But keep in mind that
manda STORMa "start STS" is not about
believes that she is launching...
The assembler can compile to addresses
#6000...#FFFF. From the environment the user is not
available area #4000-#SFFF (jar 5).
You can't put object code there. Code,
compiled to these addresses, maybe
placed at another address and forwarded to
area #4000-#SFFF user program
vatela. Use ORG with offset ad-
res.
When starting/returning to the environment, it is necessary
so that RAMTOP is set to 24575, otherwise semi-
read 4 OUT of memory, 0:1.
To return, use USR 23600 or
OUT 32765,20:USR 49152.
When you first start, the 48th is installed
mode with open pages and clears-
Xia 48th memory.
STS 5.1a must be recorded immediately after
STORM - he doesn't bother climbing in
catalogue.
When entering/exiting, SWAPPING occurs with
pages, do not be outraged by the forced
brake (30 clock cycles/byte, however...).
Upon exit, the 1st bank and STS$ are cleared.
At any start/resume, the ACM analyzes
rummages the 6th jar for the text. If
it's there, you can work with it,
if not, the re-initialization occurs
dactora.
═══════════════════════ ═════════════════════════════════════
Editor
══════════════════════════════ ══════════════════════════════
The interface is optimized for fastwork (underneath these words lies a non-
plenty of memory, and the most common
human laziness). All the work is so
at once, using hot keys.
On the screen we have:
- Status line
INS/OVR -No comment
BIG/SML
RUS/LAT
EXT/ALT -Change virtual menu
then you'll understand...
RES/SET -Marking mode
(see below)
LINE,COL,FREE -Speak for themselves
- Text window
- Message area
- Line editor area
- Name of the edited file + tops
*!A:FILENAME
│││
││└-- Current drive
│└--- Sign of presence of markings
└---- Sign of text change
Keys in text editing mode:
CS/1 edit Scroll up
CS/2 caps lock Scroll down
CS/3 true video Go to page up
CS/4 inv. video Page down
CS/5 left Left
CS/6 down Down
CS/7 ir Up
CS/8 right Right
CS/9 graphics Delete by cursor
CS/0 back space Slaughter (for everything...)
SS/WInsert/Replace
SS/A stop CAPS LOCK
SS/Q To the beginning of the line
SS/E to the end of the line
SS/I Continue searching
CS/ENTER Mark line
SS/ENTER Delete line
SS/SPACE RUS/LAT
CS/SS ext editor command prefix
CS/SPACE break external command prefix Keys in the line editor:
SS+Q/E Nome/End
SS+SPACERUSLAT
SS+ACAPSLOCK
DOWN Clear line
EDIT Changing the drive
EXT,BREAK Cancel
Teams are divided into two groups:
- Editor commands (EXT).
Entered after pressing EXTEND.
- External (alternative) (ALT)
Entered after pressing BREAK.
Editor commands (EXT+...) :
Begin Mark the beginning of the block.
End Mark the end of the block.
BlK mode Setting the block mark mode:
SET in the specified line block
are noted.
RES in the specified block is removed
mark from all lines.
Copy Copy all marked blocks
to the location indicated by the cursor.
Delete Delete all marked blocks.
Move Move all checkboxes. blocks in
the location indicated by the cursor.
(using COPY & DEL, on
there was no better time.)
uNmark Clear all block marks.
Search Search.
neXt Search for next.Replace Search and replace.
Request:
Y - replace N - skip
A - replace all Q - discard
Undo Return the string to its original form
had before editing.
If you combined any number of
number of lines using DEL or commands
BACK SPACE, or erased lines
in a row using ss+enter, that's it
is being restored.
AssembleCompiling the program.
If there are no errors and the program is
lazy, you won't have time to do anything
notice... Errors are displayed
in portions of 20 lines and wait
key press. Space - exit
from the compiler. Second pass
done in case of absence
errors on the first pass.
Jump Jump to line number N.
Inspect Calculator.
Movements:
extent ↑ To the beginning of the text.
extent ↓ To the end of the text.
extent → To the next marked line.
extent ← To the previous marked line.
External commands (BREAK+...) :
Load Loading text
SaveSaving text
Sat Catalog
Merge Adding text to the end and
its following markings.
save Blk Save the block (it should
be the only one, otherwise it will be
issuederror message).
save Obj Saving the compiled
programs. The block from
minimum to maximum
the address at which it was generated
riated code. You can use
call ORG in any quantity
and okay.
Zap tech Text cleaning.
QuitOutput in BASIC.
importT Conversion from text
format into tokenized.
The source is sucked from the disk.
Unclear or too long
is marked in a block and with the sign ";",
incomprehensible commands perceived
are like marks.
was : INCLUDE "THRASH"
became: JR INCLUDE,"THRASH"
implied: INCL "THRASH",
as well as "DOOM" and "DEATH"...
eXport Convert to text format
mat. Writes to disk.
No tabs. At the end
lines #0D. End of text marker
not installed.
Assemble Compiling a program.
Debug Call STS.
Return - RETURN TO ASM
Run Run the compiled program
frames. Return by RET or
OUT (#7FFD),#14:JP #C000
Questions not answered above:
────────────── ───────────────────────────
Some errors are displayed on the border.
Blue - Current line is longer than 40
characters (format limitation)
Red - Syntax error
Yellow - Low memory
Green - Internal error
It can arise, for example, if they
spoil not the text, but, for example, the codeblock. Don't reset your computer! Sign in
in TR-DOS and run STORM, at startup
it will find the text (if possible).
If you see a black screen when restarting,
wounds, then it means that Asm found something similar
same on the text, but not the text. In this case
Only clearing the 6th page will help
(128-BASIC does this on reset).
It's no secret that working via TR-DOS
reminiscent of sadomasochism. Therefore, in Asm
fast disk procedures are used
therefore, happy owners
the screws break off abruptly.
All these annoying checks like “And you
do you really want to run this program?
ramma" or "Please dial the combination
nation hyYCTZyНIУ7TgHwr5r5 for confirmation
the plans for your action" are not implemented.
During disk operations, directory and 8th
sector are checked for any errors
side STORM will only work if
when he doesn't find any. Subject to availability
errors will be displayed "CORRUPTED DISK".
Thus, you can push everything that
anything, even MS-DOS disks - work
You can only do it with the “right” ones.
All this was done to avoid conflicts
Comrade STORM - this is not a disk doctor,
obliged to understand all heresy.
The disk must meet the following requirements:
- 80 DS DRIVE AND DISK.
- The first file starts from track 1,
sector 0.
- Start of any file on disk = start
previous + length of previous in sec-
torah.
- Beginning of the last file + its length
should be in the "start of free" field
region" in the 8th sector.
- Number of files/ud. files in 8th
sector must correspond to reality
ness.
- Number of free sectors in the 8th
sector >= 2544-occupied volume.
═══════════════════════ ═════════════════════════════════════
Compiler
══════════════════════════════ ══════════════════════════════
GENERAL LINE FORMAT:
[label] [com.+oper.] : [com.+oper.] ;REM
All fields are optional.
Label up to seven characters long.
The label field may contain an entry like:
.number
where number = 0-255, which specifies the circulation of this
lines, 0=256 times.
The comment can be in any field.
Any number of operators is possible
line (how many will fit in 40 characters..).
One operator has an unlimited number
operands, for example:
ADD A,A,A,B,HL,DE = ADD A,A
ADD A,B
ADD HL,DE
PUSH BC,DE,HL = PUSH BC
PUSH DE
PUSH HL
JR NZ,LOOP,LOOP1 = JR NZ,LOOP
JR LOOP1
JR C,$+5,Z,$+20 = JR C,$+5
JR Z,$+20
DB ABC-$,LOOP-$ = DB ABC-$
DB LOOP-$
(in the last two cases, $ is calculated
That's right, and the teams on the left and right are absolutely
are equivalent).
The following tricks are allowed:
OUT (#FE) = OUT (#FE),A
OUT B,A,(#FE) = OUT (C),B ; only
OUT (C),A ; it's unclearOUT (#FE),A; зачем...
IN (#FE) = IN A,(#FE)
IN D,Е,(#В7) = IN D,(C)
IN Е,(C)
IN A,(#В7)
LD HL,ВС etc = LD Н,В
LD L,C
LD ВС,IX etc = LD В,НХ
LD C,LX
ЕХ HL,DE = ЕХ DE,HL
ADD DE,HL = ЕХ DE,HL
ADD HL,DE
ЕХ DE,HL
ЕХА = ЕХ AF,AF
DB "@AEDFC825"= DB #АЕ,#DF,#C8,#25
DS 7,#AA,#BB = DB #AA,#BB,#AA,#BB
DB #AA,#BB,#AA
only seven bytes
DS 111,"@ABCD"= DB #AB,#CD
....
DB #AB
only 111 bytes.
DS 10 = 10 zeros
EXPRESSIONS
═════════
Where the syntax allows a number,
Any expression can be used
direct or specific EQU.
This is true for all teams.
The calculation is carried out ignoring pe-
Renosov, expression of the form 0-#20 = #FFE0.
If the syntax requires a word, the result is
it just counts.If the syntax requires bytes, the result
must be in the range #FFOO-#OOFF,
i.e.0-#20 will give #E0.
In commands IN,OUT,IMand RST negative
number is not allowed.
Signs requiring two operands
(placed between them):
+ Addition
- Subtraction
* Multiplication
/ Division
Remainder of division
& AND (bitwise over words)
! OR (bitwise over words)
| XOR (bitwise over words)
<< Non-cyclic left shift by N
>> Non-cyclic right shift by N
<= less than or equal to, result = 0 or 1
>= greater than or equal to, result = 0 or 1
< strictly less than , result = 0 or 1
> strictly greater than , result = 0 or 1
= equal to , result = 0 or 1
Signs requiring one operand
(placed after it):
[ high byte (N/256)
] low byte (N256)
^ rounding up or equal
#AE18=#AFOO, #B700=#B700
£ rounding down orequal
#AE18=#AE00, #3D00=#3D00
~ NEG, subtracting a variable from zero.
(The most interesting thing is that this sign
impossible to enter from the keyboard :)
@ NOT, =0 if not zero
=1 if zero
' multiply by 256
In a complex expression, we first count
brackets, then the signs with the highest priority
thet, then signs with lesser, and then up to
minimum priority. For equal priority
Rites are calculated from left to right.
Inside the brackets the same thing (there are their own
priorities). The maximum level of investment is
parentheses+priorities - 16.(use-
van recursive procedures, stack-clogging
is determined by intermediate results. Cont.
the role of 16 levels is present, the system
won't hang.)
If the entire expression needs to be enclosed
in brackets, you must use the notation
of the form 0 + (expression), otherwise the brackets will be
perceived as an addressing method.
Priorities:
[ ] ^ £ ' 8
*/7
~6
>> << 5
+ - 4
& | ! 3
= etc 2
@2
In expressions you can use:
... Labels, as the first character
Only capital letters are allowed
the rest are numbers, "_"
and capital/small letters.
$ current broadcast address of this
operator. If something is used
or the form JR $,$,$,$,$,then $me-
is located inside the line - it is every
times indicates the current "virtual"
al" JR.
123 decimal byte
12345 decimal word
#AA hex byte
#FAB2 hexadecimal word
%10101 binary byte
%... binary word
"A" character code in bytes
"AB" codes of two characters per word,
the first is the eldest.
About the features of the syntax.
INCB=INCBIN/INSERT
INCL=INCLUDE (nesting is not allowed)
LX,LY,НХ,НУ DB,DW,DS SLI
_DB "ABC" ; not tabulated...ORG ADR1 [,ADR2]
ADR1 - where it will work
ADR2 - where to put the code
allowed
ORG $,ADR
ORG ADR,$
ORG $^ ; I love beautiful ones
; addresses
ORG ($-1)/256*256+256 ; managed to love
; beautiful addresses
; and in ZXASM 3.0 ;)
$ addresses the work area.
═══════════════════════ ═════════════════════════════════════
ABOUT FUTURE VERSIONS...
══════════════════════════════ ══════════════════════════════
Most likely, the next events will be
to sit exclusively under great memory,
because even in this memory version for usersthere are few callers left, and the amount of code you
is growing significantly...
√ Multi-text editor
√ Fully framed interface
(IN ADDITION to the existing one!)
√ New built-in macros
√ Local labels
√ Macro definitions
√ Conditional translation
√ Full-scale SETUP
√ Improved inline editor
(working with words and tags)
√ Ability to quickly enter tokens
√ The size of each text is up to 32-64k
√ Fancy SEARCH/REPLACE
√ Printer
√ Compilation speed up by another 20%...
√ Faster disk procedures
√ Many more...
The second version of the assembler assumes
It is possible to support macro commands like:
1.XXXI R,R(N)
Where XXX=ADD,SUB,AND,OR,XOR
R-Register or indirect cell
ADDI L,#20 == LD A L:ADD A,#20:LD L,A
2. LD DD,R
LD BC,L == LD C,L:LD B,0
3. SUB HL,DD == OR A:SBC HL,DD
4. Post-increment type
LD A,(HL)+ = LD A,(HL):INC HL
LD A,(L)+ = LD A,(HL):INC L
5. Indirect addressing by any
register, like LD (DE),LX = LD A,LX:LD (DE),A
6. Indirect word loading
LDW (DE)+,HL =
LD A,L:LD (DE),A:INC DE
LD A,Н:LD (DE),A:INC DE
And another carload of all sorts of different things...
What definitely won’t happen
(for reasons of principle...)
x Long lines (more than 40 characters)
x 64 etc characters per line (addition
our program has been restored to this option
take it as a personal insult...)
x Labels longer than seven characters
x Hard drive support via #3D13.
EXCEPTION: someone will write a ready-
new driver _WITHOUT_ characteristic features
news TR-DOS, so that all errors are
rotated upward, the screen did not deteriorate,
no need for system variables...
And if the driver suits us, then...
═══════════════════════ ═════════════════════════════════════
CUSTOMIZING COLORS.
══════════════════════════════ ══════════════════════════════
You can change some colors in
editor (ink only) using ...
DiskDoctor!
To carry out such violence
needed in the first two bytes of the block
(where the line number is stored) write
Enter the following values:
0th byte 1st byte
00AAABBB CDDDEFFF
^^
└- =0 !!! (otherwise Basic skips the line)
In Ink Purpose----------------------------------
0 AAA - Frame color
0 ВВВ - Line editor color
C DDD - Text color
E FFF - Marking color
----------------------------------
0В0OOINK - Result attribute
|brightness
* What a perversion, huh? *
═══════════════════════ ═════════════════════════════════════
BAPI.
══════════════════════════════ ══════════════════════════════
As you know, a documented glitch -
It’s no longer a glitch, but a feature of the program.
We offer you a list of features :)
Editor:
- In the field"FREE"are printed incorrectly
numbers in the range 10000...10999 and1000...1099.
- Searching for a thong sometimes doesn’t find it
(happens very rarely)
- Slaps JUMP TO LINE
(only happened once)
Assembler:
- LD ($),... is wildly buggy.
(completely unnecessary command)
- Fluff expressions (AA
- DB "A", i.e. one letter in quotation marks -
compiles incorrectly; two or more -
ok.
- If on the second pass appears
at least one OFFSET ERROR, can
others will appear, even if this is not the case
(correct JR to JP, if possible,
one by one).
We hope that's all. On STORMe were written
san three big programs and a lot of ma-
lazy... This is all we have dug up...
lazy... That's all we've dug up...
If other glitches are noticed, although
I would love to hear about them... and see them
because colored squares are so beautiful
wow!.. Write to the editor - and there will be glitches
fixed!
═══════════════════════ ═════════════════════════════════════
In the appendix to the article "SPECTRUM+3D" go
examples written in text format.
If you want to import these into STORM
examples, run it, press BREAK,
Tand type the file name.
Finally, we dare to advise you -
go to STORM, you should try
know what means quickly and conveniently!
Share your thoughts about the article