menu_de_demarrage
This is an old revision of the document!
Les menus de démarrage MENU.MO5 et MENU.TO7 sont envoyés par le serveur lors de l'initialisation d'un poste et affichent le menu permettant de sélectionner une application.
* MENU.MO5 version 3.1 RESET EQU $FFFE BEGRAM EQU $2100 ENDRAM EQU $A000 IRQRE EQU $A041 IRQPT EQU $2064 SYSPRA EQU $A7C0 NUPOST EQU $A7D8 EXT64 EQU $A7CB NUPO EQU $2052 RELACH EQU $A02B RESEAU EQU $A025 M5VCT EQU $EFFE ADCNTC EQU $1FFE ADCRDU EQU $1FF4 ADTRCR EQU $1FFA TEMPO EQU $2039 DUREE EQU $203B TIMBRE EQU $203D OCTAVE EQU $203E KTSTH EQU $0A JPUTCH EQU $82 JNOTEH EQU $9E SIZITM EQU 44 SIZFIL EQU 12 CR EQU $0D LF EQU $0A SPACE EQU $20 HYPHN EQU '- ORG $5000 START JMP MAIN * Table des entrees de menu * Maximum 20 elements, 1 element = 44 octets, soit 880 octets au total NBITM FCB 4 ; 4 elements dans le menu ELEM1 FCC /BASIC/ ; Titre 1 (32 octets max) FCB $00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 OFEL1 FCB $01 ; Disque source FILE1 FCC /BASIC MO5/ ; Fichier correspondant, 11 caracteres ELEM2 FCC /LOGO/ ; Titre 2 (32 octets max) FCB $00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE2 FCC /LOGO MO5/ ; Fichier correspondant, 11 caracteres ELEM3 FCC /LSE/ ; Titre 3 (32 octets max) FCB $00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE3 FCC /LSE MO5/ ; Fichier correspondant, 11 caracteres ELEM4 FCC /NRDOS/ ; Titre 4 (32 octets max) FCB $00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE4 FCC /NRDOS MO5/ ; Fichier correspondant, 11 caracteres RMB 44*16 * ORG $5374 MAIN EQU * ORCC #$FF ; Pas d'interruptions LDA #$0C ; Preparation reboot a chaud STA EXT64 LDX #EXTOK STX M5VCT CMPX M5VCT BNE EXTOK ; Saut simple au menu JMP [RESET] ; Reboot et saut au menu EXTOK EQU * CLR EXT64 ; BASIC visible LDX #MSG1 ; Affiche entete JSR DISPL ORCC #$FF ; Pas d'interruptions LDX #$BEGRAM ZMEM1 EQU * ; Efface la memoire de $2100 à $5002 CLR ,X+ CMPX #NBITM-1 BCS ZMEM1 LDX #ENDPRG ZMEM2 EQU * ; Efface la memoire de $563D à $A000 CLR ,X+ CMPX #ENDRAM BCS ZMEM2 LDS #BEGRAM+$100 ; Fixe la pile en $2200 LDX #IRQRE ; Fixe le vecteur IRQ du NR STX IRQPT LDA NUPOST ; Lit no de poste ANDA #$1F ; de 0 à 31 STA NUPO ; et le stocke JSR RELACH ; Libere la ligne JSR FORM ; Acces aux variables NR dans la video LDX #MAIN STX ADCTRLC ; Reprise en main apres un CTRL-C LDX #CPTRD STX ADCRDU ; Zone de compte-rendu LDX #INCON STX ADTRCTR ; Routine de traitement code inconnu LDX #MSG1B JSR DISPL LDB NUPOST ; Lit numero de poste ANDB #$1F ; de 0 à 31 CLRA JSR DISPO ; Affiche numero de poste LDX #MSG2 ; Affiche "MENU" JSR DISPL LDB #&24 ; Calcule le nb de lignes SUBB NBITM ; vides à sauter LSRB ; (24-Nb. items)/2 BEQ SKIP1 VIDES EQU * ; Saute les lignes vides JSR CRLF ; (Retour a la ligne) DECB BNE VIDES SKIP1 EQU * CLR MAXLEN LDX #NBITM LDB ,X+ ; X pointe sur 1er titre PSHS B ; Sauve le nb d'elements * Cherche la longueur max (plus grand titre) CMAXLN EQU * PSHS X ; Sauve le ptr sur la table des elements CLRA STRLEN EQU * ; Calcule longueur titre courant LDB ,X+ BEQ SKIP2 INCA BRA STRLEN SKIP2 EQU * ; 32 caracteres max CMPA #&32 BLS SKIP3 LDA #&32 SKIP3 EQU * CMPA MAXLEN BLS NEXT STA MAXLEN NEXT EQU * PULS X LEAX SIZITM,X ; Element suivant (+44) DEC ,S BNE CMAXLN * Calcule alignement a gauche =(39-MAXLEN-4)/2 PULS B LDA #&39 SUBA MAXLEN SUBA #$04 ; Longueur de "A - " LSRA STA ALINEA * Affiche les choix, A est le premier LDA #'A PSHS A LDX #NBITM LDA ,X+ ; X pointe sur le premier titre PSHS A ; Sauve le nb d'elements DISITM EQU * JSR ALIGN LDB 1,S JSR DISPL ; Affiche touche a presser LDB #SPACE ; Affiche " - " JSR DISPL LDB #HYPHN JSR DISPL LDB #SPACE JSR DISPL LDA #&32 ; 32 caracteres, $00 inclus DISTIT EQU * LDB ,X+ JSR DISPL DECA BNE DISTIT LEAX SIZFIL,X ; Element suivant JSR CRLF ; Retour a la ligne INC 1,S DEC ,S BNE DISITM LEAS 2,S LDX #MSG3 ; Affiche "Votre choix : " JSR PMSG SELECT EQU * JSR GETKEY ; Attends une touche JSR UPCASE ; Transforme en majuscule si necessaire TFR B,A CMPB #'A BCS BADKEY ; Sous ASCII A ? -> Mauvaise touche SUBB #'A CMPB NBITM BCC BADKEY ; Au-dessus dernier titre ? -> Mauvaise touche PSHS B TFR A,B JSR PUTC ; Affiche la touche PULS B LDA #SIZITM ; Multiplie par 44 (taille element) MUL LDX #OFEL1 LEAX D,X ; X pointe sur le disque+nom de fichier correspondant LDA #SIZFIL ; 12 octets * Copie le nom de fichier en FILE LDY #FILE CPNAME EQU * LDB ,X+ STB ,Y+ DECA BNE CPNAME LDX #CONSIG ; Execute la consigne reseau (CHBIN) JSR RESEAU THEEND EQU * BRA THEEND ; Boucle infinie, attends chargement depuis le serveur * Mauvaise touche pressee BADKEY EQU * JSR BEEP JMP SELECT * Attends une touche, uniquement si FLAGK=0 GETKEY EQU * LDB FLAGK,PC BEQ SCRUT CLR FLAGK,PC RTS SCRUT EQU * CALL KTSTH BEQ SCRUT RTS FLAGK FCB $00 * Caractere dans B (a-z) change en majuscule UPCASE EQU * CMPB #'a BCS ENDUP CMPB #'z BHI ENDUP SUBB #$20 ENDUP EQU * RTS * Routine d'affichage caractere PUTC EQU * CALL JPUTCH ; Saut a PUTCH * Affiche ALINEA espaces ALIGN EQU * PSHS B,A LDA ALINEA BEQ ENDAL ALOOP EQU * LDB #SPACE JSR PUTC DECA BNE ALOOP ENDAL EQU * PULS A,B,PC * Affiche un message termine par $00 pointe par X PMSG EQU * LDB ,X+ BNE PCAR RTS PCAR EQU * JSR PUTC BRA PMSG * Retour a la ligne CRLF EQU * PSHS B,CC LDB #CR JSR PUTC LDB #LF JSR PUTC PULS CC,B,PC * Passe la video en page forme FORM EQU * PSHS B LDB SYSPRA ORB #$01 STB SYSPRA PULS B,PC * Routine de traitement code reseau inconnu INCON EQU * RTS * Joue un pouet BEEP EQU * PSHS B,A,CC LDD #$0008 STD OCTAVE LDB #$24 STB DUREE+1 LDB #$05 STB TEMPO+1 LDB #$03 STB TIMBRE LDB #$31 JSR PLAY PULS CC,A,B,PC PLAY EQU * CALL JNOTEH * Convertit un nombre 16 bits non signe en hexadecimal * D = nombre, X = pointeur sur buffer caractere CV16 EQU * PSHS U LEAU BASE16,PC BRA CONVRT * Convertit un nombre 16 bits non signe en decimal * D = nombre, X = pointeur sur buffer caractere CV10 EQU * PSHS U LEAU BASE10,PC CONVRT EQU * PSHS B,A LDA ,U+ ; Nombre de chiffres STA 1,S PULS A LOOP2 EQU * BSR DIVIZ BNE BEGNB ; Dividende non nul -> debut du nombre DEC ,S ; Chiffre suivant BNE LOOP2 LDB #'0 ; D valait 0 en fait STB ,X+ BRA CVEXIT CONTDV EQU * BSR DIVIZ ; Continue la division BEGNB EQU * PSHS B LDB ,X ; Chiffre courant ADDB #'0 CMPB #'9 BLS NOTHEX ; $A-$F ? ADDB #$07 ; Correction NOTHEX EQU * STB ,X+ ; Stocke le caractere PULS B DEC ,S ; Chiffre suivant BNE CONTDV CVEXIT EQU * PULS A,U,PC * Division de D par ,U * D = reste, ,X = dividende (0..9 ou 0..F) DIVIZ EQU * CLR ,X DVLOOP EQU * SUBD ,U BCS DVEXIT INC ,X BRA DVLOOP DVEXIT EQU * ADDD ,U++ TST ,X RTS BASE10 EQU * FCB 5 ; 5 chiffres FDB &10000, FDB &1000, FDB &100, FDB &10, FDB &1 BASE16 EQU * FCB 4 ; 4 chiffres FDB $1000 FDB $0100 FDB $0010 FDB $0001 * Affiche no. poste contenu dans B DISPO EQU * CLRA BSR CONV10 LEAX -2,X LBRA PMSG * Affiche un nombre contenu dans D (inutilise) DISP10 EQU * BSR CONV10 LEAX -5,X LBRA PMSG * Affiche un nombre contenu dans D (inutilise) DSP10B EQU * BSR CONV10 LEAX STRBUF,PC LBRA PMSG * Convertit un nombre 16 bits non signe en chaîne de caracteres (decimal) * D = nombre, resultat dans STRBUF CONV10 EQU * LEAX STRBUF,PC BSR CV10 CLR ,X ; Termine la chaine RTS * Affiche un nombre en hexadecimal 16 bits (inutilise) DISP16 EQU * LEAX STRBUF,PC PSHS X LBSR CV16 CLR ,X PULS X LBRA PMSG FCB SPACE,SPACE,SPACE,SPACE STRBUF EQU * FCB $00,$00,$00,$00,$00,$00 ; Buffer pour conversion numerique MAXLEN FCB $00 ; Longueur du plus grand titre ALINEA FCB $00 ; Alignement a gauche MSG1 FCB $1F,$20,$20 FCB $1F,$12,$14 FCB $1B,$44,$1B,$56,$1B,$66 FCB $0C FCB $00 MSG1B FCB $11 FCC /NANORESEAU poste / FCB $00 MSG2 FCC / / FCB $1B,$73 FCC /MENU/ FCB $1B,$70 FCB $00 MSG3 FCB $1F,$58,$4D FCC /Votre choix : / FCB $00 * Zone de consigne reseau CONSIG FCB $18 ; longueur 24 FCB $00 ; DEST = serveur FCB $09,$37 ; Tache R = 09, Tache A = 55 (CHBIN) FDB $0000 ; Nb octets FCB $00 ; Page FDB $0000 ; Adresse FCB $00 ; Ordinateur FCB $00 ; Application FILE FCB $00 ; Disque FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Nom du fichier FCB $00,$00,$00 ; Suffixe FCB $00 ; Mode de chargement * Zone de compte-rendu reseau CPTRD FCB $08 ; Longueur FCB $00,$00,$00,$00,$00,$00,$00,$00 ENDPRG EQU * END
menu_de_demarrage.1561712969.txt.gz · Last modified: 2019/06/28 11:09 by fool-duplex