APPLICATIONSDIVERS ★ RSX LINE (c) R.CABANE ★

RSX Line (SOS Programmeurs)Applications Divers

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

★ ANNÉE: ???
★ CONFIG: ???
★ LANGAGE: ???
★ LiCENCE: LISTING
★ AUTEUR: ROBERT CABANE

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» RSXLINE    SOURCEDATE: 2012-08-27
DL: 212
TYPE: text
SiZE: 3Ko
NOTE:

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Sound FX RSX (Popular Computing Weekly)
» Applications » RSX Bexec (CPC Amstrad International)
» Applications » RSX DOS BEF (Schneider CPC-Welt)
» Applications » RSX Block Save
» Applications » RSX Byte Search
» Applications » RSX INLINE (Computer Partner)
Je participe au site:
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 007 millisecondes et consultée 1713 fois

L'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.