Fecha actual Jue Ago 22, 2019 5:26 pm

Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Programación de los componentes de hardware más específicos de la plataforma PC.


Usuarios leyendo este tema: Ninguno

Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Sab Mar 30, 2013 5:00 pm

En este tema necesito listar todos los puertos, áreas de memoria, funciones de BIOS, dispositivos, chips y otros recursos que necesito para implementar una máquina con procesador x86 de 16 bits puro, y cómo implementar registros que denoten la ausencia de periféricos existentes, como chips seriales y paralelos, PCI, etc.

Con esto, voy a poder repasar en todo momento la lista de requerimientos, aquí, y agregar implementaciones de estos a medida lea la documentación de cada uno de estos en los diferentes libros y documentos que poseo.
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Dom Mar 31, 2013 4:52 pm

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Dom Mar 31, 2013 6:25 pm

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Dom Mar 31, 2013 8:44 pm

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Lun Abr 01, 2013 2:16 pm

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Lun Abr 01, 2013 4:33 pm

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Lun Abr 01, 2013 6:45 pm

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Mar Abr 09, 2013 10:55 am

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Mié Abr 10, 2013 8:32 pm

Dado el reducido tamaño de los campos Mod y R/M del byte NodR/M (solo 32 combinaciones en 5 bits) es mejor tener un arreglo de punteros de funciones que sea unidimensional, y lo mismo para las combinaciones del campo Reg para registros de 16 y 32 bits, y otros registros como registros de segmento tal vez o registros MMX/XMM (solo otros arreglos de punteros de funciones de 8 elementos en 7 bits).

Debemos recordar que las funciones que devuelven valores son como variables inteligentes (e incluso las que manipulan variables globales, aunque solo las escriban); así que a través de las funciones apuntadas deberíamos ser capaces de leer y escribir todos los datos que necesitemos, y llevar a cabo todas las operaciones inteligentes, de forma más eficiente que si tuviéramos IFs para cada uno de las 256 configuraciones posibles mediante el byte ModR/M
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Jue Abr 11, 2013 3:42 am

Una de nuestras nuevas reglas de programación es evitar usar IFs si en su lugar podemos usar punteros de funciones para cada uno de los casos, ya bien definidos, de una lógica, algoritmo, problema o especificación.

Es decir, debemos usar la rapidez extrema del tipo del hashing para decidir directamente, incondicionalmente, cómo manejar todos los casos, con un número de combinaciones y forma de manejar dichas combinaciones, que sea el más eficiente posible, también evitando tener que codificar casos repetitivos para todos los valores de bits, y en su lugar determinar cuáles son los casos base y cómo combinarlos con el menor número posible de combinaciones.
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Mar Abr 23, 2013 2:00 am

Ahora que he creado un programa de prueba simple de 16 bits puros para que corra en lugar del BIOS por ahora desde el área de memoria final para el BIOS, necesito comenzar a implementar tanto el espacio de la funcionalidad como la funcionalidad a usar inmediatamente de la tarjeta VGA estándar, por ahora en modo de texto EGA 80x25.

Por ahora, el programa que funciona como kernel simplemente escribe un mensaje simple ASCIIZ a la pantalla de texto y detiene el CPU con una secuencia cli - hlt.

Ahora que tengo implementadas todas las instrucciones de CPU x86 puramente de 16 bits neesarias para lograr esto, necesito corresponder los efectos esperados a la memoria de video, y luego al elemento Canvas de HTML5 que está funcionando como pantalla en este momento.
Código: Seleccionar todo
;This BIOS is thought to contain up to 64K by now,
;so it should start with a base address of 0, to
;start at the beginning of this code segment:
;;
 org 0000h





;Point stack segment
;register to somewhere
;temporarily reasonable:
;;
 xor ax,ax
 mov ss,ax


 mov ax,0x500
 mov sp,ax


;Point main data segment
;registers to the start of
;the current segment:
;;
 push cs
 pop ax
 mov ds,ax
 mov es,ax







jmp Main

sstr db "Hi Z86!",0


Main:

mov si,sstr
mov di,0


call prn_str




;Debug by dumping CPU regs:
;;
 out 0xFF,al



cli
hlt



repnz movsb



;Inputs:
;      SI == source string
;      DI == destination mem
;
;;
prn_str:
 push es
 push si
 push di

 mov ax,0xB800
 mov es,ax

 .l:


   lodsb

   cmp al,0
   je .l_END

     stosb
     inc di

   jmp .l


 .l_END:



 pop di
 pop si
 pop es
ret

align 16

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Mar Abr 23, 2013 8:45 pm

Este es el programa que he estado corriendo en el emulador, y que de hecho son varios programas pequeños separados por secuencias CLI-HLT.

Código: Seleccionar todo
;This BIOS is thought to contain up to 64K by now,
;so it should start with a base address of 0, to
;start at the beginning of this code segment:
;;
 org 0000h

;mov al,0
;dec al

mov ax,0x7FFF
inc ax


;Debug by dumping CPU regs:
;;
 out 0xFF,al


cli
hlt





;Point stack segment
;register to somewhere
;temporarily reasonable:
;;
 xor ax,ax
 mov ss,ax


 mov ax,0x500
 mov sp,ax



;mov al,0
;out dx,al





;Point main data segment
;registers to the start of
;the current segment:
;;
 push cs
 pop ax
 mov ds,ax
 mov es,ax







jmp Main

sstr db "Hi Z86!",0


Main:

mov si,sstr
mov di,0


call prn_str




;Debug by dumping CPU regs:
;;
 out 0xFF,al



cli
hlt



repnz movsb



;Inputs:
;      SI == source string
;      DI == destination mem
;
;;
prn_str:
 push es
 push si
 push di

 mov ax,0xB800
 mov es,ax

 .l:


   lodsb

   cmp al,0
   je .l_END

     stosb
     inc di

   jmp .l


 .l_END:



 pop di
 pop si
 pop es
ret

















 jmp $

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;Point stack segment
;register to somewhere
;temporarily reasonable:
;;
 xor ax,ax
 mov ss,ax


 mov ax,0x500
 mov sp,ax



;mov al,0
;out dx,al





;Point main data segment
;registers to the start of
;the current segment:
;;
 push cs
 pop ax
 mov ds,ax
 mov es,ax





mov dx,0x3DA  ;Flip/Flop
in al,dx      ;Reset Flip/Flop

mov dx,0x3C0  ;VGA attrib Ctrl
mov al,0x11   ;Overscan Color Reg
out dx,al     ;Set index

mov al,0      ;Set some color
out dx,al     ;Set new color




;push cs
;pop ds

mov ax,3
push ax
pop ds


;Debug by dumping CPU regs:
;;
 out 0xFF,al



cli
hlt

out dx,al
in al,dx
lodsb
outsw
insw
rep outsw
rep insw


mov ds,[bx+si]




push word[es:bx]



cli
hlt



%include "fonts/8x16_default_font.asm"
%include "vgaregs/config_regs_EGA_t80x25x16.asm"
%include "vgaregs/config_regs_MCGA_320x240_ModeX.asm"
%include "vgaregs/config_regs_MCGA_g320x200x256__13h.asm"
%include "vgaregs/config_regs_VGA_g640x480x16__12h.asm"
%include "vgaregs/PALETTE_80x25x16.asm"
%include "vgaregs/PALETTE_320x200x256.asm"



align 16

Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm

Re: Recuento de todos los recursos necesarios para el emulador de PC de 16 bits PS/2 o posterior más simple posible

Notapor ~ » Mar Abr 23, 2013 9:03 pm

Para implementar la funcionalidad VGA he llegado a la conclusión de que todos los registros de la VGA estándar deberían contener valores correctos desde que se inicializan, y obviamente también deben existir las funciones manejadoras de dicha configuración antes de empezar a correr el CPU.

Igualmente, todos los dispositivos emulados de hardware deben contener configuración válida predeterminada, todos antes de correr el CPU.

La configuración inicial de la tarjeta VGA estándar debe ser la del modo de texto 80x25x16. Lo primero que nuestro programa de prueba de BIOS hará será copiar una fuente válida a la memoria de video, y también más adelante sobreescribiremos la configuración de los registros con los mismos valores del modo de texto 80x25x16.

De esta manera, alcanzaremos un nivel de dificultad casi trivial para saber qué tablas de funciones necesitaremos crear, qué funciones, qué estructura general, qué funciones de interpretación de la configuración VGA.

Aparte de tener los puertos indexados apuntando a funciones, seguramente necesitaremos register files para cachear los valores escritos a cada registro indexado de la VGA.

Una vez que apuntemos, primero a funciones de relleno que no hacen nada, y luego a funciones que manejen la configuración de la VGA emulada de manera dinámica, necesitaremos las funciones para leer y escribir la memoria de video en sus diferentes modos de acceso, y las funciones para desplegar y actualizar los contenidos de la memoria de video a la pantalla, o en este caso, al Canvas.
Imagen
IP for hosts file (email udocproject@yahoo.com to get updates if website becomes offline):
Código: Seleccionar todo
190.150.9.244 archefire.org



See what I'm doing in real time:
Main Desktop 1
Main Desktop 2
Avatar de Usuario
~
Site Admin
 
Mensajes: 2958
Registrado: Sab Nov 10, 2012 1:04 pm


Volver a IBM PC y Compatibles

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 27 invitados


cron