HispaMSX

RE: [hispamsx] Hello World !!!! para MNBIOS

2004-03-24 23:42:27
ld hl,TEXTO
ld de,NAMTBL
ld bc,11
call LDIRVM
ret

TEXTO:
db "HOLA, MUNDO"

Quizás sea más sencillo, no?


From: "Flyguille" <Flyguille(_en_)arnet(_punto_)com(_punto_)ar>
Reply-To: hispamsx(_en_)yahoogroups(_punto_)com
To: <mnbios(_en_)domeus(_punto_)es>,<hispamsx(_en_)yahoogroups(_punto_)com>,<clubmsxargentino(_en_)gruposyahoo(_punto_)com>
Subject: [hispamsx] Hello World !!!! para MNBIOS
Date: Mon, 22 Mar 2004 16:07:08 -0300

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]



*HispaMSX. La mailing-list de MSX en castellano*
Para cualquier duda: hispamsx-owner(_en_)yahoogroups(_punto_)com
Web de lista: http://www.hispamsx.org
Enlaces a Yahoo! Grupos

Para visitar tu grupo en la web, accede a:
 http://es.groups.yahoo.com/group/hispamsx/

Para cancelar tu suscripción en este grupo, envía
un mensaje en blanco a:
 hispamsx-unsubscribe(_en_)yahoogroups(_punto_)com

El uso que hagas de Yahoo! Grupos está sujeto a
las Condiciones del servicio de Yahoo!:
 http://es.docs.yahoo.com/info/utos.html


_________________________________________________________________
¿Estás pensando en cambiar de coche? Todas los modelos de serie y extras en MSN Motor. http://motor.msn.es/researchcentre/


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