@DATABASE
@NODE MAIN
*$VER: HypAss math test V1.0 (19.7.96)
*©1998 RST Ralf Steines Trier, ALL RIGHTS RESERVED

    .SYN  xass,z2o,x2h,c2h
    .ORG  $89AB
    .cpu  6502

  @{" HypAss math directives  " LINK HYPASS_MATH_DIRECTIVES  }

  @{" HypAss math operators   " LINK HYPASS_MATH_OPERATORS   }

  @{" HypAss math constants   " LINK HYPASS_MATH_CONSTANTS   }

  @{" HypAss math symbols     " LINK HYPASS_MATH_SYMBOLS     }

  @{" HypAss math specifics   " LINK HYPASS_MATH_SPECIFICS   }


@ENDNODE
@NODE HYPASS_MATH_DIRECTIVES
  * HypAss math directives

    e@ .equ $1234
    e@    = $1234
    e@     =$1234

    t@ .set $1234
    t@   := $1234
    t@    :=$1234

    t@    = $0000
    t@   += $1234
    t@     =$0000
    t@    +=$1234

    t@    = $2345
    t@   -= $1234
    t@     =$2345
    t@    -=$1234

    t@    = $0002
    t@   *= $1234
    t@     =$0002
    t@    *=$1234

    t@    = $2469
    t@   /= $1234
    t@     =$2469
    t@    /=$1234

    t@    = $2469
    t@   %= $1234
    t@     =$2469
    t@    %=$1234

    t@    = $FFFF
    t@   &= $1234
    t@     =$FFFF
    t@    &=$1234

    t@    = $0000
    t@   |= $1234
    t@     =$0000
    t@    |=$1234

    t@    = $3434
    t@   ^= $1234
    t@     =$3434
    t@    ^=$1234

    t@    = $1234
    t@  >>= 8
    t@     =$1234
    t@   >>=8

    t@    = $1234
    t@  <<=    16
    t@     =$1234
    t@   <<=16

@ENDNODE
@NODE HYPASS_MATH_OPERATORS
  * HypAss math operators

    * unary operators

    t@ =   -$10         ; two's complement, negate
    t@ =   $11+-$10     ;
    t@ =   -$10+$11     ;

    t@ =   ~$10         ; one's complement
    t@ =   ~-$10        ;

    t@ =   !0           ; logical NOT
    t@ =   !$10         ;
    t@ =   !TRUE        ;
    t@ =   !FALSE       ;

    t@ =  ^^$12345678   ; high byte of 32-bit (MSB)
    t@ =   ^$12345678   ; high byte of 24-bit (MSB) (WD®)
    t@ =   >$12345678   ; high byte of 16-bit (MSB) (WD®)
    t@ =   <$12345678   ; low byte            (LSB) (WD®)

    * binary operators

    t@ =   $10*$10    ; multiplication
    t@ =   $10000*$10
    t@ =   $10/$02    ; division
    t@ =   $10000/$02
    t@ =   $12%$08    ; remainder after division
    t@ =   $10002%$08
    t@ =   $12//$08
    t@ =   $10002//$08

    t@ =   $10+$10    ; addition
    t@ =   $10000+$10
    t@ =   $20-$10    ; subtraction
    t@ =   $20000-$10

    t@ =   $30&$10    ; AND
    t@ =   $10030&$10
    t@ =   $10|$20    ; OR
    t@ =   $10010|$20
    t@ =   $10!$20
    t@ =   $10010!$20
    t@ =   $20^$10    ; EXOR
    t@ =   $10020^$10

    t@ =   $30&&$10   ; LAND
    t@ =   $10030&&$10
    t@ =   $10030&&$10
    t@ =   $00&&$10
    t@ =   $10&&$00
    t@ =   $10||$20   ; LOR
    t@ =   $20||$20
    t@ =   $00||$20
    t@ =   $00||$00

    t@ =   $20>>1     ; shift right
    t@ =   $10020>>1
    t@ =   $20<<1     ; shift left
    t@ =   $10020<<1

    t@ =   $22?$45    ; if then
    t@ =   $0?$45
    t@ =   $0?-1

    * Comparison operators

    .macro compare,2
       t@ = ?0=?1
       t@ = ?0==?1
       t@ = ?0<>?1
       t@ = ?0!=?1
       t@ = ?0<=?1
       t@ = ?0>=?1
       t@ = ?0<?1
       t@ = ?0>?1
    .endmacro

    compare 1,1
    compare 1,2
    compare 2,1

    * Parenthesized expressions

    t@ =   $10+$10*2
    t@ =  ($10+$10)*2
    t@ =  [$10+$10]*2

@ENDNODE
@NODE HYPASS_MATH_CONSTANTS
  * HypAss math constants

    t@ =    2147483647  ; dec
    t@ =    2147483647d ; dec
    t@ =    2147483647D ; dec
    t@ =    2147483647t ; dec
    t@ =    2147483647T ; dec
    t@ =  d'2147483647' ; dec
    t@ =  D'2147483647' ; dec
    t@ = 10#2147483647  ; dec

    t@ =     $12345678  ; hex
    t@ =      12345678h ; hex
    t@ =      12345678H ; hex
    t@ =     x12345678  ; hex caz only
    t@ =     X12345678  ; hex caz only
    t@ =     #12345678  ; hex caz only
    t@ =    0x12345678  ; hex
    t@ =    0X12345678  ; hex
    t@ =    h'12345678' ; hex
    t@ =    H'12345678' ; hex
    t@ =   16#12345678  ; hex
    .radix 16
    t@ =      12345678  ; hex
    .radix HEX
    t@ =      12345678  ; hex
    .radix DEC

    t@ =    &1234567    ; oct
    t@ =    @1234567    ; oct
    t@ =    01234567    ; oct as6502 ONLY!
    t@ =     1234567o   ; oct
    t@ =     1234567O   ; oct
    t@ =   o'1234567'   ; oct
    t@ =   O'1234567'   ; oct
    t@ =   8#1234567    ; oct
    .radix 8
    t@ =     1234567    ; oct
    .radix OCT
    t@ =     1234567    ; oct
    .radix DEC

    t@ =    %10101010   ; bin
    t@ =   0b10101010   ; bin
    t@ =   0B10101010   ; bin
    t@ =     10101010b  ; bin
    t@ =     10101010B  ; bin
    t@ =   b'10101010'  ; bin
    t@ =   B'10101010'  ; bin
    t@ =   2#10101010   ; bin
    .radix 2
    t@ =     10101010   ; bin
    .radix BIN
    t@ =     10101010   ; bin
    .radix DEC

    .syn xass ; to escape zero2octal

    t@ =   36#vwxyz     ; special
    .radix 36
    t@ =     0vwxyz     ; special
    .radix DEC

    t@ =    "a"         ; string (only in .equ/.set)
    t@ =    "ab"        ; string (only in .equ/.set)
    t@ =    "abc"       ; string (only in .equ/.set)
    t@ =    "abcd"      ; string (only in .equ/.set)

    t@ =    a'A'        ; char
    t@ =    A'A'        ; char
    t@ =    a'A'+1      ; char
    t@ =    A'A'+1      ; char

    t@ =    'A'         ; char
    t@ =    'A          ; char
    t@ =    'A'+1       ; char
    t@ =    'A+1        ; char

    t@ =    '\a         ; $07 BEL Bell, alert
    t@ =    '\b         ; $08 BS  Backspace
    t@ =    '\f         ; $0C FF  Form feed
    t@ =    '\n         ; $0A LF  Line feed
    t@ =    '\r         ; $0D CR  Carriage return
    t@ =    '\t         ; $09 HT  Horizontal tabulator
    t@ =    '\v         ; $0B VT  Vertical tabulator
    t@ =    '\\         ; $5C \   Backslash
    t@ =    '\?         ; $3F ?   Question mark
    t@ =    '\'         ; $27 '   Single quote, apostrophe
    t@ =    '\"         ; $22 "   Double quote
    t@ =    '\017       ; Octal number, leading zero, 2 octal digits
    t@ =    '\x1F       ; Hex.  number, leading x,    2 hex.  digits

    t@ =    '"          ; quote $22
    t@ =    ''          ; apost.$27
    t@ =    ';          ; semic.$3B
    t@ =    ',          ; comma $2C

    t@ =    '           ; space $20
    t@ =    '
    t@ =    ' +1

    .CONV   $0A,$0D0A   ; amiga LF to PC CRLF
    t@ =    '\n         ; LF  = $0D0A

@ENDNODE
@NODE HYPASS_MATH_SYMBOLS
  * HypAss math special symbols

    t@ =    *             ; the actual value of the PC     (not a PeeCee)
    t@ =    $             ; the same
    t@ =    .             ; the same
    t@ =    PC            ; the same

    t@ =    *+1
    t@ =    $+1
    t@ =    .+1
    t@ =    PC+1

    t@ =    TRUE          ; =-1 ($FFFFFFFF)
    t@ =    FALSE         ; =0

@ENDNODE
@NODE HYPASS_MATH_SPECIFICS
  * HypAss math syntax specifics

    * XAss64

    .syn xass,xass

    t@ =   $20>1     ; old shift right
    t@ =   $10020>1
    t@ =   $20<1     ; old shift left
    t@ =   $10020<1

    t@ = 1+2*3       ; cares of preced.
    t@ = 1+(2*3)


    * AS6502

    .syn xass,as02

    t@ =   $20>1     ; old shift right
    t@ =   $10020>1
    t@ =   $20<1     ; old shift left
    t@ =   $10020<1

    t@ = 1+2*3       ; left to right
    t@ = 1+(2*3)


    * ProfiAss64

    .syn xass,pass

    READY.           ; you remember?

    t. =   $20>1     ; old shift right
    t. =   $10020>1
    t. =   $20<1     ; old shift left
    t. =   $10020<1

    t. = 1+2*3       ; cares of preced.
    t. = 1+(2*3)

    READY.           ; redefinable!  ;-)


    * Motorola freeware

    .syn motf,motf

    t@ =   $20>1     ; old shift right
    t@ =   $10020>1
    t@ =   $20<1     ; old shift left
    t@ =   $10020<1

    t@ = 1+2*3       ; left to right
    t@ = 1+(2*3)


    * AS09

    .syn motf,as09

    t@ =   $20>>1    ; C style shift right
    t@ =   $10020>>1
    t@ =   $20<<1    ; C style shift left
    t@ =   $10020<<1

    t@ = 1+2*3       ; cares of preced.
    t@ = 1+(2*3)


    * HitAsm

    .syn motf,hit

    t@ =   $20>>1    ; C style shift right
    t@ =   $10020>>1
    t@ =   $20<<1    ; C style shift left
    t@ =   $10020<<1

    t@ = 1+2*3       ; left to right
    t@ = 1+(2*3)


    * MpAsm

    .syn mpic,mpasm

    t@ =   $20>>1    ; C style shift right
    t@ =   $10020>>1
    t@ =   $20<<1    ; C style shift left
    t@ =   $10020<<1

    t@ = 1+2*3       ; cares of preced.
    t@ = 1+(2*3)


    * PicAsm

    .syn mpic,picas

    t@ =   $20>>1    ; C style shift right
    t@ =   $10020>>1
    t@ =   $20<<1    ; C style shift left
    t@ =   $10020<<1

    t@ = 1+2*3       ; cares of preced.
    t@ = 1+(2*3)


    * CAZ

    .syn caz,caz

    t@ =   $20>>1    ; C style shift right
    t@ =   $10020>>1
    t@ =   $20<<1    ; C style shift left
    t@ =   $10020<<1

    t@ = 1+2*3       ; cares of preced.
    t@ = 1+(2*3)


@ENDNODE
