HispaMSX

MNBIOS

2004-03-22 20:42:46
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]


<Anterior en la conversación] Conversación actual [Siguiente en la conversación>