; Programme de R.CABANE qui permet d'ajouter ou remplacer une ou plusieurs lignes à un prgramme BASIC en cours d'éxécution
; ; 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 numeros 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 numeros,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 |