Kama Basic II ------------- Esta es la segunda version de la extensión al Basic del Spectrum por Kamasoft. Escrita en 1988, es una autentica mejora respecto de la version anterior, ya que ahora si se trata de un nuevo juego de sentencias Basic, todas prefijadas por el punto(.) a diferencia de antes cuando se usaban variables predefinidas y ejecutadas todas con LPRINT USR. Hay nuevos comandos para manejar la memoria, pero a cambio han desaparecido las instrucciones Fill, Watch y Alarm que ofrecian la posibilidad de rellenar figuras, ver la hora en la pantalla así como ir a una subrutina especifica de cumplirse cierto tiempo especificado. La cinta del Kamabasic se divide en tres partes: 1- una rutina de carga dentro de una linea 0, con un texto de presentacion 2- la rutina en código máquina 3- el programa de demostracion que nos ofrece las sigtes opciones (en ingles): a- ejecutar el demo b- ver cada comando, su sintaxis y lo que hacen (en eslovaco) c- salvar el codigo maquina del Kamabasic d- ver informacion (en eslovaco)(*) e- resetear la computadora Para mover el cursor por la pantalla, se usan las teclas O,P,Q,A y M para seleccionar una opcion. Cuando se intenta salir con BREAK, el programa da el mensaje "No!" y luego pide que uno elija dos opciones: 1- iniciar todo, 2-detener y salir. (*)La información es la sigte: KAMABASIC - es una version extendida del Basic que apunta al plano gráfico, pero también ofrece otros comandos igualmente utiles. Rand. USR 60000 inicializa el sistema y sus comandos son entrados via "." y pueden ser abreviados usando " ' ".(...sigue texto...) Sintaxis: .comando {parametros} Comandos: SOUND, NOTE, CLANG, BRIM, ERROR, WINDOW, CLEAN, VANISH, DISC, SCROLL, TRANS, SIT, EXCHAN, MOTION, ROUND, PROC, END, RESCALE, ROTARE, ORIENT, DIMENS, TAPETA, INCR, ATTRS, LDIR, ATRANS, KOMP, DEKOMP, COMPACT, POKE, LOAD, MODE. Los comandos pueden ser tipeados ya sea en mayusculas o minusculas, y como forma abreviada nos permite usar las dos o tres primeras letras seguidas del apóstrofe(') pudiendo o no seguirle un espacio antes del primer parametro de la sentencia. Ejemplos: .incr es igual que .INCR .DI' es igual que tipear .dim' ó .dimens .mode1 es igual que .MODE 1 La primera línea del programa DEMO es la siguiente: 1 CLEAR 47699: Randomize USR 60000: LET in = 47700: REM = the address window in the working memory. Sound sintaxis: .SOUND a,b,c,d donde: a = frequencia tonal b = duracion del tono c = rango del tono d = 0 / 1 Ejemplo: .SO'h*5,h,h*1.5,0 Note sintaxis: .NOTE a,b,c donde: a = duracion de la nota b = frequencia tonal 1 c = frequencia tonal 2 Ejemplo: .note250,h,100 Clang sintaxis: .CLANG a,b,c,d donde: a = duracion del tono b = frequencia tonal c = Pitch d = duracion de la harmonia Ejemplo: .clang h*5,h*15,h*3,h*10 Brim sintaxis: .BRIM a,b,c donde: a = largo b = densidad (maximo 255) c = color (0-7) Esta orden genera efectos en el Borde, como los causados al cargar un programa. Ejemplo: .br'15,5,21 Error sintaxis: .ERROR x donde: x = numero de linea donde se salta de darse un error PEEK 23681 - devuelve el código del error. Window sintaxis: .WINDOW o,x,y,x2,y2 donde: o = número de la ventana (0-9) x, y = coordenadas iniciales x2 = largo de la ventana Y2 = altura de la ventana Esta orden sirve para definir una ventana. Ejemplo: .wi'5,11,7,23,1 Clean sintaxis: .CLEAN o donde: o = numero de la ventana a borrar Equivale a CLS pero solo con ventanas. Vanish sintaxis: .VANISH o,d donde: o = numero de la ventana d = tipo de borrado (1-4) Hace que se desvanezca el contenido de una ventana 'o' segun la opcion 'd'. Disc sintaxis: .DISC o,a donde: o = numero de la ventana a = atributos (0-255) Hace que la ventana 'o' se rellene con el atributo 'a'. Ejemplo: .disc7,49 Scroll sintaxis: .SCROLL o,s,c donde: o = numero de la ventana s = direccion: 1 derecha, 2 izquierda, 3 arriba, 4 abajo. c = cuantos puntos de pixeles debe moverse Esta orden mueve el contenido de una ventana segun la direccion indicada por 's'. Ejemplo: .scr'5,2,70 Trans sintaxis: .TRANS o,m,z,w donde: o = ventana m = direccion de memoria ram z = 0/1 w = efecto segun valor: 0 (and), 1 (or), 2 (xor), 3 (solo transfiere) Mueve el contenido de la ventana a la memoria si z=1, lo opuesto si z=0. Ejemplo: .tr'3,po,0,1 Sit sintaxis: .SIT o,a,b donde: o = ventana a, b = coordenadas a las que se transferirá la ventana. Exchan sintaxis: .EXCHAN o1,o2 donde: o1, o2 = ventanas cuyo contenido será intercambiado Motion sintaxis: .MOTION q,m,s,c donde: q = ancho de la ventana m = posición de memoria de la ventana a mover s = direccion (ver .SCROLL) c = numero de pixeles que se moverá Ejemplo: .MOT'5,59290,1,8 Round sintaxis: .ROUND o,s,c donde: o = ventana s = direccion (ver .SCROLL) c = numero de pixeles Esta sentencia mueve la pantalla segun el parametro 's'. Ejemplo: .round 2,1,210 Proc sintaxis: .PROC x Salta al número de línea 'x' donde empieza un procedimiento dado. .END marca el fin de un procedimiento. Nota: no hay ejemplos en el Demo sobre el uso de estas dos instrucciones. Rescale sintaxis: .RESCALE o,d,m donde: o = ventana d = 1 (ancho), 2 (largo), 3 (reduce) m = posicion de memoria donde se guarda la ventana a re escalar. Rotary sintaxis: .ROTARY o,u,m donde: o = ventana u = grados que girará la figura m = posicion de memoria donde se guarda la ventana cuyo contenido sera rotado. Orient sintaxis: .ORIENT o,m,r donde: o = ventana m = posicion de memoria r = 1 (reverso), 2 (de derecha a izquierda), 3 (giro de 90 grados) Orienta o hace girar la figura de una ventana 'o' dada segun el parametro 'r'. Ejemplo: .or'0,45000,1 Dimens sintaxis: .DIMENS o,p donde: o = ventana p = numero en pixeles añade puntos 'p' en el espacio para dar dimension a las figurs dentro de la ventana 'o'. Tapeta sintaxis: .TAPETA on,mm,r on = ventana mm = posicion de memoria de la matriz predefinida (por ejemplo: USR "A") r = 0 (solo transfiere), 1 (and), 2 (or) Usado para darle fondo o efecto a una ventana y a su contenido. Ejemplo: .tap'3,USR"a",2 Incr sintaxis: .INCR x,y,a,b,a$ donde: x, y = coordenadas a = ancho (eje x) b =altura (eje y) a$ = cadena de texto Permite imprimir ampliando o reduciendo textos en la pantalla. Ejemplo: .in'40,160,1,2,"Dart" Attrs sintaxis: .ATTRS o,s donde: o = ventana s = direccion (ver .SCROLL) Mueve los atributos de color. Ldir sintaxis: .LDIR m,n,k donde: m = memoria n = hacia donde k = cantidad a mmover Esta orden sirve para transferir (Ldir = load direction) bloques de datos. Ejemplo: .ldir0,16384,6144 Atrans sintaxis: .ATRANS o,m,y donde: o = ventana m = memoria y = 0/1 Transfiere datos de la ventana a la memoria si 'y=1', lo opuesto si 'y=0'. Ejemplo: .atr'2,0,0 Komp sintaxis: .KOMP o,m donde: o = ventana m = memoria Esta orden es muy util para la compresion de ventanas. Dekomp sintaxis: .DEKOMP o,m Hace lo opuesto a .KOMP, descomprime las ventanas. .COMPACT Esta rutina comprime el programa hasta 1/4, pero a expensas de la velocidad. Poke sintaxis: .POKE a,b donde: a = posicion de memoria b =un numero de 16-bits Equivale a DOKE o DPOKE (doble poke) de otros Basics. Ejemplo: .poke19609,INT(RND*65535) Load sintaxis: .LOAD m,b donde: m = memoria b = longitud Esta orden permite trabajar con bloques de memoria Mode sintaxis: .MODE a donde: a = 0/1 Genera 42 caracteres por linea (1), o vuelve a 32 caracteres por linea (0). A continuación va el fragmento del listado del programa demostrativo, con las sentencias explicadas en eslovaco, dentro de líneas DATAs. 1 CLEAR 47699: RANDOMIZE USR 60000: LET po=47700: REM {vi}po=adresa pracovneho okna v pamati.{vn} 3000 DATA "K A M A B A S I C - rozsirena verzia basicu. Je zamerany prevazne na grafiku no su v nom aj niektore ine uzitocne prikazy. Inicializacia RANDOMIZE USR 60000. Prikazy sa vkladaju cez ~.~ a je ich mozne skracovat pomocou ~'~. Pozdravujem Ludovita Witteka a dakujem za komunikacku BUKAPAO (Ultrasoft /BRATISLAVA/).Uz je uhraty.. Niekolko zaujimavych POKE : NORTH STAR nesmrtelnost 48371,135 stale natiahnuta zbran 43860,0; CHRONOS 56906,0 a 56910,201;TUBARUBA 27933,0." 3015 DATA "SOUND a,b,c,d\@\@a-frekvencia tonu\@b-trvanie tonu\@c-rozpatie tonu\@d- 0-stupavy ton \@ 1-klesavy ton#" 3020 DATA "NOTE a,b,c\@\@a-trvanie suzvuku\@b-frekvencia 1.tonu\@c-frekvencia 2.tonu#" 3025 DATA "CLANG a,b,c,d\@\@a-trvanie tonu\@b-frekvencia tonu\@c-vyska tonu\@d-cas trvania celeho\@suzvuku#" 3030 DATA "BRIM a,b,c\@\@a-dlzka\@b-hustota (max 255)\@c-farba(0-7)\@\@ Border efekt.#" 3035 DATA "ERROR x\@\@x- cislo riadku kde sa ma po chybe skocit\@\@ PEEK 23681 -kod chyby#" 3040 DATA "WINDOW o,x,y,x2,y2\@\@o-cislo okna(0-9)\@x,y-suradnice zaciatku\@x2-dlzka okna \@y2-vyska okna\@\@ Definovanie okna.#" 3045 DATA "CLEAN o\@\@o-cislo okna\@\@ Mazanie okna#" 3050 DATA "VANISH o,d\@\@o-cislo okna\@d-druh miznutia (1-4)#" 3055 DATA "DISC o,a\@\@o-cislo okna\@a-atributy (0-255)\@\@ Vyplnenie okna atributmi.#" 3060 DATA "SCROLL o,s,c\@\@o-cislo okna\@s-smer\@c-o kolko bodov sa ma\@obraz posunut#" 3065 DATA "TRANS o,m,z,w\@\@o-cis.okna\@m-adresa v pamati\@z -ak 1 => tak z okna do\@pamate; ak 0=>tak z pamatedo okna\@w-0=and;1=or;2=xor;3=iba prenos#" 3070 DATA "SIT o,a,b\@\@o-cislo okna\@a,b-suradnice na ktore sa okno prenasa#" 3075 DATA "EXCHAN o1,o2\@\@o1-okno 1.\@o2-okno 2.\@\@ Vymena okien.#" 3080 DATA "MOTION q,m,s,c\@\@q-sirka okna\@m-adresa okna v pamati\@s-smer \@c-kolko bodov#" 3085 DATA "ROUND o,s,c\@\@o-cislo okna\@s-smer\@c-kolko bodov\@\@ Rollovanie okna.#" 3090 DATA "PROC x\@\@x-cislo riadku kde sa ma\@po kazdom prikaze skakat#" 3095 DATA "END - oznacenie konca\@procedury#" 3100 DATA "RESCALE o,d,m\@\@o-c. okna\@d-1=>zvacsenie do sirky\@d-2=>zvacsenie do vysky \@d-3=>zmensi\@m-adresa okna v pamati#" 3105 DATA "ROTARE o,u,m\@\@o-cislo okna\@u-o kolko stupnov sa ma\@okno otocit\@m-adresa#" 3110 DATA "ORIENT o,m,r\@\@o-cislo okna\@m-adresa v pamati\@r=1 => opacne \@r=2 => z prava do lava\@r=3 => o 90 stup. v rovine#" 3115 DATA "DIMENS o,p\@\@o-cislo okna\@p-natiahnutie okna o p\@bodov do priestoru#" 3120 DATA "TAPETA o,mm,r\@\@o-cislo okna\@mm-adresa matice\@ napr. USR~a~\@r-0=>iba prenos; \@r-1=>and\@r-2=>or#" 3125 DATA "INCR x,y,a,b,a$\@\@x,y-suradnice\@a-zvacsenie po x-ovej osi \@b-zvacsenie po y-ovej osi\@a$-retazec#" 3130 DATA "ATTRS o,s\@\@o-cislo okna\@s-smer\@\@ Scrollovanie atributov.#" 3135 DATA "LDIR m,n,k\@\@m-odkial\@n-kde\@k-kolko\@\@ Blokovy presun.#" 3140 DATA "ATRANS o,m,y\@\@o-c. okna\@m-adresa v pamati\@y-1=>z okna do pamate\@y-0=>z pamate do okna #" 3145 DATA "KOMP o,m\@\@o-cislo okna\@m-adresa\@\@ Komprimacia okna. #" 3150 DATA "DEKOMP o,m\@\@o-cislo okna\@m-adresa ulozeneho kna \@\@Dekomprimacia okna.#" 3155 DATA "COMPACT - rutina, ktora skrati program o 1/4 na \@ukor rychlosti.#" 3160 DATA "POKE a,b\@\@a-adresa\@b-16-bitove cislo\@\@Umozni ulozit do pamate az 16-bitove cislo.#" 3165 DATA "LOAD m,b\@\@m-adresa\@b-dlzka\@\@Umozni nahrat bezhlavic- \@kovy blok.#" 3170 DATA "MODE a\@\@a-1=> 42 znakov na riadok\@a-0=> 32 znakov na riadok#" Francisco Leon zx_if1@hotmail.com