diff --git a/doc/r3.txt b/doc/r3.txt index d4c1ebd0..afe77763 100644 --- a/doc/r3.txt +++ b/doc/r3.txt @@ -1,35 +1,106 @@ Lenguaje R3 +LIT +TOS=DATA + +WORD +call word + ; | -- R: a -- Fin de palabra +ret +---------- remove accessto r stack >R | a -- R: -- a +push TOS R> | -- a R: a -- +pop TOS R | -- a R: a -- a +mov TOS,[esp] RDROP | -- R: a -- +sub esp,4 +-------------------------------------- + 0? | -- Es 0 el tope de la pila ? +or TOS,TOS + +? | -- Es positivo el tope de la pila ? +or TOS,TOS + -? | -- Es negativo el tope de la pila ? +or TOS,TOS + 1? | -- Es distinto a 0 el tope de la pila ? +or TOS,TOS + =? | a b -- a a = b ? +cmp NOS,TOS + ? | a b -- a a > b ? +cmp NOS,TOS + <=? | a b -- a a <= b ? +cmp NOS,TOS + >=? | a b -- a a >= b ? +cmp NOS,TOS + <>? | a b -- a a <> b ? +cmp NOS,TOS + AND? | a b -- a a and b ? +test NOS,TOS + NAND? | a b -- a a nand b ? +test NOS,TOS + BTWN? | a b c -- a<=b<=c? -?? ( ) | IF -?? ( () ) | IF-ELSE -( ?? () ) | WHILE +?? ( A ) | IF +jxx .n + A +.n: + +?? ( A () B ) | IF-ELSE +jxx .n + A +jmp .s +.n: + B +.s: + +( A ?? () B ) | WHILE +.n: + A +jxx .s + B +jmp .n +.s: + +jmp .n +.s: + B +.n: + A +jxx .s + ( ?? ) | UNTIL +.n: + A +jxx .n [ ; ] | Inicio y Fin de definicion Anonima +----- no existe EXEC | vector -- Llama al codigo del vector +call TOS + NTH@ | nro listavector -- nro*4+listavector @ +mov eax,[eax*4+CTE] +;lea eax,[eax*4+ebx+CTE] DUP | a -- a a DROP | a -- @@ -49,65 +120,179 @@ ROT | a b c -- b c a AND | a b -- c c = a AND b +and TOS,NOS + OR | a b -- c c = a OR b +or TOS,NOS + XOR | a b -- c c = a XOR b -NOT | a b -- c c = a NOT b +xor TOS,NOS + + | a b -- c c=a+b +add TOS,NOS + - | a b -- c c=a-b +sub TOS,NOS + +<< | a b -- c c=a<> | a b -- c b=a>>b (arrastra signo) +sar NOS,TOS + +0> | a b -- c b=a>>b (arrastra zero) +shr NOS,TOS + * | a b -- c c=a*b +imul TOS,NOS + / | a b -- c c=a/b +cdq +idiv NOS,TOS + +MOD | a b -- c c=a resto b +cdq +idiv NOS,TOS + */ | a b c -- d d=a*b/c resultado intermedio en 64 bits +cdq +imul PK2,NOS +idiv NOS,TOS + *>> | a b c -- d d=(a*b)>>c resultado intermedio en 64 bits +;a=eax +cdq +imul NOS +shrd eax,edx,TOSb + <> | a b -- c b=a>>b (arrastra signo) -0> | a b -- c b=a>>b (arrastra zero) +SAL TOS,1 + +BSWAP | a -- b b=bswap a +bswap TOS + +ABS | a -- b b=|a| +mov edx,TOS +sar edx,31 +add TOS,edx +xor TOS,edx +;TOS=eax? +cdq +add eax,edx +xor eax,edx + +CLZ | a -- b count leanding zeros +bsr TOS,TOS +xor TOS,31 + +SQRT | a -- b square root @ | a -- b b=32(a) +mov TOS,[TOS] + C@ | a -- b b=8 (a) +movsx TOS,byte [TOS] + W@ | a -- b b=16(a) +movsx TOS,word [TOS] + ! | v d -- 32(d) = v +mov [TOS],NOS + C! | v d -- 8(d) = v +mov byte [TOS],NOSb + W! | v d -- 16(d) = v +mov word [TOS],NOSw + +! | v d -- 32(d)=32(d)+v +add [TOS],NOS + C+! | v d -- 8(d)=8(d)+v +add byte [TOS],NOSb + W+! | v d -- 16(d)=16(d)+v +add word [TOS],NOSw + @+ | d -- d+4 v dword (32bits) -!+ | v d -- d+4 +mov nTOS,[TOS];add TOS,4 + C@+ | d -- d+1 v byte (8bits) -C!+ | v d -- d+1 +movzs nTOS,byte [TOS];add TOS,1 + W@+ | d -- d+2 v word (16bits) +movzs nTOS,word [TOS];add TOS,2 + +!+ | v d -- d+4 +mov [TOS],NOS;add TOS,4 + +C!+ | v d -- d+1 +mov byte [TOS],NOSb;add TOS,1 + W!+ | v d -- d+2 +mov word [TOS],NOSw;add TOS,2 >A | a -- S=a -A@ | -- v -Ac@ | -- v8 S+4 -A@+ | -- v -Ac@+ | -- v8 S+1 -A!+ | v -- v=(s);d+4 -Ac!+ | v -- v=(s);d+1 +mov edi,TOS + A+ | a -- +add edi,TOS + +A@ | -- v +mov TOS,[edi] + +A! | v -- +mov [edi],TOS + >B | a -- d=a -B@ | -- v -B!+ | v -- v=(d);d+4 +mov esi,TOS + B+ | c -- d+c +add esi,TOS + +B@ | -- v +mov TOS,[esi] + +B! | v -- v=(d);d+4 +mov [esi],TOS + MOVE | de sr cnt -- Copia CNT dword de SR a DE MOVE> | de sr cnt -- Copia CNT dword de SR a DE (para atras) +FILL | v sr cnt -- + CMOVE | de sr cnt -- Copia CNT bytes de SR a DE CMOVE> | de sr cnt -- Copia CNT bytes de SR a DE (para atras) +CFILL | v sr cnt -- MEM | -- dir Direccion de inicio de memoria libre +SW | -- w Ancho de pantalla +SH | -- h Alto de pantalla +FRAMEV | -- m Memoria de video + +REDRAW | -- Dibuja nuevo FRAME + UPDATE | s -- s Actualiza las irqel raton, el teclado, sonido, etc, s=sleep time MSEC | -- a milisegundos del sistema TIME | -- s m h hora minutos y segundos @@ -119,22 +304,13 @@ APPEND | d n "filename" -- Graba memoria D en un archivo, N bytes FFIRST | "path" -- fdd/0 Obtiene la primera entrada de la carpeta FNEXT | -- fdd/0 Obtiene la siguiente entrada en la carpeta,0 es fin -SW | -- w Ancho de pantalla -SH | -- h Alto de pantalla -CLS | -- Limpia pantalla -REDRAW | -- Dibuja nuevo FRAME -FRAMEV | -- m Memoria de video -FRAMEVXY | x y -- d - ALPHA | a -- Transparencia (canal alpha) -INK | -- 'i direccion de dibujo +INK' | -- 'i direccion de dibujo OP | x y -- Punto de origen - LINE | x y -- Traza linea CURVE | x y x y -- Traza curva CURVE3 | x y x y x y -- Traza curva - PLINE | x y -- Traza linea poligono PCURVE | x y x y -- Traza curva poligono PCURVE3 | x y x y x y -- Traza curva poligono @@ -146,18 +322,14 @@ BMOUSE | -- b estado del apuntado IKEY! | v -- vector de irq del teclado KEY | -- s ultima tecla pulsada (scancode) - CNTJOY | -- cnt cantidad de joysticks GETJOY | j -- a direccion de los datos de joystick J - SLOAD | "" -- pp carga sonido .mp3,.ogg SPLAY | pp -- suena sonido MLOAD | "" -- mm carga musica .xm MPLAY | mm -- suena musica - OPENURL | url header buff -- buff/0 abre URL - SYSTEM | "cmd" -- status ejecuta cmd de sistema/0 end/-1 check