Real Macro Asm by The Paradroid/Sharks

The "Hotkeys"

They’re activated by pressing the '>’-key plus the following keys... Italic mean Real Macro Asm specific commands.

A

Enter ASCII-Mode. Every keystroke including Cursor-Keys etc. will be printed as ASCII-Code. Exit this mode by pressing "<-"key.
B Block Commands (Kill, Write & Copy Block)
C Cold Start
D Disk Command
E Enter File (Load Standard Source-Code)
F Find Data
G Goto Mark (0-9,S,E)
H Hunt (Continue Find)
I Find Subroutine
K Set F-Keys (F3-F6)
L Load Turbo-Ass-Format Source-Code
M Set Mark (0-9,S,E)
N Goto Line Number
O Options
Q Set Cursor to start of current line
R Replace
S Save Turbo-Ass-Format Source-Code
T Replace & Hunt for next
U List Labels (in older Macro-Ass Version ‘+’)
W Write File (Save Standard Source-Code)
Y Replace All
Z Restore current line
1 Exit Assembler
3 Assemble Source-Code to Memory
4 Print Source-Code (‘*’=Screen, ‘?’=Printer, or Filename)
5 Assemble Source-Code to Disk
6 Make Datas out of Memory
7 Set Tabulator for Labels
8 Set Tabulator for Mnemonics
: Show Marks
; Kill Mark (0-9,S,E)
+ Add two numbers
- Subtract two numbers
<- Print ‘<-’
_ Copy Line into Buffer
£ Copy Line into Buffer
Space Clear Line
DEL Delete line
INST Toggle Auto-Line-Insert on/off
Return Copy Line down
= Copy Line up
Cursor Up Move 200 Lines up
Cursor Down Move 200 Lines down
Shift+F Fill Memory of Object-Bank
Shift+L Load Object-Code into Object-Bank
Shift+S Save Object-Code from Object-Bank
Shift+M Display Memory-Map of Object-Bank
* Show Directory
/ Delete Line from X-Position
F1 Fkeys-Reset

The normal Key-Functions

INST Toggle Auto-Char-Insert on/off
F1 Move 20 Lines up
F2 Jump to Top of Source-Code
F3 Show Directory
F4 Assemble to Memory and Start
F5 Print ‘.BYTE’
F6 Delete Line
F7 Move 20 Lines down
F8 Jump to End of Source-Code
Return Jump to next Line (Insert Line if Auto-Line-Insert is on)

The Pseudo-Opcodes

.BYTE $12 Insert a byte in memory
.WORD $1234 $34,$12 (LO/HI Order)
.RTA $1234

Return address

$33,$12 (Used e.g. for PHA & RTS)
You can use decimal, hex($) or dual (%) Digits

.TEXT "text" $54,$45,$59,$54
.NULL "text" $54,$45,$59,$54,$00
.SHIFT "text" $54,$45,$59,$d4 (Bit7 on last byte is set)
*=  Set new Memory Location (be warned that this doesn't work when assembling to disk!)
.OFFS $1234

Adds $1234 to the current Memory-Location, E.g.

.OFFS $1234                                                                      *=$1000

Means the following Code will be Assembled to $2234

.BLOCK

Block-Area. All Labels in this Area won’t touch the Label-tab.

Advantage: No worry about ‘Double Defined’-Errors

Disadvantage: No Labels in this Area can be called from outside.

.BEND End of Block Area
.PRON

Force Assembler to Output Source-Code to Printer while assembling.

.PROFF No Printing while assembling (Standard)
.HIDEMAC Don’t Print Macros (only effective after .PRON)
.SHOWMAC Print Macros, too
.EOR $12 The Following Code will be eor’d with $12
.LBL Define Label that can be reached by .GOTO
.GOTO Guess!
.VAR $12

Define Label as Variable with Value $12. Same Labels may be defined as Variables several times without ‘Double Defined’-Error

.IF
.IFNE
.IFEQ
.IFPL

If-Statements for conditional assembly. Used to let the Assembler decide whether to assemble or not the following lines depending of the value of the Expression next to it. E.g. .IFEQ LABEL or .IFMI LABEL-1
.ENDIF

End of If-Statement- Example where Label = 1

.IFNE LABEL
  NOP
.ENDIF  

If you set LABEL to ZERO, the NOP won’t be assembled...

.INCLUDE "NAME"

Includes a Standard-Source-Code-File from Disk with the Filename "NAME"

.MACRO Macro-Definition with a Block around it
.SEGMENT Macro-Definition without a Block around.
.ENDM  End of Macro-Definition
#

Macro Call.

While Calling a Macro, Parameters are separated by ‘,’

In Macro:

Number arguments are represented with £+Parameter number
Parameter number are represented with @+Parameter number

The following Formats for Numbers are valid:

1-Byte: 255 (decimal), $FF (hex), %11111111 (dual)
2-Byte: 65535 (decimal),$FFFF (hex),%1111111111111111 (dual)

< and >

Select only the Lo/Hi-Byte of a 16Bit Number by writing ‘<’or ‘>’ in front.  E.g.

LDA #<$1234 =  lda #$34

or

LDA #>LABEL =  lda #(HiByte of Label-Adresse)

Special features of Real macro ASSNow after (hopefully) explained all Commands and Pseudo-Opcodes, I continue with the special features of my REAL MACRO ASS.First of all, there are several Commands added, as you could have seen on the preceeding pages. Furthermore, this Version does take a REAL advantage of the REU 17xx :

Now let’s explain how this works...First of all, you have the SourceCode Bank. As the name says, it holds the SourceCode. The next one is the ObjectCode Bank. There you can store all Object-Code you wish, e.g. Grafix or assembled Code etc. When Assembling your SourceCode (<-+3), the MASS first copies the contents of the ObjectCode Bank into the Ass’d Code-Bank. Then the Source-Code will be assembled into then Ass’d Code-Bank. Using 2 different Banks prevents the MASS of touching the ObjectCode Bank, in case some of the data would be overwritten by the assembled Code. After that, MASS copies the whole C64-Memory into the M-ASS-Copy Bank and than copies the Ass’d Code Bank into Memory plus stores a Callback-Routine into the Cassette-Buffer at $033C.Everything clear?After testing the assembling Code, you may return to your Source-Code by typing SYS 828 or $33C and you’re back in the Assembler.

A short hint. The Options (<-+O) are layed out for 5 Banks (for Security purposes). If you’re using a 256K REU, I recommend to select the same Bank for the Ass’d Code Bank & the ‘Transfer’ Bank so it’ll use only 4 Bank.