BBC BASIC es un lenguaje de programación, desarrollado en 1981 como un lenguaje de programación nativo para el Acorn BBC Micro, un ordenador doméstico con CPU MOS Technology 6502, principalmente por Sophie Wilson. Es una adaptación del lenguaje BASIC para el Proyecto de Conocimiento en Informática de la BBC en el Reino Unido.
El BBC BASIC se basa en el viejo Atom BASIC (para el Acorn Atom), ampliado el tradicional BASIC con procedimientos y funciones nombrados, bucles REPEAT-UNTIL, y estructuras IF-THEN-ELSE inspiradas en COMAL. El intérprete incluía también poderosas sentencias para manejar las cuatro salidas de audio del BBC Micro y su pantalla de alta resolución.
Una de las características únicas del BBC BASIC es la presencia de un ensamblador en línea que permite a los usuarios escribir código ensamblador 6502 en sus programas. El ensamblador se integró plenamente en el intérprete BASIC y compartía variables con él. Esto permitió a los desarrolladores escribir, no sólo el código en lenguaje ensamblador, sino combinar código BASIC con ensamblador, por lo que es posible utilizar técnicas de generación de código, e incluso escribir simples compiladores en BASIC.
En Wikipedia podemos ver todas las versiones que se han desarrollado de este lenguaje.
Si ya ha comprado la versión completa de la BBC BASIC para Windows descargue y ejecute Upgrade.exe para actualizar automáticamente a la última versión. Esto sólo funcionará si la versión anterior se haya instalado correctamente. En Windows ™ Vista, Windows 7, Windows 8 / 8.1 o Windows 10 puede que tenga que utilizar ' Ejecutar como administrador ' para realizar la actualización con éxito.
Una vez finalizada la descarga, seleccione Ejecutar el programa si desea instalar BBC BASIC para Windows de inmediato, o Guardar en disco si desea instalarlo más adelante. BBC BASIC para Windows debería funcionar en cualquier Windows ™ 98, Windows Me, Windows 2000, Windows XP, Windows Vista, Windows 7, Windows 8 / 8.1 o Windows 10 PC, y requiere aproximadamente 6 MB de espacio en disco. El precio de la versión completa es de unos 40 $. Tiene muchos programas de ejemplo uno de ellos es el que hay un poco más abajo del conjunto de Mandelbrot.
Es un lenguaje muy documentado y con una muy amplia bibliografia, foros, manuales, web..., todo ello debido en gran medida a Richard Russell.
Existe un interprete compatible con BBC Basic que se llama Brandy basado en la versión V de BBC Basic. Que se puede descargar y viene con algunos ejemplos de código, pero no he sido capaz de ejecutarlos, aunque no me han parecido difíciles de modificar a un Basic estandar.
http://jaguar.orpheusweb.co.uk/branpage.html
Existen versiones del BBC Basic para Windows, Linux, Mac OS-X, Android, MS-DOS y un largo etc. http://mdfs.net/Software/BBCBasic/
REM Fast Mandelbrot Plotting Demonstration with Mouse Control
REM Requires a CPU with SSE support (i.e. minimum Pentium 4)
REM Based on http://www.codeproject.com/KB/recipes/fractalssse.aspx
REM!Crunch
*FLOAT 64
MODE 20
OFF
SYS "SetWindowText", @hwnd%, "Mandelbrot - Left button: drag. " + \
\ "Middle button: zoom out. Right button: zoom in."
ITER = 128
Width% = @vdu.tr%
Height% = @vdu.tb%
Left = -2.200 : Right = 0.800 : Top = -1.2 : Bottom = 1.2
INSTALL @lib$+"ASMLIBC"
DIM bmih{biSize%, biWidth%, biHeight%, biPlanes{l&,h&}, \
\ biBitCount{l&,h&}, biCompression%, biSizeImage%, \
\ biXPelsPerMeter%, biYPelsPerMeter%, biClrUsed%, \
\ biClrImportant%}
bmih.biSize% = DIM(bmih{})
bmih.biWidth% = Width%
bmih.biHeight% = Height%
bmih.biPlanes.l& = 1
bmih.biBitCount.l& = 32
bmih.biSizeImage% = Width%*Height%*4
SYS "CreateDIBSection", @memhdc%, bmih{}, 0, ^Bits%, 0, 0 TO hbm%
IF hbm% = 0 ERROR 100, "Couldn't create DIBSection"
SYS "SelectObject", @memhdc%, hbm% TO oldbm%
SYS "DeleteObject", oldbm%
DIM palette%(ITER)
PROCgradient(0,41,255,100,0,255,255,0)
PROCgradient(42,83,255,255,0,255,100,0)
PROCgradient(84,ITER-1,255,100,0,255,255,0)
PROCassemble
Zoom = 1.0
PanX = 0.0
PanY = 0.0
Changed% = TRUE
a% = 0
REPEAT
IF INKEY(-26) PanX -= Zoom : Changed% = TRUE
IF INKEY(-122) PanX += Zoom : Changed% = TRUE
IF INKEY(-58) PanY += Zoom : Changed% = TRUE
IF INKEY(-42) PanY -= Zoom : Changed% = TRUE
IF INKEY(-64) Zoom /= 1.02 : Changed% = TRUE
IF INKEY(-79) Zoom *= 1.02 : Changed% = TRUE
MOUSE x%, y%, b%
IF a% AND b% AND 1 THEN Zoom /= 1.02 : Changed% = TRUE
IF a% AND b% AND 2 THEN Zoom *= 1.02 : Changed% = TRUE
IF a% AND b% AND 4 THEN
MOUSE ON 134
IF x%<>oldx% OR y%<>oldy% THEN
PanX += (x% - oldx%)/2 * Zoom
PanY += (y% - oldy%)/2 * Zoom
Changed% = TRUE
ENDIF
ELSE
MOUSE ON 0
ENDIF
a% = b%
oldx% = x%
oldy% = y%
IF Changed% THEN
Changed% = FALSE
dx = Zoom * (Right - Left)/Width%
dy = Zoom * (Bottom - Top)/Height%
dx% = FN_f4(dx)
dy% = FN_f4(dy)
x0% = FN_f4((Right + Left)/2 - PanX * dx/Zoom - Width%/2 * dx)
y0% = FN_f4((Bottom + Top)/2 - PanY * dy/Zoom - Height%/2 * dy)
CALL PaintMandelSSE
SYS "InvalidateRect", @hwnd%, 0, 0
ELSE
WAIT 1
ENDIF
UNTIL FALSE
END
DEF PROCgradient(S%,F%,R1&,G1&,B1&,R2&,G2&,B2&)
LOCAL I%,R,G,B
R = R1& : G = G1& : B = B1&
FOR I% = S% TO F%
palette%(I%) = B OR (G << 8) OR (R << 16)
R += (R2&-R1&)/(F%-S%)
G += (G2&-G1&)/(F%-S%)
B += (B2&-B1&)/(F%-S%)
NEXT
ENDPROC
DEF PROCassemble
LOCAL code%,pass%,P%,L%
DIM code% 460,L% -1
FOR pass% = 8 TO 10 STEP 2
P% = (code% + 15) AND -16
ON ERROR LOCAL [OPT FN_asmext
[OPT pass%
.rad dd &40800000 : dd &40800000 : dd &40800000 : dd &40800000
.dx1 dd 0 : dd 0 : dd 0 : dd 0
.dy1 dd 0 : dd 0 : dd 0 : dd 0
.left1 dd 0 : dd 0 : dd 0 : dd 0
.mask dd 0 : dd &FFFFFFFF : dd &FFFFFFFF : dd &FFFFFFFF
.mask1 dd 0 : dd 0 : dd 0 : dd &FFFFFFFF
.mask2 dd 0 : dd 0 : dd &FFFFFFFF : dd &FFFFFFFF
.PaintMandelSSE
mov edx,Height%
mov esi,^palette%(0)
mov edi,[^Bits%]
movss xmm2,[^dx%]
shufps xmm2,xmm2,0
movss xmm3,[^dy%]
shufps xmm3,xmm3,0
movaps [dy1],xmm3
movss xmm4,[^x0%]
shufps xmm4,xmm4,0
movss xmm5,[^y0%]
shufps xmm5,xmm5,0
movaps xmm0,xmm2
andps xmm0,[mask1]
movaps xmm1,xmm2
andps xmm1,[mask2]
addps xmm0,xmm1
addps xmm0,xmm2
andps xmm0,[mask]
addps xmm4,xmm0
movaps [left1],xmm4
addps xmm2,xmm2
addps xmm2,xmm2
movaps [dx1],xmm2
movaps xmm7,[rad]
.YLOOP
movaps xmm4,[left1]
mov ebx,Width%
.XLOOP
movaps xmm0,xmm4
xorps xmm6,xmm6
movaps xmm1,xmm5
mov ecx,ITER
.ILOOP
movaps xmm2,xmm0
mulps xmm0,xmm0
movaps xmm3,xmm1
addps xmm1,xmm1
mulps xmm1,xmm2
movaps xmm2,xmm0
mulps xmm3,xmm3
addps xmm1,xmm5
subps xmm0,xmm3
addps xmm2,xmm3
cmpleps xmm2,xmm7
addps xmm0,xmm4
movmskps eax,xmm2
test eax,eax
jz Exit
andps xmm2,xmm7
addps xmm6,xmm2
sub ecx,1
jnz ILOOP
.Exit
cvttss2si eax,xmm6
mov eax,[esi + eax]
mov [edi],eax
shufps xmm6,xmm6,&E5
cvttss2si eax,xmm6
mov eax,[esi + eax]
mov [edi+4],eax
shufps xmm6,xmm6,&E6
cvttss2si eax,xmm6
mov eax,[esi + eax]
mov [edi+8],eax
shufps xmm6,xmm6,&E7
cvttss2si eax,xmm6
mov eax,[esi + eax]
mov [edi+12],eax
add edi,16
addps xmm4,[dx1]
sub ebx,4
ja near XLOOP
addps xmm5,[dy1]
sub edx,1
jnz near YLOOP
ret
]
NEXT pass%
ENDPROC
DEF FN_f4(A#) : LOCAL A%,P% : PRIVATE F%
IF F%=0 THEN
DIM P% 10
[OPT 2
.F%
mov esi,[ebp+2]:mov edi,[ebp+7]
fld qword [esi]:fstp dword [edi]
ret
]
ENDIF
A#*=1.0# : CALL F%,A#,A%
=A%
Hay que tener en cuenta que no es compatible en absoluto con ningún otro Basic. Existe traductor de QBasic a BBC Basic, pero no al revés.
https://es.wikipedia.org/wiki/BBC_BASIC
http://www.bbcbasic.co.uk/bbcbasic.html
http://bb4w.wikispaces.com/
http://bbcbasic.conforums.com/
https://www.facebook.com/bbcbasic
http://www.rtrussell.co.uk/
http://www.tristone.co.uk/davespace/basic/index.html
https://www.ncus.org.uk/
http://rosettacode.org/wiki/Category:BBC_BASIC
https://en.wikipedia.org/wiki/BBC_BASIC
http://www.alphr.com/features/91575/bbc-basic-the-peoples-language
https://es.wikipedia.org/wiki/BBC_BASIC
https://es.wikipedia.org/wiki/BBC_BASIC
http://www.bbcbasic.co.uk/bbcbasic.html
http://bb4w.wikispaces.com/
http://bbcbasic.conforums.com/
https://www.facebook.com/bbcbasic
http://www.rtrussell.co.uk/
http://www.tristone.co.uk/davespace/basic/index.html
https://www.ncus.org.uk/
http://rosettacode.org/wiki/Category:BBC_BASIC
https://en.wikipedia.org/wiki/BBC_BASIC
http://www.alphr.com/features/91575/bbc-basic-the-peoples-language
https://es.wikipedia.org/wiki/BBC_BASIC
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.