Soft - description of the new assembler - Storm.

Spectrum Expert #01
           __                           
             //                       
             /                        
            /  - Т 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