Zarezerwowane słowa

rozkazy

absolute           and                 array              asm               assembler
begin              case                const              constructor       div
do                 downto              else               end               exports
external           file                for                forward           function
if                 implementation      in                 interrupt         interface
length             library             main               mod               not               
object             of                  or                 overload          pascal
procedure          program             record             register          repeat
shl                shr                 string             text              textfile
then               to                  type               unit              until
uses               var                 while              xor

stałe

pi
true
false
nil
eol
nan
infinity
neginfinity

Komentarze

W MP do oznaczenia komentarza jednoliniowego służą znaki //, dla wieloliniowego klamry { }, lub (* *).

// to jest komentarz
inc(a); // to jest komentarz

(* komentarz *)

(*
  komentarz
*)

{ to
  jest
  komentarz
}

Wyrażenia

Liczby

zapis decymalny

-100
-2437325
1743

zapis hexadecymalny

$100
$e430
$000001

zapis binarny

%0001001010
%000000001
%001000

zapis kodami ATASCII

'a'
'fds'
'W'
#65#32#65
#$9b

Operatory

arytmetyczne

+   Addition
-   Subtraction
*   Multiplication
/   Division
DIV Integer division
MOD Remainder

bitowe

NOT Bitwise negation (unary)
AND Bitwise and
OR  Bitwise or
XOR Bitwise xor
SHL Bitwise shift to the left
SHR Bitwise shift to the right

logiczne

NOT logical negation (unary)
AND logical and
OR  logical or
XOR logical xor

relacji

=   Equal
<>  Not equal
<   Less than
>   Greater than
<=  Less than or equal
>=  Greater than or equal

Dyrektywy kompilatora

Zapis dyrektyw kompilatora ma postać:

{$dyrektywa parametry}
{$lista_dyrektyw_przełącznikowych}

Dyrektywa stanowi komentarz, w którym pierwszy znak $ odróżnia zwykły komentarz, od dyrektywy kompilatora.

WARUNKOWE

{$IFDEF label}
{$IFNDEF label}
{$ELSE}
{$ENDIF}
{$DEFINE label}
{$UNDEF label}
{$define test}

const
  {$ifdef test}
  a=1;
  {$else}
  a=2;
  {$endif}

Z poziomu assemblera dostęp do zdefiniowanych etykiet $DEFINE możliwy jest przez MAIN.@DEFINES.label

$BIN2CSV

Dołącza zawartość zewnętrznego pliku binarnego do kodu źródłowego, jak tekst CSV.

Na przykład, jeśli plik binarny zawiera bajty $1E, $1F, $20, dyrektywa wygeneruje ciąg 30, 31, 32.

Głównym zastosowaniem tej dyrektywy jest inicjalizacji tablic.

  //Initialize with a binary content
  AAA: array[3] of byte = ({$BIN2CSV data.bin});

$CODEALIGN PROC = value

Dyrektywa $CODEALIGN PROC pozwala wyrównać generowany kod wynikowy do VALUE bajtów strony pamięci. Przed każdym blokiem PROCEDURE, FUNCTION wstawiany jest kod .ALIGN VALUE. Aby wyłączyć wyrównywanie należy ustawić {$CODEALIGN PROC = 0}

$CODEALIGN LOOP = value

Dyrektywa $CODEALIGN LOOP pozwala wyrównać generowany kod wynikowy do VALUE bajtów strony pamięci. Przed każdą instrukcją iteracyjną FOR, WHILE, REPEAT wstawiany jest kod .ALIGN VALUE. Aby wyłączyć wyrównywanie należy ustawić {$CODEALIGN LOOP = 0}

$DEFINE

BASICOFF

{$DEFINE BASICOFF}

Powoduje utworzenie dodatkowego bloku programu, realizującego wyłączenie BASIC-a.

ROMOFF

{$DEFINE ROMOFF}

Zyskujemy dostęp do pamięci pod ROM-em, $C000..$CFFF, $D800..$FFFF.

Zestaw znaków z ROM $E000..$E3FF zostaje przepisany pod ten sam adres w RAM, zostaje zainstalowany handler przerwań NMI, IRQ. System operacyjny działa normalnie, można z poziomu ASM wywoływać procedury w nim zawarte poprzez makro m@call.

UWAGA:
W przypadku umieszczenia programu ANTIC-a Display List pod ROM-em każde naciśnięcie klawisza będzie powodować wywołanie przerwania IRQ obsługującego klawiaturę.

Program ANTIC-a będzie zakłócany poprzez przełączanie ROM - RAM, w przypadku gdy korzystamy z przerwania Display List-y (DLI) może dojść do uszkodzenia stosu i wyłożenia się systemu.

Umieszczenie zestawu znaków lub pamięci obrazu pod ROM będzie skutkować 'glitchami' w momencie naciskania klawiszy.

NOROMFONT

{$DEFINE NOROMFONT}

Uzupełnienie dla {$DEFINE ROMOFF}, zapobiega przepisaniu zestawu znakowego z ROM do RAM

$ERROR

{$ERROR user_defined}

Wygenerowanie komunikatu z błędem ERROR.

$F, $FASTMUL

{$fastmul page}   // fastmul at page*256
{$f $70}          // fastmul at $7000

Alternatywne procedury szybkiego mnożenia dla typu BYTE SHORTINT WORD SMALLINT SHORTREAL. Procedury zajmują 2KB i są umieszczane od adresu PAGE*256.

$I+, $I-, IOCHECK

{$I+}
{$I-}
{i+}  IOCHECK ON  default
{i-}  IOCHECK OFF

Dla {$i+} w przypadku wystąpienia błędów transmisji I/O dla: RESET REWRITE BLOCKREAD BLOCKWRITE CLOSE, wykonywany program zostaje zatrzymany, generowany jest komunikat błędu ERROR xxx.

Wyłączenie IOCHECK {$i-} przydaje się gdy chcemy sprawdzić istnienie pliku na dysku, np.:

function FileExists(name: TString): Boolean;
var f: file;
begin

  {$I-}     // io check off
  Assign (f, name);
  Reset (f);
  Result:=(IoResult<128) and (length(name)>0);
  Close (f);
  {$I+}     // io check on

end;

W blokach PROCEDURE, FUNCTION dyrektywa IOCHECK jest zasięgu lokalnego, po zakończeniu kompilacji takiego bloku przywracana jest wartość IOCHECK, która została określona poza takim blokiem.

$I, $INCLUDE

%DATE%

{$INCLUDE %DATE%}
{$I %DATE%}

Parametr %DATE% pozwala dołączyć tekst z aktualną datą kompilacji.

%TIME%

{$INCLUDE %TIME%}
{$I %TIME%}

Parametr %TIME% pozwala dołączyć tekst z aktualnym czasem kompilacji.

FILENAME

{$INCLUDE filename}
{$I filename}

Parametr FILENAME pozwala dołączyć plik tekstowy.

$INFO

{$INFO user_defined}

Wygenerowanie komunikatu z informacją INFO.

$LIBRARYPATH

{$LIBRARYPATH path1; path2; ...}

Dyrektywa $LIBRARYPATH pozwala wskazać dodatkowe ścieżki poszukiwań modułów UNIT zadeklarowanych przez USES.

{$LINK filename}

Dyrektywa {$link filename} pozwala dołączyć i zintegrować z programem Mad Pascal-a kod i procedury zasemblowane w Mad Assembler-rze. Więcej na temat łączenia assemblera z Mad Pascal-em w rozdziale Wstawki assemblera

$MACRO

{$MACRO ON}
{$MACRO OFF}
{$MACRO+}
{$MACRO-}

Dyrektywa {$macro } włącza/wyłącza możliwość definiowania makr, jest wymagana przez FPC, w MP jest zachowana tylko w celu zgodności.

$OPTIMIZATION

LOOPUNROLL

{$OPTIMIZATION loopunroll}

Dyrektywa $OPTIMIZATION z parametrem LOOPUNROLL pozwala rozpętlać pętle FOR (parametry takiej pętli muszą być stałymi):

{$OPTIMIZATION loopunroll}

 for i:=0 to 11 do tab[i]:=i*2;

{$OPTIMIZATION noloopunroll}

NOLOOPUNROLL

{$OPTIMIZATION noloopunroll}

Parametr NOLOOPUNROLL wyłącza rozpętlanie pętli FOR.

$R, $RESOURCE

{$R filename}
{$RESOURCE filename}

RCLABEL RCTYPE RCFILE [PAR0 PAR1 PAR2 PAR3 PAR4 PAR5 PAR6 PAR7]

Dyrektywa dołączenia pliku z zasobami.

Plik zasobów jest plikiem tekstowym, każdy jego kolejny wiersz powinien składać się z trzech pól rozdzielonych "białym znakiem": etykieta RCLABEL (jej deklaracja musi znaleźć się także w programie), typ zasobów RCTYPE, lokalizacja pliku RCFILE. Aktualnie w pliku BASE\RES6502.ASM znajdują się makra do obsługi 12 typów zasobów RCTYPE:

RCDATA

Dowolny typ danych, np.:

label RCDATA 'filename'

możliwe jest podanie dodatkowego parametru określającego liczbę bajtów które mają zostać pominięte, przydatne kiedy chcemy usunąć nagłówek pliku XEX

label RCDATA 'filename' OFFSET

EXTMEM

Dowolny typ danych ładowany do pamięci dodatkowej PORTB, adres ładowania ustalany jest na podstawie RCLABEL.

RCASM

Plik w assemblerze, który zostanie dołączony i zasemblowany.

DOSFILE

Plik z nagłówkiem Atari DOS, adres ładowania takiego pliku powinien być identyczny jak RCLABEL.

RELOC

Plik relokowalny w formacie MadAssemblera, plik zostanie poddany relokacji pod wskazany adres RCLABEL.

RMT

Plik modułu Raster Music Tracker-a, plik zostanie poddany relokacji pod wskazany adres RCLABEL.

MPT

Plik modułu Music ProTracker-a, plik zostanie poddany relokacji pod wskazany adres RCLABEL.

CMC

Plik modułu Chaos Music Composer-a, plik zostanie poddany relokacji pod wskazany adres RCLABEL.

RMTPLAY

Player dla modułu RMT, jako RCFILE podajemy plik *.FEAT oraz dodatkowo PAR0 tryb playera 0..3.

    0 => compile RMTplayer for 4 tracks mono
    1 => compile RMTplayer for 8 tracks stereo
    2 => compile RMTplayer for 4 tracks stereo L1 R2 R3 L4
    3 => compile RMTplayer for 4 tracks stereo L1 L2 R3 R4

MPTPLAY

Player dla modułu MPT.

CMCPLAY

Player dla modułu CMC.

XBMP

Plik Windows Bitmap (8 BitsPerPixel) ładowany do pamięci VBXE pod wskazany adres RCLABEL od indeksu koloru PAR0 w palecie kolorów VBXE nr 1

Przykład:

bmp1  RCDATA   'pic.mic'
msx   MPT      'porazka.mpt'
play  RMTPLAY  'modul.feat' 1
bmp   XBMP     'pic.bmp' 80

$UNITPATH

{$UNITPATH path1; path2; ...}

Dyrektywa $UNITPATH pozwala wskazać dodatkowe ścieżki poszukiwań modułów UNIT zadeklarowanych przez USES.

$WARNING

{$WARNING user_defined}

Wygenerowanie komunikatu z ostrzeżeniem WARNING.