Hace un rato envié un mail con código fuente pero fue terriblemente maltratado
por el mail asique ahora lo mando como TEXTO adjunto...
----------
org $4000
;
header:
;
.exec: dw code.exec,0 ; parte EXEC
.task: dw code.task,0 ; parte TASK
.fkey: dw code.fkey,0 ; parte FKEY
.stop: dw code.stop,0 ; parte STOP
.ftask: dw code.ftask,0 ; parte FTASK
.close: dw code.close,0 ; parte CLOSE
;
.nac:
.nac.length: equ $ - .nac
ds 28 - .nac.length," "
;
.ver: db 0
.sver: db 0
.mver: db 0
.msver: db 0
;
.mark:
.mark.length: equ $ - .mark
ds 16 - .mark.length," "
;
.prog:
.prog.length: equ $ - .prog
ds 16 - .prog.length," "
;
.nidea:
.nidea.length: equ $ - .nidea
ds 16 - .nidea.length," "
;
.ngrp:
.ngrp.length: equ $ - .ngrp
ds 16 - .ngrp.length," "
;
.nsnd:
.nsnd.length: equ $ - .nsnd
ds 16 - .nsnd.length," "
;
.date: db "DD/MM/YYYY"
.fdate: db "DD/MM/YYYY"
;
.btask: dw code.btask,0 ; parte BTASK
;
; Variables que usaremos en la aplicación.
FlagTask: db 0
Text: db "Hola mundo!!!",0
TextAgain: db "Hola mundo de nuevo!!!",0
TextWait: db "<pulse cualquier tecla para continuar o Q para
salir>",0
code:
;
.exec: LD A,18h
LD HL,text
CALL 0C260h ; funcion WR_CHRS
.JUMP2: LD A,18h
LD HL,TextWait
CALL 0C260h ; funcion WR_CHRS
.Loop: CALL 0C27Ch ; funcion INPUT$(1)
JR C,.Errored
CP "Q"
ret z ; si "Q" es presionada sale del programa.
JP .exec
.Errored: CP 61h ; Verifica el codigo de error devuelto
JR z,.bige
xor a ; Si no es un evento mayor entonces
; puede que sea un error del buffer del teclado.
CALL 0C2E0h ; SET_BUFFER_KEY (activa el buffer del teclado
si A=0)
Jp .Loop
.bige: LD a,(FlagTask) ; Apareció un evento mayor
CP 0FFh ; verifica si el evento mayor es del sistema
multitasking
jr nz,.Loop
; es un evento del sistema multitasking...
; y como el programa no tiene nada que hacer
; simplemente devuelve rapidamente el control al
; sistema multitasking
xor a
LD (FlagTask),a ; Esto borra la variable que acabamos de usar.
LD IY,00FDh
LD C,01h
RST 30h ; función DRIVER
JP .exec ; Normalmente el sistema multitasking no retorna
; el control a este codigo nunca mas.
; Pero si ocurre un error en la llamada al
sistema
; retornara un codigo de error....
; como cuando el sistema multitasking
; no tiene suficientes recursos del sistema
; Que hacer aquí? NADA....o....
; tal vez intentar liberar recursos y volver a
llamar al sistema
; o re ejecutar esta aplicación para que el
usuario pueda
; intentar después.
.task:
LD A,18h
LD HL,TextAgain
CALL 0C260h ; funcion WR_CHRS
JP .JUMP2
.fkey: ret ; ON KEY GOSUB sin uso
.stop: ret ; ON STOP GOSUB sin uso
.ftask: LD A,0FFh
LD (FlagTask),A ; esto setea la variable bandera que usamos
cuando el usuario
; presiona CTRL+GRPH+CODE para abrir la ventana
; multitarea o cambiar de aplicación.
ret
.close: ; Esto es llamado cuando el usuario usa
; un comando de cierre externo de la aplicacion
; Sin nada que hacer, la aplicacion devuelve el
control.
ret
.btask: ret ; Para procesos de fondo, sin uso en la version
DEMO mnbios..
[Se han eliminado los trozos de este mensaje que no contenían texto]