==== Code source de MENU.TO7 v3.1, 3.2, 3.3 ==== * MENU.TO7 version 3.1 BEGRAM EQU $6100 ENDRAM EQU $E000 IRQRE EQU $E041 IRQPT EQU $6064 SYSPRC EQU $E7C3 NUPOST EQU $E7D8 NUPO EQU $6052 RELACH EQU $E02B RESEAU EQU $E025 ADCNTC EQU $5FFE ADCRDU EQU $5FF4 ADTRCR EQU $5FFA TEMPO EQU $6031 DUREE EQU $6033 TIMBRE EQU $6035 OCTAVE EQU $6036 KTSTH EQU $E806 PUTCH EQU $E803 NOTEH EQU $E81E SIZITM EQU 44 SIZFIL EQU 12 CR EQU $0D LF EQU $0A SPACE EQU $20 HYPHN EQU '- ORG $9000 START JMP MAIN * Table des entrees de menu * Maximum 20 elements, 1 element = 44 octets, soit 880 octets au total NBITM FCB 2 ; 2 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 TO7/ ; Fichier correspondant, 11 caracteres ELEM2 FCC /NRDOS/ ; Titre 2 (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 FILE2 FCC /NRDOS TO7/ ; Fichier correspondant, 11 caracteres ELEM3 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 3 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE3 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM4 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 4 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE4 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM5 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 5 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE5 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM6 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 6 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE6 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM7 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 7 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE7 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM8 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 8 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE8 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM9 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 9 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE9 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM10 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 10 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE10 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM11 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 11 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE11 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM12 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 12 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE12 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM13 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 13 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE13 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM14 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 14 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE14 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM15 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 15 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE15 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM16 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 16 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE16 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM17 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 17 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE17 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM18 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 18 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE18 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM19 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 19 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE19 FCC /12345678123/ ; Fichier correspondant, 11 caracteres ELEM20 FCB $00,$00,$00,$00,$00,$00,$00,$00 ; Titre 20 (32 octets max) 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 $00,$00,$00,$00,$00,$00,$00,$00 FCB $01 ; Disque source FILE20 FCC /12345678123/ ; Fichier correspondant, 11 caracteres * ORG $9374 MAIN EQU * LDX #MSG1 ; Affiche entete JSR PMSG ORCC #$FF ; Pas d'interruptions LDX #BEGRAM ZMEM1 EQU * ; Efface la memoire de $6100 à $9002 CLR ,X+ CMPX #NBITM BCS ZMEM1 LDX #ENDPRG ZMEM2 EQU * ; Efface la memoire de $9629 à $DFFF CLR ,X+ CMPX #ENDRAM BCS ZMEM2 LDS #BEGRAM+$100 ; Fixe la pile en $6200 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 ADCNTC ; Reprise en main apres un CTRL-C LDX #CPTRD STX ADCRDU ; Zone de compte-rendu LDX #INCON STX ADTRCR ; Routine de traitement code inconnu LDX #MSG1B JSR PMSG LDB NUPOST ; Lit numero de poste ANDB #$1F ; de 0 à 31 CLRA JSR DISPO ; Affiche numero de poste LDX #MSG2 ; Affiche "MENU" JSR PMSG 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 PUTC ; Affiche touche a presser LDB #SPACE ; Affiche " - " JSR PUTC LDB #HYPHN JSR PUTC LDB #SPACE JSR PUTC LDA #&32 ; 32 caracteres, $00 inclus DISTIT EQU * LDB ,X+ JSR PUTC 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,PCR BEQ SCRUT CLR FLAGK,PCR RTS SCRUT EQU * JSR 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 * JMP 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 SYSPRC ORB #$01 STB SYSPRC 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 LDD #$0024 STD DUREE LDD #$0005 STD TEMPO LDB #$03 STB TIMBRE LDB #$31 JSR PLAY PULS CC,A,B,PC PLAY EQU * JMP NOTEH * Convertit un nombre 16 bits non signe en hexadecimal * D = nombre, X = pointeur sur buffer caractere CV16 EQU * PSHS U LEAU BASE16,PCR BRA CONVRT * Convertit un nombre 16 bits non signe en decimal * D = nombre, X = pointeur sur buffer caractere CV10 EQU * PSHS U LEAU BASE10,PCR 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,PCR LBRA PMSG * Convertit un nombre 16 bits non signe en chaîne de caracteres (decimal) * D = nombre, resultat dans STRBUF CONV10 EQU * LEAX STRBUF,PCR BSR CV10 CLR ,X ; Termine la chaine RTS * Affiche un nombre en hexadecimal 16 bits (inutilise) DISP16 EQU * LEAX STRBUF,PCR 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,$4F FCC /MENU/ FCB $1B,$4C 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 = 8 FCB $00,$00,$00,$00,$00,$00,$00,$00 ENDPRG EQU * END