Komentarze
W Mad-Pascal do oznaczenia komentarza jednoliniowego służą znaki //, dla wieloliniowego klamry { }, lub (* *).
// to jest komentarz
inc(a); // to jest komentarz
(* komentarz *)
(*
  komentarz
*)
{ to
  jest
  komentarz
}
Słowa zastrzeżone
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
Identyfikatory
Identyfikatory oznaczają nazwy zdefiniowane przez programistę dla określonych stałych, typów, zmiennych, procedur i funkcji, modułów oraz programów. Wszystkie nazwy zdefiniowane przez programistę w kodzie źródłowym – z wyjątkiem słów zastrzeżonych – są oznaczane jako identyfikatory.
 myprocedure;
 program test;
 var
   myname: byte;
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, jako 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} );
  AAA: array of byte = [ {$BIN2CSV data.bin} ];
$CODEALIGN
PROC
  {$codealign proc = $100}
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}
LOOP
  {$codealign loop = $100}
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}
LINK
  {$codealign link = $100}
Dyrektywa $CODEALIGN LINK pozwala wyrównać generowany kod wynikowy do VALUE bajtów strony pamięci. Przed każdą dyrektywą {$LINK filename} wstawiany jest kod .ALIGN VALUE. Aby wyłączyć wyrównywanie należy ustawić {$CODEALIGN LINK = 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.
$EVAL
{$EVAL PAR1[,PAR2] ,"EXPRESSION"}
- 
Oblicza wartość wyrażenia EXPRESSION dla zakresu:
0..PAR1-1(jeśli podano tylkoPAR1)0..PAR1-1 * 0..PAR2-1(jeśli podanoPAR1iPAR2)
 - 
Parametry w wyrażeniu oznaczamy jako
:1(dlaPAR1) i:2(dlaPAR2). - W wyrażeniu można używać stałych występujących w programie.
 - Dozwolone operatory: +, -, *, /, DIV, MOD, AND, SHL, SHR, OR, XOR, AND
 - Dostępne funkcje matematyczne: PI, RND, SQRT, SQR, ARCTAN2, COS, SIN, TAN, EXP, LN, ABS, INT, POWER, ARCTAN
 
Głównym zastosowaniem tej dyrektywy jest inicjalizacji tablic.
 mul_40: array of word = [ {$EVAL 192,":1*40"} ];
 sqr : array of byte = [ {$eval WIDTH,200,"255/(sqrt(power(:1-WIDTH/2.5,2)*4+power(:2-HEIGHT/2-20,2))+5)*32.0" } ];
 sinx: array of byte = [ {$eval 256, "(sin(:1/256.0*PI*2.0)*48+63)"} ];
 cnt: array [0..39] of byte = ( {$eval 40,":1 and 15"} );
$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
{$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 Mad-Pascal 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
rclabel RCDATA 'filename'
rclabel RCDATA 'filename' OFFSET
Dowolny typ danych, 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.
EXTMEM
rclabel EXTMEM 'filename'
Dowolny typ danych ładowany do pamięci dodatkowej PORTB, adres ładowania ustalany jest na podstawie RCLABEL.
RCASM
rclabel RCASM 'filename'
Plik w assemblerze, który zostanie dołączony i zasemblowany pod wskazany adres RCLABEL.
DOSFILE
rclabel DOSFILE 'filename'
Plik z nagłówkiem Atari DOS, adres ładowania takiego pliku powinien być identyczny jak RCLABEL.
RELOC
rclabel RELOC 'filename'
Plik relokowalny w formacie Mad Assembler-a, plik zostanie poddany relokacji pod wskazany adres RCLABEL.
PP
rclabel PP 'filename'
Plik spakowany Power Packer-em, który zostanie załadowany pod wskazany adres RCLABEL.
SAPR
rclabel SAPR 'filename'
Plik SAPR-LZSS, który zostanie załadowany pod wskazany adres RCLABEL.
RMT
rclabel RMT 'filename'
Plik modułu Raster Music Tracker-a, plik zostanie poddany relokacji pod wskazany adres RCLABEL.
MPT
rclabel MPT 'filename'
Plik modułu Music ProTracker-a, plik zostanie poddany relokacji pod wskazany adres RCLABEL.
CMC
rclabel CMC 'filename'
Plik modułu Chaos Music Composer-a, plik zostanie poddany relokacji pod wskazany adres RCLABEL.
RMTPLAY
rclabel RMTPLAY 'filename.feat' 0
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
SAPRPLAY
rclabel SAPRPLAY
Player SAPR-LZSS, który wymaga $C00 bajtów pamięci ($300 player, $900 bufory).
MPTPLAY
rclabel MPTPLAY
Player dla modułu MPT.
CMCPLAY
rclabel CMCPLAY
Player dla modułu CMC.
XBMP
rclabel XBMP 'filename' 0
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.