Moderador: Sir Cilve Sinclair
antoniovillena escribió:¿Sería factible un Z80 con un bus de direcciones de 20 bits? Es que si no se pierde mucho tiempo en la paginación.
antoniovillena escribió:Yo decía hacer una fricada en plan registros de 10 bits, con registros dobles de 20. Estoy hace que tengamos instrucciones de carga inmediata distintas, como pasa por ejemplo con el ensamblador del ARM. Se buscaría compatibilidad retroactiva con el ensamblador, pero el cm sería totalmente incompatible.
mcleod_ideafix escribió:Como factible, es, pero no sería compatible con nada que existiera ahora. La operación de cambiar de segmento en el 8086 tarda más o menos el mismo tiempo que lo que se tardaría en el Z80 cambiar de página. Que el registro de página sea un registro de E/S o sea un registro del procesador, es un mero "detalle" de implementación (que en el segundo caso sería más complicado de implementar).
Zardoz escribió:mcleod, crees que seria factible hacer en una FPGA esto ?
Mas o menos , seria un hibrido de MMU y banqueo de memoria. Se lee/escribe la tabla mediante dos registros hardware, y permite acceder a un espacio de direcciones de 16 MiB con con "bancos" de 4 KiB. Y en teoría es posible expandirlo para añadirle mas funciones propias de una verdadera MMU.
module mmu_z80 (
// Interfaz para el manejo de la tabla de páginas
input wire clk,
input wire rst,
input wire we,
input wire [3:0] frame_addr,
input wire [11:0] frame_in,
output wire [11:0] frame_out,
// Traducción logica a física
input wire enable_trans,
input wire [15:0] la,
output wire [23:0] pha
);
// Implementación de la interfaz de manejo de la tabla de páginas
reg [11:0] frames[0:15]; // almacen de frames
integer i; // esto es solo para el for
always @(posedge clk) begin
if (rst) begin
for (i=0;i<16;i=i+1) begin
frames[i] <= {8'h00,i[3:0]};
end
end
else if (we) begin
frames[frame_addr] <= frame_in;
end
end
assign frame_out = frames[frame_addr];
// Implementación de la lógica de traducción
wire [3:0] index = la[15:12];
wire [11:0] offset = la[11:0];
assign pha = (enable_trans)? {frames[index], offset} :
{8'h00,la};
endmodule
Zardoz escribió:Es que de hacer el EMU, yo lo veo mas para una FPGA o una cpld pequeña puesta entre el z80 y el resto del ordenador
Volver a Programación y nuevos desarrollos
Usuarios navegando este Foro: No hay usuarios registrados visitando el Foro y 2 invitados