Siguiendo el formato del blog, vamos a seguir
subiendo de nivel en la estructura del programa del emulador.
Apoyándonos en las
funciones que ya he puesto, hoy declaro la función "Recive", que
permitirá recoger el programa de memoria del emulador y guardarlo en el disco
duro en un fichero.
Como nombre del fichero usará
una variable externa que será declarada y modificada por el entorno hombre
máquina principal, el "main" del programa.
Por lo tanto este
procedimiento simplemente intenta abrir el fichero. Si se produce un error,
abre una ventana emergente y muestra el error. Si todo va bien, lee la memoria
hasta la dirección de fin de programa y lo guarda en el fichero.
Como se ve la función
es muy sencilla de entender gracias a que está apoyada en todas las librerías
ya implementadas. Incluidas las de gestión de ventanas.
RECIVE.ASM
; 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/
include main.mac
include stdio.mac
include 48iocent.mac
include mouse.mac
include io.mac
include window.mac
INCLUDE 8051.MAC
public reciv
.model compact,pascal
.data
extrn file:byte
extrn m_Ventana:byte
extrn dir_fin:word
hand1 dw 0
nada db 0
err_ab db "No se puede Abrir Fichero",0
dato db 0
.code
extrn lee:near
reciv proc near
abrir:
open file,_W,hand1
jnc bueno
creat file,_Archivo,hand1
jnc bueno
getwindow m_ventana,10,10,12,37
window 10,10,12,37,nada
gotoxy 11,11
printf err_ab
getch al
putwindow m_ventana,10,10,12,37
ret
bueno:
mov dx,0
otro:
call lee
mov byte ptr dato,al
write hand1,1,dato ;escrive dato
cmp dx,dir_fin
jz fin
inc dx
jmp otro
fin:
cmp hand1,0
jz no_cerrar
close hand1
no_cerrar:
fin_fin:
ret
reciv endp
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.