En este caso lo primero será definir las señales de control y las funciones básicas de lectura, escritura y manejo de la memoria a través del DMA. Así mismo añado en esta cabecera la función Trace para controlar el reloj y ejecutar una instrucción.
EMU5051.MAC
; Copyright (C) 2013 José Ángel Moneo Fernández ; This program is free software: you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation, either version 3 of the License, or ; (at your option) any later version. ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; You should have received a copy of the GNU General Public License ; along with this program. If not, see <http://www.gnu.org/licenses/
;PC1 - PUERTO "C" ALTO DE LA TARJETA 48IOCENT
INT0 EQU 1 ;SEÑAL DE INTERRUPCIÓN 1
INT1 EQU 2 ;SEÑAL DE INTERRUPCIÓN 2
RESET EQU 4 ; RESET
WR EQU 20h ; SEÑAL DE ESCRITURA
RD EQU 10h ;SEÑAL DE LECTURA
PSEN EQU 40h ; SEÑAL PSEN
ALE EQU 80h ;SEÑAL Ale
;salidas control
;PC0 . PUERTO "C" BAJO DEL LA TARJETA 48IOCENT
CLK_ON EQU 11B ; ACTIVAR SEÑAL DE RELOJ
CLK_OFF EQU 10B ; DESACTIVAR SEÑAL DE RELOJ
BUSRQPC_ON EQU 01B ; ACTIVAR SOLICITUD DE BUS
BUSRQPC_OFF EQU 00B ;DESCTIVAR SEÑAL DE RELOJ
EXTERNO_ON EQU 101B ;ACTIVAR BUS EXTERNO
EXTERNO_OFF EQU 100B ;DESCTIVAR BUS EXTERNO
;control PC1
PSEN_ON EQU 1101B ;ACTIVAR PSEN
PSEN_OFF EQU 1100B ;DESACTIVAR PSEN
ALE_ON EQU 1111B ;ACTIVAR ALE
ALE_OFF EQU 1110B ;DESACTIVAR ALE
WR_ON EQU 1011B ;ACTIVAR WR
WR_OFF EQU 1010B ; DESCTIVAR WR
RD_ON EQU 1001B ; ACTIVAR RD
RD_OFF EQU 1000B ;DESACTIVAR RD
RESET_ON EQU 101B ; ACTIVA RESET
RESET_OFF EQU 100B ;DESACTIVAR OFF
INT1_ON EQU 11B ; ACTIVAR INT1
INT1_OFF EQU 10B ; DESACTIVAR INT1
INT0_ON EQU 1 ; ACTIVAR INT0
INT0_OFF EQU 0 ; DESACTIVAR INT0
;MACROS de control de tarjeta
;activa DMA
Dma_on macro
ifndef _Dma_on
extrn _Dma_on:near
endif
call _dma_on
endm
;desactiva DMA
Dma_Off macro
ifndef _Dma_off
extrn _Dma_off:near
endif
call _dma_off
endm
;Lee de zona de programa
LeeInst macro
ifndef _LeeInst
extrn _LeeInst:near
endif
call _LeeInst
endm
;Lee de zona de datos
;lectura un dato de area de datos
;dir =dirección de lectura en ram del prototipo
;devuelve el dato en al
Lee macro dir
ifndef _Lee
extrn _Lee:near
endif
lea ax,dir
push ax
call _Lee
endm
;Guarda de zona de datos
; dir =dirección de volcado en ram del prototipo
; dirección =puntero a los datos a volcar
; long =cantidad de datos
Guarda macro dir,datos,long
ifndef _Guarda
extrn _Guarda:near
endif
mov ax,dir
push ax
lea ax, datos
push ax
mov ax,long
push ax
call _Guarda
endm
;lee una zona de memoria
; dir =dirección de volcado en ram del prototipo
; dirección =puntero a los datos a volcar
; long =cantidad de datos
Toma macro dir
ifndef _Toma dir,datos,long
extrn _Toma:near
endif
mov ax,dir
push ax
lea ax, dato
push ax
mov ax,long
push ax
call _Toma
endm
;tracea una instrución.
;En el parámetro se le pasa el número de pulsos de la instruciión
Trace macro pulsos
ifndef _Trace
extrn _Trace:near
endif
mov ax,pulsos
pusxh ax
call _Trace
endm
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.