code_source_de_menu.to7_v3.2
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
code_source_de_menu.to7_v3.2.txt · Last modified: 2025/03/19 14:22 by 127.0.0.1