code_source_de_menu.to7_v3.2
This is an old revision of the document!
Code source de MENU.TO7 v3.1, 3.2, 3.3
* MENU.TO7 version 3.1 RESET EQU $FFFE 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 M5VCT EQU $EFFE ADCNTC EQU $5FFE ADCRDU EQU $5FF4 ADTRCR EQU $5FFA TEMPO EQU $2039 DUREE EQU $203B TIMBRE EQU $203D 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 $9562,PCR BRA $951A PSHS U LEAU $9557,PCR PSHS B,A LDA ,U+ STA $01,S PULS A BSR $9548 BNE $9532 DEC ,S BNE $9522 LDB #$30 STB ,X+ BRA $9546 BSR $9548 PSHS B LDB ,X ADDB #$30 CMPB #$39 BLS $953E ADDB #$07 STB ,X+ PULS B DEC ,S BNE $9530 PULS A,U,PC CLR ,X SUBD ,U BCS $9552 INC ,X BRA $954A ADDD ,U++ TST ,X RTS ??? BEQ $956A COM <$E8 NEG <$64 NEG <$0A NEG <$01 LSR <$10 NEG <$01 NEG <$00 ??? NEG <$4F BSR $9583 LEAX -$02,X LBRA $94C4 BSR $9583 LEAX -$05,X LBRA $94C4 BSR $9583 LEAX $95A0,PCR LBRA $94C4 LEAX $95A0,PCR BSR $9514 CLR ,X RTS LEAX $95A0,PCR PSHS X LBSR $950C CLR ,X PULS X LBRA $94C4 ... ENDPRG EQU * END
code_source_de_menu.to7_v3.2.1685190478.txt.gz · Last modified: 2023/05/27 14:27 by fool-duplex