HispaMSX

Hello World !!!! para MNBIOS

2004-03-22 20:07:11
El siguiente programa es la versión "HOLA MUNDO" para MNBIOS.... que como 
sabrán es un sistema multitasking y acá demostramos como se programa y prevee 
este sistema.

NOTA: no se incluyeron en el código acentos para no molestar con el tema de los 
códigos ASCII.

Cualquier pregunta me dicen....



        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.
                                                                                
; En realidad aca solo se esta permitido asignar un valor a una variable,
                                                                                
; y que el proceso normal de la aplicacion de la misma forma que atiende 
                                                                                
; al cambio de aplicacion, atienda al cierre de la aplicacion guardando datos
                                                                                
; y archivos que necesite salvar.
                        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>
  • Hello World !!!! para MNBIOS, Flyguille <=