CODINGLA BIBLE DU CPC 6128

La bible du CPC 6128 : 3.04.01 L'arithmétique à virgule flottante

3.4 La ROM Basic

3.4.1 L'arithmétique à virgule flottante

****** instructions avec numéro de ligne

E0C8 'RESTORE'
E0C9 'AUTO'
E0CA 'RENUIVP
E0CB 'DELETF
E0CC 'EDIT'
E0CD 'RESUME'
E0CE 'ERL'
E0CF 'ELSE'
E0D0 'RUN'
E0D1 'LIST'
E0D2 'GOTO'
E0D3 'THEN'
E0D4 'GOSUB'
E0D5 fin de la table
E0D6 '!'
E0DA '&'
E0DD '$'
E0F9 Token pour numéro de ligne
E105 tester si chaîne
E108 Token pour nombre à virgule flottante
E&12 Token pour nombre deux octets
E119 10
E11D additionner Offset
E121 Token pour nombre un octet
E123 écrire dans buffer
E128 écrire dans buffer
El 2F écrire dans buffer
El34 comparaison HL <> DE
El45 Token pour nombre binaire
E14B écrire dans buffer
El52 aller chercher type de variable
El58 écrire dans buffer
E161 ""
E165 T, extension d'instruction
E16B '?'
E16D Token pour 'PRINT'
E172 adresse des opérateurs BASIC
E187 '"
E18B écrire dans buffer
E190 ""
E19A écrire dans buffer
E1A1 ""
E1A5 écrire dans buffer

****** traiter extension d'instruction

E1A8 écrire dans buffer
E1AB zéro
E1AF écrire dans buffer
E1B2 prochain caractère
E1B3 incrémenter pointeur
E1B4 tester si lettre ou chiffre
E1B7 oui, alors dans buffer
E1BA pointeur de un en arrière
E1BC fixer bit 7 sur le dernier caractère
E1C3 écrire dans buffer
E1C6 "'
E1C8 écrire dans buffer
E1CB caractère
E1CE écrire dans buffer jusqu'à la fin de la ligne

****** instruction BASIC LIST

E1D2 aller chercher numéro de zone de ligne
E1D7 aller chercher numéro de canal
E1DA fin de l'instruction, sinon 'Syntax error'
E1DD adresse de ligne actuelle sur zéro
E1E2 lister lignes
E1E5 au mode READY

****** lister lignes BASIC BC- DE

E1E8
E1E9 numéro de ligne dans DE
E1EB chercher ligne BASIC DE
E1F0 fin du programme ?
E1F5 terminé
E1F6 interruption par 'ESC
E1FA additionner longueur de ligne
E201 prochain numéro de ligne dans DE
E205 comparaison HL <> DE
E209 supérieur dernier numéro de ligne ?
E20B lister ligne BASIC dans buffer
E20E pointeur sur buffer
E211 sortir caractère
E214 incrémenter pointeur
E215 prochain caractère
E217 pas encore fin ?
E219 sortir LF
E21F lister prochaine ligne
E222 charger canal de sortie plus petit 8 ?
E225 caractère
E226 oui, sortie écran
E228 sortir caractère
E22B LF
E22E CR
E232 caractère de contrôle ?
E234 sortir comme caractère imprimable
E23A sortir caractère
E249 pointeur sur buffer
E26B token d'instruction ?
E27C sortir constante
E27E T, extension d'instruction
E290 '"
E294 'ELSE'
E299 ':'
E29D ""
E2A8 ""
E2CF écrire caractère dans buffer
E2D0 incrémenter pointeur de buffer

****** lister extension d'instruction

E2D6
E2D8 écrire dans buffer
E2DC prochain caractère
E2DD incrémenter pointeur
E2DE fin de ligne ?
E2DF non
E2E1 annuler bit 7
E2E3 écrire dans buffer
E2E6 dernier caractère ?
E2E8 non, prochain caractère
E2ED ' '
E2EF écrire dans buffer
E302 fonction ?
E324 tester si lettre ou chiffre
E337 nombre à virgule flottante ?
E33F nombre binaire ?
E343 nombre hexadécimal ?
E347 adresse de ligne ?
E34B numéro de ligne ?
E34F nombre deux octets ?
E356 nombre un octet ?
E35B chiffre ?
E376 *X'
E38D '&'
E398 type de variable 'Real'
E39A aller chercher nombre
E3AE 'A'
E3B3 plus #E41D, adresse des mots d'instruction
E3BF 26 lettres
E3C1 table des mots d'instruction
E3CA prochaine lettre
E3CC table des opérateurs de base
E3D2 'Syntax error'
E3F6 TAB
E3FA ' '

******* adresses des mots d'instruction

E41D A
E41F B
E421 C
E423 D
E425 E
E427 F
E429 G
E42B H
E42D I
E42F J
E431 K
E433 L
E435 M
E437 N
E439 O
E43B P
E43D Q
E43F R
E44I S
E443 T
E445 U
E447 V
E449 W
E44B X
E44D Y
E44F Z

****** table des instructions BASIC

****** lettre Z

E451 DA ZONE

****** lettre Y

E456 48 YPOS

****** lettre X

E45B 47 XPOS
E45F FD XOR
****** lettre W
E463 D9 WRITE
E468 D8 WINDOW
E46E D7 WIDTH
E473 D6 WHILE
E478 D5 WEND
E47C D4 WAIT

****** lettre V

E481 7F VPOS
E485 1D VAL

****** lettre U

E489 ED USING
E48E 1C UPPERS
E494 1B UNT

****** lettre T

E498 D3 TRON
E49C D2 TROFF
E4A1 EC TO
E4A4 46 TIME
E4A7 EB THEN
E4AB 7D TESTR
E4B0 7C TEST
E4B4 1A TAN
E4B7 D1 TAGOFF
E4BD D0 TAG
E4C0 EA TAB

****** lettres S

E4C4 CF SYMBOL
E4CA E7 SWAP
E4CE 7B STRINGS
E4D5 19 STR$
E4D9 CE STOP
E4DD E6 STEP
E4E1 18 SQR
E4E3 17 SQ
E4E6 CD SPEED
E4EB E5 SPC
E4EE 16 SPACES
E4F3 CC SOUND
E4F9 15 SIN
E4FC 14 SGN
E4FF CB SAVE

****** lettre R

E504 CA RUN
E507 7A ROUND
E50C 45 RND
E50F 79 RIGHT$
E515 C9 RETURN
E51B C8 RESUME
E521 C7 RESTORE
E528 C6 RENUM
E52D 13 REMAIN
E533 C5 REM
E536 C4 RELEASE
E53D C3 READ
E541 C2 RANDOMIZE
E549 C1 RAD

****** lettre Q

****** lettre P

E54F BF PRINT
E554 78 POS
E557 BE POKE
E55B BD PLOTR
E560 BC PLOT
E564 44 PI
E566 BB PEN
E569 12 PEEK
E56D BA PAPER

****** lettre O

E573 B9 OUT
E576 B8 ORIGIN
E57C FC OR
E57E B7 OPENOUT
E585 B6 OPENIN
E58B B5 ON SQ
E598 B4 ON ERROR GOTO 0
E5A0 B3 ON BREAK
E5A8 B2 ON

****** lettre N

E5AB FE NOT
E5AE B1 NEW
E5B1 B0 NEXT

****** lettre M

E5B6 AF MOVER
E5BB AE MOVE
E5BF AD MODE
E5C3 FB MOD
E5C6 77 MIN
E5C9 AC MID$
E5CD AB MERGE
E5D2 AA MEMORY
E5D8 76 MAX
E5DB DF MASK

****** lettre L

E5E0 11 LOWERS
E5E6 10 LOG10
E5EB 0F LOG
E5EE A9 LOCATE
E5F4 A8 LOAD
E5F8 A7 LIST
E5FC A6 LINE
E600 A5 LET
E603 0E LEN
E606 75 LEFTS

****** lettre K

E60C A4 KEY

****** lettre J

E610 OD JOY

****** lettre I

E614 OC INT
E617 74 INSTR
E61C A3 INPUT
E621 OB INP
E624 43 INKEYS
E62A OA INKEY
E62F A2 INK
E632 A1 IF

****** lettre H

E635 42 HIMEM
E63A 73 HEX$

****** lettre G

E63F DE GRAPHICS
E647 A0 GOTO
E64C 9F GOSUB

****** lettre F

E653 09 FRE
E656 EO FRAME
E65B 9E FOR
E65E E4 FN
E660 08 FIX
E663 DD FILL

****** lettre E

E668 07 EXP
E66B 9D EVERY
E670 9C ERROR
E675 41 ERR
E678 E3 ERL
E67B 9B ERASE
E680 40 EOF
E683 9A ENV
E686 99 ENT
E689 98 END
E68C 97 ELSE
E690 DC El
E692 96 EDIT

****** lettre D

E697 95 DRAWR
E69C 94 DRAW
E6A0 93 DIM
E6A3 DB DI
E6A5 49 DERR
E6A9 92 DELETE
E6AF 91 DEG
E6B2 90 DEFSTR
E6B8 8F DEFREAL
E6BF 8E DEFINT
E6C5 8D DEF
E6C8 72 DEC$
E6CC 8C DATA

****** lettreC

E6D1 E1 CURSOR
E6D7 06 CREAL
E6DC 05 COS
E6DF 7E COPYCHRS
E6E7 8B CONT
E6EB 8 A CLS
E6EE 89 CLOSEOUT
E6F6 88 CLOSEIN
E6FD 87 CLG
E700 86 CLEAR
E705 04 CINT
E709 03 CHR$
E70D 85 CHAIN
E712 84 CAT
E715 83 CALL ****** lettre B
E71A 82 BORDER
E720 71 BIN$ ****** lettre A
E725 81 AUTO
E729 02 ATN
E72C 01 ASC
E72F FA AND
E732 80 AFTER
E737 00 ABS

****** opérateurs BASIC et Tokens correspondants

E73B F8 w
E73D F9 'Backslash'
E740 FO >='
E743 FO '=>'
E747 EE V
E749 F2 '<>'
E74D F3 '<='
E751 F3 '=<'
E755 EF '='
E757 FI V
E759 F7 '/'
E75B 01 ':'
E75D F6 '*'
E75F F5 '-'
E761 F4 '+'
E763 C0 '"

****** annuler pointeur de programme

E766
E767 début du programme
E76D trois fois zéro à la fin du programme
E770 fin du programme
E77D placer numéro de ligne

****** remplacer adresses de ligne par numéro de ligne

E78B aller chercher prochain élément de la ligne
E78E fin de l'instruction ?
E790 oui
E791 'adresse de ligne' ?
E793 non
E79F numéro de ligne dans DE
E7A2 'numéro de ligne'
E7A6 placer

****** instruction BASIC DELETE

E7F3
E7F6 fin de l'instruction, sinon 'Syntax error'
E802 au mode READY
E805 aller chercher numéro de zone de ligne
E80A chercher ligne BASIC DE
E80F chercher ligne BASIC DE

****** aller chercher adresse de ligne

E82C
E82E numéro ou adresse dans DE
E830 'adresse de ligne' ?
E832 oui
E834 'numéro de ligne' ?
E836 'Syntax error'
E83A aller chercher numéro de ligne dans HL
E83D comparaison HL <> DE
E840 plus petit, chercher à partir du début du programme
E845 ignorer reste de la ligne
E848 à partir de adresse (HL)
E849 chercher ligne BASIC DE
E84C pas trouvé, chercher à partir de début du programme
E854 'adresse de ligne'
E859 dans le programme
E85B adresse de ligne dans le programme

****** chercher ligne BASIC DE

E861
E865 sortir message d'erreur
E868 'Line does not exist'
E869 début du programme
E86E longueur de ligne dans BC
E872 fin du programme ?
E873 pas trouvé
E878 numéro de ligne dans HL
E87C comparaison HL <> DE
E882 supérieur, pas trouvé
E883 égal, trouvé
E884 additionner longueur de ligne
E885 chercher encore

****** chercher ligne BASIC DE

E887 début du programme
E88B ranger adresse de ligne
E88D longueur de ligne dans BC
E891 fin du programme ?
E893 oui
E896 numéro de ligne dans HL
E89A comparaison HL <> DE
E89F actuel numéro de ligne supérieur ou égal ?
E8A0 additionner longueur de ligne
E8A1 chercher encore

****** instruction BASIC RENUM

E8A3 10, défaut pour valeur initiale
E8A6 aller chercher numéro de ligne dans DE
E8AA 0, défaut
E8AD suit virgule ?
E8B0 aller chercher numéro de ligne dans DE
E8B4 10, défaut
E8B7 suit virgule ?
E8BD fin de ligne, sinon 'Syntax error'
E8C6 chercher ligne BASIC DE
E8CB chercher ligne BASIC DE
E8D0 comparaison HL <> DE
E8D3 'Improper argument'
E8F2 'Improper argument'
E967 'IF'
E974 'ELSE'
E980 ']'
E984 '('
E98D ']'
E98F
E991 '('
E995 '['
E999 ')'
E9A1 'Syntax error'

****** instruction BASIC DATA

E9A8

****** instructions BASIC REM et '

E9AC

****** instruction BASIC ELSE

E9B2

E9C2 début du programme
E9D1 saut en (BC)
E9EC sortir message d'erreur
E9FA 'ELSE'
E9FD 'THEN'
EA02 ignorer les espaces
EAOE ""
EA12 T
EA16 "'
EA1A 'REM1
EA1E fonction
EA25 ""
EA2C ""

****** instruction BASIC RUN

EA7D fin de l'instruction ?
EA80 début du programme comme défaut
EA84 oui
EA86 numéro de ligne ?
EA88 oui
EA8A adresse de ligne ?
EA94 MC BOOT PROGRAMM
EA9A début du programme
EA9F aller chercher adresse de ligne
EAB7 à la boucle de l'interpréteur

****** instruction BASIC LOAD

EABA
EAC2 au mode READY
EACC DISK IN DIRECT
EAD6 aller chercher nom, ouvrir fichier
EAD9 type de fichier
EAE7 suit virgule ?
EAEA oui, aller chercher valeur 16 bits
EAED comme adresse de début
EAF1 fin de l'instruction, sinon 'Syntax error'
EAF6 adresse de début
EAF9 DISK IN DIRECT
EAFD DISK IN CLOSE

****** instruction BASIC CHAIN

EB02 'MERGE'
EB04 flag pour MERGE
EB07 ignorer les espaces
EB0D valeur défaut zéro pour ligne de début
EB10 suit virgule ?
EB13 non
EB16 V
EB18 aller chercher valeur 16 bits
EB1C suit virgule ?
EB1F non
EB21 tester si encore un caractère
EB24 'DELETE'
EB25 annuler zone de ligne
EB2A fin de l'instruction, sinon 'Syntax error'
EB30 Garbage Collection
EB3D aller chercher ligne de début
EB3E début du programme comme défaut
EB42 aucune ligne de début
EB4C flag pour MERGE

****** instruction BASIC MERGE

EB59 aller chercher nom, ouvrir fichier
EB5C fin de l'instruction, sinon 'Syntax error'
EB5F annuler variables
EB62 tester type de fichier
EB65 au mode READY
EB71 fin du programme
EB75 début du programme
EB79 fin du programme
EB7D BD := HL - DE
EBA5 comparaison HL <> DE
EBBA fin du programme
EBCD comparaison HL <> DE
EBE9 fin du programme
EBF1 fin du programme
EBFD 'Memory full'
EBFF sortir message d'erreur
EC01 DISK IN CHAR
EC05 CTRL Z
EC09 erreur disquette
ECOE erreur disquette
EC14 'EOF met'
EC1B sortir message d'erreur
EC24 fin du programme
EC2A fin du programme
EC32 fin du programme
EC4B fin du programme
EC67 type de fichier
EC6E fichier ASCII ?
EC70 non
EC72 type de fichier
EC75 fichier ASCII
EC77 oui
EC79 annuler bit 0 (fichier protégé)
EC7D sortir message d'erreur
EC80 'File type error'
EC87 début du programme
EC9A comparaison HL <> DE
ECA2 fin du programme
ECA5 type de fichier
ECA8 tester bit 0
ECAA fixer flag pour fichier protégé
ECAF DISK IN DIRECT
ECB2 'EOF met'
ECD8 'Direct command found'
ECDC 'Overflow'
ECDE sortir message d'erreur

****** instruction BASIC SAVE

ECE1
ECE4 OPENOUT
ECE7 type de fichier 0, programme BASIC
ECE9 suit virgule ?
ECEC non
ECEE tester si encore un caractère
ECF1 variable normale
ECF4 nom de variable
ECF5 convertir minuscules en majuscules
ECF7 'Syntax error'
ECFB adresse de base de la table
ECFE rechercher dans la table
ED01 adresse dans table sur pile
ED02 ignorer les espaces
ED05 nombre des entrées
ED06 pas trouvé, 'Syntax error'
ED08 'A'
EDOB 'B'
EDOE 'P'

****** SAVE ,P

EDI 1 type de fichier 1, protected
EDI 3 fin de l'instruction, sinon 'Syntax error'
ED1E début du programme
ED23 fin du programme
ED27 HL := HL - DE

****** SAVE ,B

ED30 tester si ','
ED33 aller chercher valeur 16 bits
ED36 ranger
ED37 tester si ','
ED3A aller chercher valeur 16 bits
ED3D ranger
ED3E suit virgule ?
ED41 0, défaut pour adresse d'entrée
ED44 oui, aller chercher valeur 16 bits
ED47 ranger
ED48 fin de l'instruction, sinon 'Syntax error'
ED4B type de fichier 2, binaire
ED4D adresse d'entrée
ED4E adresse de fin
ED4F adresse de début
ED50 DISK OUT DIRECT
ED53 interruption par 'ESC
ED56 CLOSEOUT

****** SAVE ,A

ED58 fin de l'instruction, sinon 'Syntax error'
ED5C 9
ED5E sortie sur canal 9, disquette
ED62 1 à
ED65 65535
ED68 lister lignes
ED6C sortie à nouveau sur défaut
ED6F CLOSEOUT
ED79 annuler espace, TAB et LF
ED7E '&'
ED82 tester si numérique
ED87 type sur Integer
ED8A annuler variable
ED9A '&'
EDA3 accepter nombre entier dans HL
EDBO V
EDB2 annuler espace, TAB et LF
EDB5 tester si chiffre
EDBC '.'
EDC1 type sur Integer
EDCE '.'
EDD5 type sur Real
EDEF tester si chaîne
EDF2 non
EDFF Integer 4 octets * 256 en virgule flottante
EE03 multiplier nombre par 10AA
EE07 fixer type de variable sur virgule flottante
EE0A copier variable de (DE) dans (HL)
EE14 annuler espace, TAB et LF
EE18 -1
EE1A '-'
EE1D 0
EE1E V
EE24 annuler espace, TAB et LF
EE28 tester si chiffre
EE2E convertir minuscules en majuscules
EE33 '0'
EE47 'F
EE52 annuler espace, TAB et LF
EE55 tester si chiffre
EE60 fixer type sur Real
EE6B 100
EE99 ignorer espace, TAB et LF
EECO fois 10
EEC4 plus prochain chiffre
EEDA accepter nombre entier dans HL
EEED ignorer espace, TAB et LF
EEFO convertir minuscules en majuscules
EEF3 base 2, binaire
EEF5 'X'
EEF9 base 16, hex
EEFB 'H'
EF00 ignorer espace, TAB et LF
EF05 Basis 10, décimal
EF08 convertir chiffre (hexa) en binaire
EF12 convertir chiffre (hexa) en binaire
EF1C base du système numérique
EF1D multiplication entière sans signe

******* convertir chiffre (hexa) en binaire

EF31 aller chercher caractère
EF32 incrémenter pointeur
EF33 tester si chiffre
EF36 oui
EF38 convertir minuscules en majuscules
EF3B 'A'
EF3E plus petit que 'A1, erreur
EF40 'A'-('9'+l)
EF42 '0'
EF45 pas erreur
EF47 annuler Carry

****** sortir nombre entier HL

EF49 convertir nombre entier en ASCII
EF4C sortir chaîne

★ ANNÉE: ???

Page précédente : La bible du CPC 6128 : 3.04.01 L'arithmétique à virgule flottante
Je participe au site:

» 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.73-desktop
Page créée en 274 millisecondes et consultée 1457 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.