Programme de R.CABANE qui permet d'ajouter ou remplacer une ou plusieurs lignes à un prgramme BASIC en cours d'éxécution . De plus , la RSX se loge n'importe où en mémoire . Chargement et initialisation : LOAD"RSXLINE.BIN",adresse:CALL adresse Usage : A$="ligne de programme quelconque"+CHR$(0):nl=ligne a ajouter ;ùLINE,àa$,nl Limites d'usage : L'interpréteur basic gère en permanence des pointeurs internes pour GOTO , GOSUB , FOR/NEXT , etc ... ùLINE,àa$,nl ne tient pas compte de ces pointeurs (ce serait l'enfer ...) . En conséquence , le numéro de ligne à ajouter ou remplacer doit toujours e^tre supérieur à celui où se trouve l'instruction ùLINE . Ex : 20 A$="GOTO 10"+CHR$(0) 'OK 20 A$="GOTO 10" 'NE FONCTIONNE PAS 30 ùLINE àa$,30 ; 30 ùLINE àa$,10 L'insertion / modification de ligne ne peut non plus figurer dans une boucle FOR/NEXT où WHILE/WEND , en revanche , cela marche dans un IF THEN GOTO comme en témoigne l'exemple ci-dessous qui vous montre de plus , comment faire digérer des guillemets à une chaîne de caracteères , CHR$(&22) étant le code ASCII du guillemet . C'est bizarre mais ça marche ... 1 MODE 2:GOTO 10 2 a$="'"+CHR$(0):i=10 3 ùLINE ,àa$,i:i=i+10:IF i 4' 10 MEMORY 39000:LOAD"rsxline.bin",39500:CALL 39500 20 a$(0)="PRINT"+CHR$(&22)+"R.CABANE"+CHR$(&22)+CHR$(0) 30 a$(1)="PRINT"+CHR$(&22)+"PRESENTE"+CHR$(&22)+CHR$(0) 40 a$(2)="PRINT"+CHR$(&22)+"RSX-LINE"+CHR$(&22)+CHR$(0) 50 I=0 60 ùLINE,àA$(I),70 'Dans ce cas , FOR/NEXT & WHILE WEND , interdits 80 I=I+1:IF I 90 GOTO 2 Note : La démonstration ne figure pas au menu de SOS PROGRAMMEURS , copiez RSXLINE.BIN sur une autre disquette et tapez ces 13 lignes de BASIC sur la même disquette avent de faire 'RUN' .
Pour les fans du Z80 , voici le code source de la RSX rédigé sur un assembleur CPM+ , les lignes notées '***' sont à supprimer dans un code source autre que CPM+
; RSX relogeable ; permettant de charger une ligne ; de programme BASIC a partir d'une ; chaine.Syntaxe: ; ùLINE,chaine$,numero ; ORG 09000H LIFT $ ;*** ROM:EQU 0B900H ; ; Adresses en RAM systeme ; DE contient l'adresse d'appel ; DEBUT:EX DE,HL ; ; Empecher un deuxieme appel ; LD (HL),0C9H PUSH HL ; ; Calculer l'adresse du nom du RSX ; LD DE,NOM-DEBUT ADD HL,DE PUSH HL POP BC ; ; BC contient cette adresse ; 5 octets plus loin est la table ; INC HL INC HL INC HL INC HL INC HL ; ; HL contient l'adresse de la table ; LD (HL),C INC HL LD (HL),B DEC HL PUSH HL POP BC POP HL INC HL ; ; Integrer l'extension ; JP 0BCD1H ; NOM: DB'LIN','E'+128,0 TABLE: DS 2 ; ROUTINE:PUSH AF ; Tester quel CPC PUSH DE CALL 0BBA2H LD A,E SUB 6FH ; truc pour distinguer les CPC LD I,A ; garde valeur pour tester POP DE ; flag Z pour le 464 POP AF CP 2 ; combien de params ? JR NZ,ERREUR LD A,I ; ; Assembler ligne BASIC ; LD HL,(0AE36H) ; 464 JR Z,SUITE LD HL,(0AE1DH) ;ligne actuelle 6128 ; SUITE:LD A,(HL) INC HL LD H,(HL) LD L,A ;Num.ligne actuelle dans HL ; ; Brancher la ROM superieure ; CALL ROM ; ; Comparer numéros dans HL et DE ; LD A,H XOR D BIT 7,A LD A,H JR Z,MSIGNE CPL ADD A,A FINCOMP:SBC A,A JR NC,ERREUR ; ;Recuperer le descripteur chaine ; LD L,(IX+2) LD H,(IX+3) INC HL LD A,(HL) INC HL LD H,(HL) LD L,A ;Adresse de la chaine en HL LD A,I ; Z si 464, M si 6128, P si 664 ; ; Assembler ligne BASIC ; JP Z,0E6D2H ; 464 JP M,0E7ABH ; 6128 JP 0E7B0H ; 664 ; ;******** SOUS-PROGRAMMES ********** ; ; Comparer HL et DE memes signes ; MSIGNE:CP D JR NZ,FINCOMP ; ; comparer poids faibles ; LD A,L ; on fait A - E Carry si A < E SUB E JR NZ,FINCOMP ; ; sinon memes numéros,exclu ; ERREUR:LD A,I ; fixe flag Z selon A LD A,5 ; Improper argument JP NZ,0CB55H ; 664 et 6128 LD E,A JP 0CA94H ; 464 FIN: END
★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.7-desktop/c Page créée en 850 millisecondes et consultée 1675 foisL'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko. |
|
|