Autor Tema: Compilador para cualquier SO  (Leído 4779 veces)

pablor

  • Visitante
Compilador para cualquier SO
« en: Febrero 23, 2007, 09:31:23 pm »
Hola a todos.

Desde hace mas de un a?o que estoy desarrollando un lenguaje de programacion, basado en FORTH y por ahora orientado a los VideoJuegos. se llama R4 y lo pueden ver en

http://www.reda4.org

Ahora estoy terminando el compilador hecho en el mismo lenguaje (ahora funciona sobre un interprete) y la coneccion con el SO son 11 rutinas en asm muy especificas y claras (por ejemplo obtener la hora, obtener la direccion de la pantalla, etc)
El primer SO que le hice la interface es a WIN porque estoy desarrollando en una maquina con win, pero ya empece a hacer la interface con un SO llamado DexOS

http://www.dex4u.com

La interface con el SO son esas 11 rutinas en assembler, en win son 10kb (400 lineas) en FASM
Si alguien quiere que R4 compile para algun SO propio, no tiene mas que escribirme.
Los programas que funcionan actualmente en el interprete quedan compilados asi que la prueba son los mismos juegos y utilidades que obtienen de la pagina.

espero que les guste.

Pablo

 

Desconectado HQH

  • Administrator
  • Miembro Imprescindible
  • *****
  • Mensajes: 1.856
    • Ver Perfil
Compilador para cualquier SO
« Respuesta #1 en: Febrero 25, 2007, 11:38:36 am »
Muy buena la idea, seria buena idea portarlo cuando tengamos parte del SO en claro o para alguno de los ya existentes de amigos (Toro, OctaviOS).

Ademas, pongo un enlace a la seccion de creacion de videojuegos, ya que R4 me parece un lenguaje interesante.

Un saludo.

Desconectado JMA_SP

  • Moderator
  • Miembro Imprescindible
  • *****
  • Mensajes: 752
    • Ver Perfil
Compilador para cualquier SO
« Respuesta #2 en: Febrero 25, 2007, 01:20:10 pm »
Primero de todo bienvenido y gracias por postear aqu? tu compilador. Estuve leyendolo y la primera ocurrencia fue la de trasladar el post directamenta a la secci?n de juegos pero no tengo acceso.
En cuanto al resto es cuesti?n de que lo comentes a Octavio o bien a Matias con sus respectivos sistemas operativos. En cuanto a octavio el tiene su propio OCTASM  todo para ensamblador y por parte de Mat?as en sus sistema TORO lo basa en Freepascal (utilizando su run time library).
No coment? nada porque de FORTH  no tengo ni la m?s leve idea, por tanto poco puedo aportar, pero la sola experiencia en crear un compilador / int?rprete les puede venir muy bien a ambos.
En lo poco que mir? de los dos enlaces est? bastante interesante, he a?adido DexOS al listado de sistemas operativos funcionales y curiosamente observ? que uno de los desarrolladores era bubach con nick similar al programador que cedi? el espacio para albergar el sistema de Octavio:  http://octaos.joox.net , no se si ser? el mismo...

Lo dicho un saludo y bienvenido. ;)  

pablor

  • Visitante
Compilador para cualquier SO
« Respuesta #3 en: Febrero 25, 2007, 02:24:14 pm »
Bueno, gracias a los dos por las respuesta...

Realice algunas prueba con el OS de octavio y no pude bootear, con Solar tambien me paso lo mismo...
El SO que mejor se ha comportado es DexOs, me imagino que sera algun detalle ya que los SO son bastante chicos, en fin.
Ahora estoy trabado porque Dex captura el teclado y hace algunas modificaciones al scancode y yo lo necesito mas basico, curioso.

Me interesa la utilizacion de la memoria en FLAT o tambien llamado modo UNREAL (sin segmentacion ni paginacion), y sin proteccion de ningun tipo, tengo documentacion y ejemplos si alguien los quiere, cuanto mas chico y con menos servicios mejor.

Creo que le puede servir a alguien que quiera hacer un SO disponer de un lenguaje con solo escribir un peque?o codigo, ya logre hacer un disco que boteara con R4 pero por ahora no funciona por el rollo del teclado.

saludos !
 

Desconectado JMA_SP

  • Moderator
  • Miembro Imprescindible
  • *****
  • Mensajes: 752
    • Ver Perfil
Compilador para cualquier SO
« Respuesta #4 en: Febrero 25, 2007, 03:04:29 pm »
Si claro, el problema con la versi?n de Octavio es que actualmente la imagen ISO parece no arrancar, tal como el indica hay dos posibilidades para que arranque pero no he tenido muchas ganas de ponerme con el tema. Desc?rgate la versi?n en disquete que si va mejor, en comparaci?n con DexOS yo creo que te puede ser bastante ?til.
Por otro lado l?stima que no te diese por el compilador FreePascal, tiene mucho potencial y su ayuda para con Mat?as podr?a resultar en un sistema bastante afianzado.
Respecto a DexOS me descargu? la versi?n 0.0.1 mediante el ISO y ciertamente arranca, pero no me funcionaba ni la opci?n settings, networking y en el modo l?nea de mandatos se me colgaba al poco rato en cuanto tecleaba 4 cosas, sobre todo coincidiendo con la ?ltima l?nea en pantalla. Supongo que utiliza FAT12 y los mandatos son similares al DOS, incluyendo el famoso PROMT del sistema A:\>
En respuesta a la simplicidad de un sistema en modo plano sin segmentaci?n o al menos un solo segmento a?adiendole un desplazamiento u offset de 4 Gbytes es interesante de hecho he leido que se hicieron juegos para este modo.
Ser?a cuesti?n de ver como funcionan en el las interrupciones, cuales no dan problemas que por ejemplo hagan salir de dicho modo, pero a?n as? la cuesti?n es que no admitir?a la multitarea, aunque no es indispensable. He estado leyendo un poco y los pasos a seguir no son demasiados, entrar en modo protegido, cambiar algunos valores y retornar (habilitar la l?nea A20). Creo que as? tendriamos acceso a toda la memoria de video en modo plano (FLAT)  :)  y la velocidad debe ser bastante buena. Pr?cticamente en cuanto se tuviese implementada la funci?n poner pixel en modo de video, las dem?s primitivas es ya solo cuestion de tiempo.
Lo que m?s interesante veo yo ahora mismo es la opci?n de un compilador de generar su c?digo equivalente en ensamblador o de ver los nombres p?blicos de las funciones. Tanto para C como para FreePascal la ?ltima opci?n la tiene, la de generar ficheros en ensamblador es ya un poco m?s dif?cil, freepascal si lo permite, porque enlazar con un fichero objeto es otra posibilidad pero prefiero el ensamblador en fichero listado.

Un saludo.
« última modificación: Febrero 25, 2007, 03:10:44 pm por JMA_SP »

pablor

  • Visitante
Compilador para cualquier SO
« Respuesta #5 en: Febrero 25, 2007, 07:49:39 pm »
Voy a probar nuevamente la version de Octavio, yo lo habia hecho con diskette y me tiraba un error..
En Dex inclusive ya compile programas (los podes ver en los foros)
Yo antes programaba en Pascal, C etc.  asi que no tengo problemas con codigos en estos lenguajes.
La multitarea se implementa de forma cooperativa con el lenguaje mismo, al igual que los drivers de cualquier cosa, el SO ideal para mi lenguaje es bien chico y pelado.
Las primitivas ( y no tanto ) para graficar ya las tengo hechas, lo unico que necesito es setear el modo grafico (en 32bits de color), saber cual es el comienzo de la Memoria de Video y realizar una copia de memoria a memoria de video, estas rutinas forman parte del conjunto de 11 que necesito para hacer andar el programa compilado.
Lo que genera mi compilador es el codigo en FASM, mas adelante compilara en memoria directo, y este se ensambla para cada SO.

Mi proyecto es de codigo abierto asi que no tengo problema en subir cosas, ahora mismo tengo funcionando solo en win, si quieren posteo algo para que lo vean funcionando y vean el codigo.

Me alegra encontrar gente que sabe como ustedes  :)



 

Desconectado octavio

  • Novato
  • *
  • Mensajes: 39
    • Ver Perfil
Compilador para cualquier SO
« Respuesta #6 en: Febrero 27, 2007, 12:36:47 am »
> y me tiraba un error..
podrias dar mas detalles.
En principio mi sistema no usa ejecutables ,pero si puedes compilar a formato elf relocatable
y describirme las funciones que require, yo mismo puedo portarlo.
Aunque no creo que nadie lo use, yo programo en Octasm y a ti no te funciona mi sistema operativo.
Pero tengo curiosidad por ver como es el lenguaje Forth.
 

pablor

  • Visitante
Compilador para cualquier SO
« Respuesta #7 en: Febrero 27, 2007, 02:56:43 am »
Hola Octavio,
me parecio buenisimo tu sistema de compilar on the fly..curiosamente ahora estoy generando codigo para FASM y podria tirar el codigo con tu sintaxis (muy buena) seria muy facil.

lo probe otra vez y me una unos fd_error... yo pense que se trababa pero esperando un poco comenzo el sistema, deben ser los discos de $%$$ estos...asi que funciona OK !!
Si te interesa conocer un poco de FORTH te recomiendo el libro Thinking Forth ( http://thinking-forth.sourceforge.net/ ), mi lenguaje desciende de ColorForth ( http://www.colorforth.com ).

Aqui envio un paquete con la ultima version..para que veas como es la cosa

El programa compilado es el de dibujo vectorial,  podes ver el codigo en el paquete de mi pagina,
el compilador genera cod.asm y dat.asm y la inteface es r4win.asm (para win) y r4dex.asm (para Dex),  los .bat compilan el ejecutable, las funciones estan casi completas en win.

bueno, cualquier cosa escribime, te felicito por tu SO !!

Pablo








 

Z0rr0

  • Visitante
Compilador para cualquier SO
« Respuesta #8 en: Febrero 28, 2007, 03:59:26 am »
Hola Pablo con respecto a TORO 1.1.3 , se implementa como cualquier sistema operativo los servicios del kernel a traves de las llamadas al sistema o trampas  , se implementan las llamadas Open,Write,Read,Close , etc .
Los puedes ver en la RTL que he hecho para FPC sobre TORO , la portacion de tu compilador seria bastante facil. Lo unico que Toro ejecuta solo archivos en formato COFF32.
Un saludo Matias Vara.
 

Desconectado octavio

  • Novato
  • *
  • Mensajes: 39
    • Ver Perfil
Compilador para cualquier SO
« Respuesta #9 en: Marzo 04, 2007, 09:47:21 am »
Citar
Hola Octavio,
me parecio buenisimo tu sistema de compilar on the fly..curiosamente ahora estoy generando codigo para FASM y podria tirar el codigo con tu sintaxis (muy buena) seria muy facil.

lo probe otra vez y me una unos fd_error... yo pense que se trababa pero esperando un poco comenzo el sistema, deben ser los discos de $%$$ estos...asi que funciona OK !!
Si te interesa conocer un poco de FORTH te recomiendo el libro Thinking Forth ( http://thinking-forth.sourceforge.net/ ), mi lenguaje desciende de ColorForth ( http://www.colorforth.com ).

Aqui envio un paquete con la ultima version..para que veas como es la cosa

El programa compilado es el de dibujo vectorial,  podes ver el codigo en el paquete de mi pagina,
el compilador genera cod.asm y dat.asm y la inteface es r4win.asm (para win) y r4dex.asm (para Dex),  los .bat compilan el ejecutable, las funciones estan casi completas en win.

bueno, cualquier cosa escribime, te felicito por tu SO !!

Pablo

No hay nigun archivo que explique lo que hace el programa ni como utilizarlo.
Es curioso que hay un archivo que usa el codigo 13 como cambio de linea, lo he tenido que cambiar por el 10.
Despues he podido compilar (con mi sistema operativo) la version para Dex pero no la de windows porque falta
el archivo 'macros.inc'. Genera 1.3MB de codigo ,supongo que por el uso de memoria estatica para el bufer de video,creo que deberias declararlo como virtual.
Ahora creo que solo falta cambiar el archivo dex.asm para que funcione en mi sistema, correcto?
?Y el codigo del compilador?
?cuando dices que lo has portado a dex, te refieres a la demo o al compilador?


Bueno, ya hice una prueba en mi sistema operativo, se abre una ventanita y sale el mismo dibujo que en windows ,pero eso es todo. Me falta informacion sobre el interface los codigos de sysevent etc...
He visto que en r4dex.asm muchas rutinas solo tienen un 'ret'
es porque el port esta incompleto, ?no?
Aunque mi sistema por ser multitarea se parece mas a windows que a dex4u
no he mirado el codigo para windows porque tampoco conozco las apis de windows.
 
« última modificación: Marzo 04, 2007, 11:32:08 am por octavio »

pablor

  • Visitante
Compilador para cualquier SO
« Respuesta #10 en: Marzo 04, 2007, 03:10:43 pm »
Bueno,

el codigo compilado es r4dibujo, es un programa para dibujar graficos vectoriales multicolores, yo no me di cuenta, pero utiliza los archivos, ahora subo uno que utiliza solo graficos, mas simple, xe.txt es el fuente en R4
Como tuve que borrar cosas para llegar al limite maximo de archivos de este foro, se ve que borre de mas..
Lo del cod. 13, acordate que yo estoy trabajando en win.
Que raro que genere 1.3 MB de codigo, en win y dex genera 113kb, quizas cambiaste el orden de declaracion, fijate que tube cuidado en que estas declaraciones quedaran al final, para que reserve la memoria cuando carga el archivo y no antes.

El compilador esta escrito en R4, si queres te lo envio, mi plan es publicar una version cuando tenga algunas cosas mas y este un poco mas pulido el ambiente.
A ver si esto aclara el panorama... lo que podes bajarte de mi pagina es un interprete que toma el codigo R4, por ejemplo xe.txt y lo ejecuta, ahora tengo un compilado que toma el codigo xe.txt y genera dos archivos, cod.asm y dat.asm, estos dos archivos utilizan llamadas a una inteface, no al sistema operativo, por lo que es posible general el ASM y, dependiendo de la inteface, compilar para varios SO.
La inteface para win es R4win.asm, para Dex es R4dex.asm (los ret estan porque esta incompleta), quizas terminemos teniedo un R4octa.asm..:)

Vo a hacer referencia a r4win.asm porque esta mas completo, no importan las llamadas al win..
Los eventos funcionan asi:

UPDATE
actualiza los eventos...teclado y mouse por ahora y luego salta a un evento si ocurre, estos eventos son definidos en el programa.

teclado:
si hay un scancode en la entrada, tanto apretar como soltar la tecla (scancodes or $80)
en SYSKEY guardo el scancode and $7f (no guarda si es soltando o apretando)
y en SYSEVENT cargo la direccion que se encuentra en SYSKEYM+scancode*4
(lineas 384-401)

mouse:
identifica 3 eventos,
apretar cualquier boton,
mover el raton (con cualquier boton apretado) y
soltar cualquier boton
fijate que tuve que hacer algunas comprobaciones ya que los eventos de win no son exactamente estos.
(lineas 359-383)
en cada uno de los tres eventos guardo la posicion del mouse
SYSXYM (parte alta Y parte baja X)
SYSBM boton/s apretados
y cargo SYSEVENT con lo que tiene SYSMM,SYSME,SYSMS (Move,End y Start)

cuando termina de comprobar esto se fija si SYSEVENT tiene 0, si es asi termina, sino
salto a esta direccion
(lineas 142-149)

Espero haber sido claro.. No dudes en escribirme
me muero de ganas de utilizar R4 con  OctaOs !!!

Saludos..
Pablo


 

Desconectado octavio

  • Novato
  • *
  • Mensajes: 39
    • Ver Perfil
Compilador para cualquier SO
« Respuesta #11 en: Marzo 04, 2007, 04:58:05 pm »
Citar
Bueno,

el codigo compilado es r4dibujo, es un programa para dibujar graficos vectoriales multicolores, yo no me di cuenta, pero utiliza los archivos, ahora subo uno que utiliza solo graficos, mas simple, xe.txt es el fuente en R4
Como tuve que borrar cosas para llegar al limite maximo de archivos de este foro, se ve que borre de mas..
Lo del cod. 13, acordate que yo estoy trabajando en win.
Que raro que genere 1.3 MB de codigo, en win y dex genera 113kb, quizas cambiaste el orden de declaracion, fijate que tube cuidado en que estas declaraciones quedaran al final, para que reserve la memoria cuando carga el archivo y no antes.

El compilador esta escrito en R4, si queres te lo envio, mi plan es publicar una version cuando tenga algunas cosas mas y este un poco mas pulido el ambiente.
A ver si esto aclara el panorama... lo que podes bajarte de mi pagina es un interprete que toma el codigo R4, por ejemplo xe.txt y lo ejecuta, ahora tengo un compilado que toma el codigo xe.txt y genera dos archivos, cod.asm y dat.asm, estos dos archivos utilizan llamadas a una inteface, no al sistema operativo, por lo que es posible general el ASM y, dependiendo de la inteface, compilar para varios SO.
La inteface para win es R4win.asm, para Dex es R4dex.asm (los ret estan porque esta incompleta), quizas terminemos teniedo un R4octa.asm..:)

Vo a hacer referencia a r4win.asm porque esta mas completo, no importan las llamadas al win..
Los eventos funcionan asi:

UPDATE
actualiza los eventos...teclado y mouse por ahora y luego salta a un evento si ocurre, estos eventos son definidos en el programa.

teclado:
si hay un scancode en la entrada, tanto apretar como soltar la tecla (scancodes or $80)
en SYSKEY guardo el scancode and $7f (no guarda si es soltando o apretando)
y en SYSEVENT cargo la direccion que se encuentra en SYSKEYM+scancode*4
(lineas 384-401)

mouse:
identifica 3 eventos,
apretar cualquier boton,
mover el raton (con cualquier boton apretado) y
soltar cualquier boton
fijate que tuve que hacer algunas comprobaciones ya que los eventos de win no son exactamente estos.
(lineas 359-383)
en cada uno de los tres eventos guardo la posicion del mouse
SYSXYM (parte alta Y parte baja X)
SYSBM boton/s apretados
y cargo SYSEVENT con lo que tiene SYSMM,SYSME,SYSMS (Move,End y Start)

cuando termina de comprobar esto se fija si SYSEVENT tiene 0, si es asi termina, sino
salto a esta direccion
(lineas 142-149)

Espero haber sido claro.. No dudes en escribirme
me muero de ganas de utilizar R4 con  OctaOs !!!

Saludos..
Pablo
Ocupa 1.3MB al compilar en memoria pero solo 110KB al compilar en un archivo.
Si he entendido bien sysevent es un puntero a funcion
luego voy a probarlo.
respecto a los codigos del teclado, parece que usas directamente los codigos del teclado,
esto puede crear confusion al usar teclados en otros idiomas ,u otro tipo de hardware.
por que no usas los codigos ya traducidos como hacen todos los programas?
En windows he conseguido hacer algun dibujito pero estaria bien que escribieses un peque?o manual.

respecto al cambio de linea, dos y windows usan los codigos 13,10
y linux solo 10
mis programas admiten las dos opciones pero no el codigo 13 solo.
no conozco ningun otro programa que use solo el codigo 13
y el archvo cod.asm no se ve bien con el notepad de windows.
« última modificación: Marzo 04, 2007, 05:12:56 pm por octavio »

pablor

  • Visitante
Compilador para cualquier SO
« Respuesta #12 en: Marzo 04, 2007, 05:47:59 pm »
exacto sysevent es la direccion del evento
uso el scancode directo, el mismo lenguaje hace la conversion a ascii, ya esta previsto.
Perdon por la poca documentacion... todo esta comenzando y estoy yo solo en esto ( a vos te habra pasado tambien !! )
ok, no me habia dado cuenta del 13.. uso NOTEPAD2.. muy recomendable.. maneja esto bien, lo cambio por 13,10 en la siguiente

por favor cuando tengas algo para probar me gustaria verlo..

 

Desconectado octavio

  • Novato
  • *
  • Mensajes: 39
    • Ver Perfil
Compilador para cualquier SO
« Respuesta #13 en: Marzo 05, 2007, 12:17:19 am »
Citar
exacto sysevent es la direccion del evento
uso el scancode directo, el mismo lenguaje hace la conversion a ascii, ya esta previsto.
Perdon por la poca documentacion... todo esta comenzando y estoy yo solo en esto ( a vos te habra pasado tambien !! )
ok, no me habia dado cuenta del 13.. uso NOTEPAD2.. muy recomendable.. maneja esto bien, lo cambio por 13,10 en la siguiente

por favor cuando tengas algo para probar me gustaria verlo..
Lo que yo pensaba que eran punteros a funciones esta puesto a zero, asi que sigo igual.
te envio el archivo con lo que tengo hasta ahora , a ver si tu ves lo que falta.
Ya sabras que mi sistema no usa ejecutables , para ejecutarlo selecciona el archivo usando fview y pulsa ->
o  pulsa f3 para editar y luego f5.
de momento el programa abre la ventanita imprime algo y se termina pulsando la tecla escape, eso es todo.
Lo del scancode directo no me gusta,por que tendria que a?adir nuevas funciones en exclusiva para tu programa,
aparte de que impide el uso de herramientas de teclado (cuando las haya) y otros problemas.
no podrias cambiarlo?
Lo de obtener el directorio actual no es problema en octasm, pero con fasm tendre que a?adir algo de codigo.
Hasta luego.

nota: entre semana tengo poco tiempo para el ordenador y menos para internet

no consigo poner el archivo adjunto, asi que te lo copio aqui

Código: [Seleccionar]
;LANG FASM
include '\\RD\FASM.INC'

XRES equ 640
YRES equ 480
VMODO equ $4112
;mov esi,tmp_path
;call cdfile
;mov [current_dir],ebx
pcall gui.new.t3,XRES,YRES,title
call getmxy1
pcall wait_ms1,40
;---- Inicio R4
mov [NIVEL0],esp
call SYSUPDATE
mov esi,pila
xor eax,eax
jmp inicio

title:   db 12,'Fasm example'
msg1:
db " Vesa/Mouse Error",13
db " Press any key to exit. ",13,0
;.................compilado.....................
include 'cod.asm'
;.................compilado.....................

;===============================================
SYSEND:
mov esp,[NIVEL0]               ; nivel de llamada 0
ret                                            ; Return control to DexOS

;===============================================
SYSUPDATE:
pusha
mov [SYSEVENT],0
call getd
jnc .keyb
call getmxy2
jnc .mouse
pcall wait_ms2,40
jnc .tick
call get_redraw
jnc .redraw
call del_msg
popa
ret
      .redraw:
call SYSREDRAW
popa
ret
      .tick:
inc [last_tick]
popa
ret
      .keyb:
;jmp SYSEND
cmp eax,keyb.esc
je SYSEND
and eax,7fh
mov [SYSKEY],eax
mov eax,[SYSKEYM+eax*4]
mov [SYSEVENT],eax
popa
ret
      .mouse:
mov [SYSBM],ebx
shl edx,16
or eax,16
mov [SYSXYM],eax
mov eax,[SYSMM]
test ebx,ebx
jz .l1
mov eax,[SYSMS]
     .l1:
mov [SYSEVENT],eax
popa
ret

;===============================================
SYSRUN:; ( "nombre" -- )
ret

;===============================================
SYSREDRAW:; BuffToScreen32:
pusha
mov al,bmp32_write
call setvideofuncion
mov dword[bmp],SYSFRAME
mov eax,0
mov ebx,0
mov ecx,XRES
mov edx,YRES
call rectangulo
popa
ret

;===============================================
SYSIFILL:; ( v cnt src -- )
push edi
mov edi,eax
mov ecx,[esi]
mov eax,[esi+4]
cld
rep stosd
mov eax,[esi+8]
lea esi,[esi+12]
pop edi
ret

;===============================================
SYSMSEC: ret

;===============================================
SYSTIME: int 1
lea esi,[esi-12]
mov [esi+8],eax
cli
mov   al,4                                      ; RTC  04h
out   70h,al
in    al,71h                            ; read hour
call Bcd2Bin
mov [esi+4],eax; NOS-1
mov   al,2                                      ; RTC  02h
out   70h,al
in    al,71h                            ; read minute
call Bcd2Bin
mov [esi],eax; NOS
xor   al,al                                     ; RTC  00h
out   70h,al
in    al,71h                            ; read second
call Bcd2Bin
sti
ret

;===============================================
SYSDATE: int 1
lea esi,[esi-12]
mov [esi+8],eax
cli
    xor eax,eax
mov   al,9                                      ; RTC 09h
out   70h,al
in    al,71h                                    ; read year
call Bcd2Bin
mov [esi+4],eax; NOS-1
mov   al,8                                      ; RTC 08h
out   70h,al
in    al,71h                                    ; read month
call Bcd2Bin
mov [esi],eax  ; NOS
mov   al,7                                      ; RTC 07h
out   70h,al
in    al,71h                                    ; read day
call Bcd2Bin   ;TOS
    sti
    ret

Bcd2Bin:; ebx trash
xor eax,eax
mov   bl,0x0a
mov   bh,al
shr   al,4
mul   bl
and   bh,0x0f
add   al,bh
ret

;===============================================
SYSDIR:; ( "path" -- )
ret
pusha
mov ebx,[current_dir]
lea esi,[eax+1]
xor eax,eax
call cdfile
jc SYSEND
mov [current_dir],ebx
popa
ret

copy_path:
pusha
mov edi,tmp_path+1
mov ecx,33
      .l1:
lodsb
stosb
cmp al,20h
jc .l2
loop .l1
jmp SYSEND;path too long
      .l2:
popa
ret

tmp_path: db '\\D0\WINDOWS\OCTA\PRUEBAS\CODIGO  '
current_dir dd 0
;===============================================
SYSFILE:; ( nro -- "name" )
ret

;===============================================
SYSLOAD:; ( 'from "filename" -- 'to )
ret
int 1
pusha   ;eax->file name
mov esi,eax
call copy_path
mov ebx,[current_dir]
mov eax,80h
mov esi,tmp_path
call open
test eax,eax
jz SYSEND
or ecx,-1
call read ;edi=bufer
call close
popa
ret

;===============================================
SYSSAVE:; ( 'from cnt "filename" -- )
;|WriteCommand       rd 1
; 43.Writes a file to floppy,
;ESI points to name of file to make,
;EDI = place to load file from,
;EAX = size of file to load in bytes,
;set's CF to 1 on error, error code in AH,
;sucsess EBX = number of sectors loaded, ECX = file size in bytes.
ret

align 4

last_tick dd 0

  NIVEL0        dd 0   ; pila de codigo

  SYSEVENT      dd 0
  SYSXYM        dd 0
  SYSBM         dd 0
  SYSKEY        dd 0
  SYSMS         dd 0
  SYSMM         dd 0
  SYSME         dd 0

  SYSBPP        dd 32
  SYSW          dd XRES
  SYSH          dd YRES
  SYSVSIZE      dd XRES*YRES

include 'dat.asm'

align 4

  SYSKEYM       rd 256
  ppila         rd 1024
  pila          rd 1024
  SYSFRAME      rd XRES*YRES
  FREE_MEM      rd 1024*4; 4M(32bits) 16MB



« última modificación: Marzo 05, 2007, 12:26:03 am por octavio »

pablor

  • Visitante
Compilador para cualquier SO
« Respuesta #14 en: Marzo 06, 2007, 12:09:25 am »
Ok, Octavio, vamos tranquilos...

Los punteros estan a 0 cuando no hacen nada, o sea, siempre compruebo que no sea 0 antes de saltar.

Con respecto al teclado, es una lastima que no lo manejes de manera directa, yo ya recopile como hacerlo con las in y out, pensaba reemplazar la interrupcion de Dex con una propia para poder usarlo, si leiste y viste el codigo del ColorForth te habras dado cuenta hasta que grado de independencia del SO es posible llegar, mi idea es desactivar las interrupciones tambien.. cuando funcione todo OK

Voy a ver si hago alguna prueba con OctaOs, aunque yo tambien estoy bastante ocupado con el laburo y las clases (empiezo a ense?ar R4 la semana que viene).

Lo del directorio no te preocupes mucho, con que funcione la interaccion alcanza por ahora. Tambien tengo planes al respecto.

Gracias por tu cooperacion, me gustaria saber si viste algo de forth y si tenes alguna duda (del forth o de mi lenguaje) no dudes en preguntar.