3.4 La ROM Basic 3.4.1 L'arithmétique à virgule flottante ******* convertir nombre entier en ASCIIEF4F EF51 accepter nombre entier dans HL EF61 zéro EF62 convertir nombre en chaîne formatée EF68 ' ' EF98 '%' F02F '.' F034 T F03D '+E' F047 '-' F04C '0'-1 F04F 10 F053 '9'+1 F079 V F099 '0' F0A8 '5' F0B1 V F0C0 '9' F0C3 '0' F0DA '0' F0E8 '0' F128 ',' F135 '0' F146 '0' F156 '-' F162 V F166 ' • F181 '*' F185 ' ' F1CF '0' F1DE '0' ****** fonction BASIC PEEK F20D UNT F210 READ RAM, LD A,(HL) F211 accepter contenu accu comme nombre entier ****** instruction BASIC POKE F214 aller chercher adresse 16 bits F218 tester virgule et aller chercher valeur 8 bits F21C écrire valeur dans adresse ****** fonction BASIC INP F21E CINT F221 adresse de port dans BC F223 lire port F225 accepter contenu accu comme nombre entier ****** instruction BASIC OUT F228 aller chercher adresse et valeur F22B sortir ****** instruction BASIC WAIT F22E aller chercher adresse et valeur F231 valeur 8 bits dans D F232 3ème paramètre zéro F234 aller chercher évent. troisième paramètre F237 troisième paramètre dans E F238 lire port F23B relier F23C et attendre ****** aller chercher valeurs 16 bits et 8 bits F23F aller chercher valeur 16 bits F243 dans BC F244 tester si ',' F247 et aller chercher valeur 8 bits ****** extension d'instruction F24A incrémenter pointeur de programme F24C suit octet zéro ? F24F oui, KL FIND COMMAND F252 adresse d'instruction dans DE F254 pas trouvé, 'Unknown command' F257 ignorer mot d'instruction F257 ignorer mot d'instruction F258 bit 7 mis ? F259 non, continuer à lire F25B à l'instruction CALL F25D sortir message d'erreur F260 'Unknown command' ****** instruction BASIC CALL F261 aller chercher valeur 16 bits F264 #FF = RAM sélectionnée F266 adresse dans #AE55 F26B octet de configuration dans #AE57 F26E sauver pointeur de pile F272 maximum 32 paramètres F274 suit virgule ? F277 non F27A aller chercher expression F27E et adresse sur pile F27F prochain paramètre F281 fin de l'instruction, sinon 'Syntax error' F284 sauver HL F289 nombre des paramètres dans accu F28E adresse du bloc de paramètres dans IX F290 exécuter routine F293 ramener pointeur de pile F297 initialiser descripteur de pile F29A restaurer HL ****** instruction BASIC ZONE F2A2 aller chercher valeur 8 bits différente de zéro F2A5 comme pas de fabulation ****** instruction BASIC PRINT F2A9 numéro de canal F2AC fin de l'instruction ? F2AF oui, sortir LF F2B2 'USING' F2B8 adresse de base de la table F2BB rechercher dans la table F2BF JP (DE), exécuter fonction F2C2 fin de l'instruction ? F2C5 non, continuer F2C8 nombre des entrées de la table F2C9 adresse de retour si pas trouvé F2CB 7 F2CE 'SPC F2D1 'TAB' F2D4 ';' F2D5 ignorer espaces ****** PRINT F2D7 aller chercher expression F2DC tester si chaîne F2DF oui F2E1 convertir nombre en chaîne ASCII F2E4 aller chercher param. de chaîne F2E7 ajouter ' ' caractère espace F2E9 aller chercher descripteur de chaîne F2EC incrémenter longueur F2F0 aller chercher descripteur de chaîne F2F3 longueur F2FF ' ' F302 caractère de contrôle ? F30F canal de sortie sélectionné ****** PRINT , F31E ignorer les espaces F321 pas de fabulation ****** PRINT SPC F339 aller chercher valeur 8 bits dans parenthèses ****** PRINT TAB F342 aller chercher valeur 8 bits dans parenthèses ****** aller chercher valeur 8 bits dans parenthèses F362 ignorer les espaces F365 tester si '(' F368 aller chercher valeur 8 bits F36B tester si ')* ****** PRINT USING F383 ignorer les espaces F386 aller chercher expression chaîne F389 tester si encore un caractère F38C ';' F392 aller chercher expression F3A9 fin de l'instruction ? F3AC oui F3B4 aller chercher expression F3D7 'Underline' F3F4 Y F3F6 ignorer les espaces F3F9 tester si ',' F3FF '&' F404 T F408 'Backslash' F413 'Backslash' F417 " F436 tester si caractère de formatage F443 formater nombre F446 sortir chaîne ****** tester si caractère de formatage F44D F454 V F460 '.' F464 '#' F47A ' ' F47C '*' F489 '#' F49C '$' F4B0 'Improper argument' F4B8 '.' F4BC '#' F4C0 ',' F4D0 '#' F4D6 'A' F4F9 '-' F4FD '+' F507 '$' ****** instruction BASIC WRITE F50D F510 fin de l'instruction F513 oui F516 aller chercher expression F51B tester si chaîne F51E oui F520 convertir nombre en ASCII F523 et sortir F528 "" F52A sortir F52D sortir chaîne F530 "" F532 sortir F537 Fin de l'instruction ? F53D ',' F53F sortir F542 continuer ****** configurer mémoire F544 place mémoire de DE à HL F547 comparaison HL avec BC F54A plus grande adresse < #AC00 ? F54B HIMEM F54E fin des chaînes F551 fin de la RAM libre F555 début de la RAM libre F558 plus 303 F55D donne début du programme ******* instruction BASIC MEMORY F570 aller chercher valeur 16 bits F577 comparaison HL <> DE ******** F58F TXT GET M TABLE F5F7 comparaison HL <> DE ******* calculer longueur de la zone des chaînes F5FD F5FF début des chaînes F603 fin des chaînes F606 BC := HL - DE ******* incrémenter pointeurs progr. et de variable de BC F60C fin du programme F610 fin du programme F618 début des variables F61C début des variables F61F début des tableaux F623 début des tableaux F626 fin des tableaux F62A fin des tableaux F633 fin du programme F63E fin du programme F645 BC := HL - DE ****** initialiser pile BASIC F652 début de la pile F655 pointeur de pile BASIC F658 pour un octet F65A reserver place dans pile BASIC F65D zéro sur pile F65F incrémenter pointeur de pile F660 et ranger ****** libérer place dans pile BASIC F665 pointeur de pile F669 retrancher contenu accu F671 ranger nouvelle valeur du pointeur de pile BASIC ****** reserver place dans pile BASIC F675 pointeur de pile BASIC F67A additionner contenu accu F67E pointeur de pile BASIC F683 donne plus de #4F94 de dépassement ? F686 alors pointeur de pile est > #B06C F689 initialiser pile BASIC F68C 'Memory full' F68F fin des chaînes F692 début des chaînes ******* reserver place pour chaîne F696 F69C début des chaînes F6A4 comparaison HL <> DE F6AE sortir message d'erreur F6B1 'chaîne space fuir F6B2 début des chaînes F6BF fin du programme F6D2 comparaison HL <> DE F6EA transfert de bloc LDDR F6F9 BC := HL - DE F6FE transfert de bloc LDIR F705 BC := HL - D F70C début des chaînes F717 début des chaînes ****** instruction BASIC SYMBOL F784 'AFTER' F788 aller chercher valeur 8 bits F78C tester si ',' F78F 8 valeurs F792 suit virgule ? F796 oui, aller chercher valeur 8 bits F79B déjà 8 arguments ? F79F TXT GET MATRIX F7A2 matrice pas dans RAM, 'Improper argument' F7A5 8 F7A8 plus adresse matrice F7A9 un octet de la pile F7AB dans table matrice F7AD prochain octet ****** SYMBOL AFTER F7B1 ignorer les espaces F7B4 aller chercher valeur entière avec signe F7B8 256 F7BB comparaison HL <> DE F7BE 'Improper argument' F7C2 TXT GET M TABLE F7C6 matrice pas encore défini ? F7D3 'Improper argument' F7DD 256 F7E0 TXT SET M TABLE F7FD 'Memory fulF F805 TXT SET M TABLE F815 comparaison HL <> DE F818 'Memory fuir F833 fin des chaînes F83E transfert de bloc LDDR F844 début des chaînes F851 transfert de bloc LDIR F857 fin des chaînes F85B début des chaînes F865 fin du programme F868 comparaison HL <> DE F875 sortir message d'erreur F878 'Memory full' ****** lire chaîne F879 F87E "" F880 ignorer les espaces F89F ',' F8AD JP (DE) F8BE ' ' F8C2 TAB F8C6 CR F8CA LF ****** sortir chaîne F8D0 aller chercher param. de chaîne F8D3 chaîne vide ? F8D4 aller chercher caractère F8D5 incrémenter pointeur F8D6 sortir caractère F8D9 prochain caractère ****** fonction BASIC LOWERS F8EC convertir majuscules en minuscules ****** convertir majuscules en minuscules F8F1 'A' F8F4 'Z'+1 F8F7 'a'-'A' ****** fonction BASIC UPPERS F8FA convertir minuscules en majuscules F915 saut en (BC) ****** addition de chaîne F91D pointeur sur seconde chaîne F921 longueurs F922 additionner F923 pas dépassement F925 sortir message d'erreur F928 'String too long' ****** fonction BASIC BIN$ F964 ****** fonction BASIC HEX$ F969 F96D aller chercher expression F975 suit virgule ? F978 0 comme défaut F979 oui, aller chercher valeur 8 bits F97C supérieur ou égal 17 ? F97E oui, 'Improper argument' F982 tester si ')' F98A convertir nombre en chaîne ******* fonction BASIC DECS F98F aller chercher expression F992 tester si ',' F995 placer sur pile BASIC F998 aller chercher expression chaîne et paramètre F99B tester si ')' F99F longueur F9A0 libérer place dans pile BASIC F9A4 longueur F9A5 accepter variable F9AB tester si caractère de formatage F9AE 'Improper argument' F9B3 'Improper argument' F9B7 formater nombre F9BA accepter chaîne ****** fonction BASIC STR$ F9BC F9BD convertir nombre en chaîne F9C1 compteur pour longueur de chaîne sur -1 F9C3 zéro F9C4 incrémenter compteur F9C5 fin des chaînes ? F9C6 incrémenter pointeur F9C7 non, prochain caractère F9CA longueur de chaîne F9CB réserver place, créer descripteur de chaîne ****** fonction BASIC LEFT$ F9D3 aller chercher chaîne et valeur 8 bits ****** fonction BASIC RIGHT$ F9D8 aller chercher chaîne et valeur 8 bits F9DB longueur de chaîne F9DC moins paramètre ****** fonction BASIC MID$ F9E2 tester si '(' F9E5 aller chercher chaîne et valeur 8 bits F9E8 zéro, 'Improper argument' F9EB 255 F9EC comme défaut F9ED aller chercher troisième argument F9F0 tester si ')' ****** instruction BASIC MID$ FA07 tester si '(' FA0A aller chercher variable FA0D type chaîne, sinon 'Type mismatch' FA19 'Improper argument' FA1C 255 FA1D comme défaut FA 1E aller chercher troisième argument FA21 tester si ')' FA24 tester si '=' FA28 aller chercher expression et paramètre chaîne FA3E transfert de bloc LDIR FA4 3 aller chercher expression chaîne ****** aller chercher troisième argument pour MID$ FA4F défaut 255 FA52 ')' FA56 tester si ',' FA59 aller chercher valeur 8 bits ****** fonction BASIC LEN FA69 aller chercher param. de chaîne, longueur dans A FA6C accepter contenu accu comme nombre entier ****** fonction BASIC ASC FA6E code ASCII du premier caractère FA71 accepter contenu accu comme nombre entier ****** fonction BASIC CHR$ FA74 CINT, <256 FA77 code ASCII dans accu FA7A longueur 1 FA7C créer chaîne avec longueur A ****** fonction BASIC INKEY$ FA7E KM READ CHR FA81 aucune touche appuyée ? FA83 'ESC FA85 chaîne vide FA87 'ESC FA89 chaîne vide FA8B accepter caractère dans chaîne ****** fonction BASIC STRINGS FA8D aller chercher valeur 8 bits, longueur FA91 tester si ',' FA94 aller chercher expression FA97 tester si ')' FA9F créer chaîne avec longueur A FAA1 tester si chaîne FAA4 non FAA6 aller chercher param. de chaîne FAA9 chaîne vide, 'Improper argument' FAAB aller chercher code ASCII ****** fonction BASIC SPACE$ FAAD FAB0 ' ' ****** fonction BASIC VAL FABE aller chercher param. de chaîne FAC1 accepter contenu accu comme nombre entier FACE convertir chaîne en nombre FAD5 sortir message d'erreur FAD8 'type mismatch' FAE2 'Improper argument' ****** fonction BASIC INSTR FAE5 aller chercher expression FAE8 tester si chaîne FAEB position début défaut 1 FAED oui FAEF CINT, < 256 FAF3 'Improper argument' FAF7 tester si ',' FA FA aller chercher expression chaîne FAFD tester si ',' FB05 aller chercher expression et paramètre chaîne FB08 tester si ')' FB48 accepter contenu accu comme nombre entier FB65 début des chaînes FB68 comparaison HL <> BC FB6D fin des chaînes FB70 comparaison HL <> BC FB9E début du programme FBA1 comparaison HL <> DE FBA4 fin des chaînes FBA8 comparaison HL <> DE FBAD fin du programme FBB1 comparaison HL <> DE FBC4 transfert de bloc LDIR ******* initialiser descripteur de pile FBCC FBCF pointeur dans descripteur de pile pour chaînes FBD7 chaîne FBD9 comme type de variable FBDC pointeur dans descripteur de pile FBE2 descripteur de chaîne FBE5 comparaison HL <> DE FBE8 'String expression too complex' FBEA sortir message d'erreur FBF0 pointeur dans descripteur de pile FBF6 type chaîne, sinon 'type mismatch' FC0A début des chaînes FC10 comparaison HL <> DE FC1B début des chaînes FC27 comparaison HL <> DE ****** fonction BASIC FRE FC53 tester si chaîne FC56 non FC5B Garbage Collection FC5E calculer place mémoire libre ****** Garbage Collection FC64 FC7C comparaison HL <> DE FC87 fin des chaînes FC8B début des chaînes FCA9 comparaison HL <> BC FCAF début des chaînes FCB3 BC := HL - DE FCB7 comparaison HL <> DE FCBC transfert de bloc LDDR FCC0 début des chaînes FCD9 comparaison HL <> DE FCE6 comparaison HL <> DE FCF3 aller chercher résultat numérique FD03 UNT ******* opérateur BASIC V FD0C tester type des opérandes FD0F virgule flottante ? FD11 addition entière HL := HL + DE FD14 pas dépassement, accepter résultat dans HL FD17 convertir en virgule flottante FD1A addition à virgule flottante FD1D pas dépassement, ok FD1E 'Overflow' ******* opérateur BASIC '-' FD21 tester type des opérandes FD24 virgule flottante ? FD26 soustraction entière HL := DE - HL FD29 pas dépassement, accepter résultat dans HL FD2C convertir en virgule flottante FD2F soustraction à virgule flottante FD32 pas dépassement, ok FD33 'Overflow' ******* opérateur BASIC '*' FD35 tester type des opérandes FD38 virgule flottante ? FD3A multiplication entière avec signe FD3D pas dépassement, accepter résultat dans HL FD40 convertir en virgule flottante FD43 multiplication à virgule flottante FD46 pas dépassement, ok FD47 'Overflow' ****** comparaison arithmétique FD49 tester type des opérandes FD4C comparaison entiers FD4F comparaison à virgule flottante ****** opérateur BASIC '/' FD52 FD57 division à virgule flottante FD5B 5 octets FD5E transférer résultat FD60 ok ? FD61 'Division by zéro' FD64 'Overflow' ******* opérateur BASIC 'Backslash' FD67 FD6B division entière avec signe FD6E accepter résultat dans HL FD71 'Division by zéro' ******* opérateur BASIC 'MOD' FD79 FD7D calcul MOD FD80 accepter résultat dans HL FD83 sortir message d'erreur FD86 'Division by zéro' ******* opérateur BASIC 'AND' FD87 FD8C HL := HL AND DE FD8F accepter nombre entier HL ******* opérateur BASIC 'OR' FD92 FD97 HL := HL OR DE FD9A accepter nombre entier HL ******* opérateur BASIC 'XOR' FD9C FDA1 HL := HL XOR DE FDA4 accepter nombre entier HL ****** opérateur BASIC 'NOT' FDA6 CINT FDAC former complément de HL FDAE accepter nombre entier HL ******* fonction BASIC ABS FDB0 SGN FDB3 signe positif, terminé ****** inverser signe FDB4 aller chercher résultat numérique FDB7 changement de signe virgule flottante FDBA changement de signe Integer FDBD sauver résultat FDC0 dépassement, convertir nombre en virgule flottante ******* déterminer signe FDC4 FDC6 SGN ******* déterminer signe FDCC aller chercher résultat numérique FDCF Integer SGN FDD2 SGN ******* arrondir nombre FDD7 accepter type et valeur de variable FDD7 accepter type et valeur de variable FDDB aller chercher résultat numérique FDDE chiffres d'arrondissage FDDF valeur à virgule flottante ? FDE2 arrondissage après virgule? terminé FDE3 convertir valeur entière en virgule flottante FDE6 arrondir nombre FDE9 CINT FDEC chiffres d'arrondissage FDED différ. de zéro, alors arrondir FDEF convertir virgule flottante en Integer FDF2 exécuter fonction FDF6 chiffres d'arrondissage FDF7 multiplier nombre à virgule flottante par 10AA FDFA convertir virgule flottante en Integer FE02 convertir Integer en virgule flottante FE05 inverser chiffres d'arrondissage FE06 correspond à division FE07 multiplier nombre à virgule flottante par 10AA ****** fonction BASIC FIX FE0E fonction FIX ****** fonction BASIC INT FE13 fonction INT FE16 aller chercher résultat numérique FE19 Integer ? FE1A JP (DE), exécuter fonction FE1E type de variable FE25 type de variable dans C, pointeur dans HL FE29 convertir Integer en virgule flottante FE2D chaîne ? FE34 si positif accepter signe de B FE38 accepter résultat dans HL FE3C chaîne ? FE3E oui, 'type mismatch' FE40 type de variable FE43 chaîne ? FE45 oui, 'type mismatch' FE4D type de variable FE50 ranger FE52 convertir nombre entier en virgule flottante FE58 convertir nombre entier en virgule flottante FE5D pointeur sur variable FE68 variable FE6D 'type mismatch' FE70 type de variable FE73 comparer FE74 Integer ? FE76 non ******* opérande Integer en virgule flottante FE78 premier opérande FE7B convertir FE7E pointeur de pile BASIC, second opérande FE81 convertir FE84 dans DE ******* convertir nombre entier en virgule flottante FE8D nombre dans DE ****** convertir nombre entier en virgule flottante FE95 type de variable FE98 sur 'Real' FE9E négatif, alors changement de signe integer FEA2 convertir Integer en virgule flottante ******* convertir nombre 4 octets en virgule flottante FEA5 Lo-Word FEA9 Hi-Word FEAC type de variable FEAF 'Real' FEB1 pointeur sur valeur 4 octets FEB3 convertir nombre en virgule flottante ****** fonction BASIC CINT FEB6 FEBA 'Overflow' FEBF résultat FECC 'Overflow' FECE pointeur sur type de variable FED1 charger type de variable FED2 type sur Integer FED5 comparer avec chaîne FED9 'type mismatch' FEDD convertir nombre à virgule flottante en Integer FEE1 accepter signe B dans nombre entier HL ****** valeur entière (HL) dans HL FEE6 ****** fonction BASIC UNT FEEB aller chercher résultat numérique FEEE Integer ? FEEF convertir virgule flottante en Integer FEF2 'Overflow' FEF5 accepter signe B dans nombre entier FEF8 accepter nombre entier dans HL FEFB sortir message d'erreur FEFE 'Overflow' FF02 type de variable FF05 comparer FF06 différent ? FF0F CINT FF11 type chaîne, sinon 'Type mismatch' ****** fonction BASIC CREAL FF14 aller chercher résultat numérique FF17 Integer, alors convertir ******* fixer valeur à virgule flottante sur zéro FF1B ****** fonction BASIC SGN FF2A SGN ****** accepter contenu accu comme nombre entier FF32 octet faible FF33 annuler octet fort ****** accepter nombre entier dans HL FF35 ranger valeur FF38 type sur Integer FF3A et ranger ****** type de variable sur virgule flottante FF3E pointeur sur nombre à virgule flottante FF41 type sur Real ****** aller chercher type de variable, HL pointe sur variable FF45 pointeur sur variable FF48 type dans C FF49 HL pointe sur variable ****** aller chercher type de variable FF4B type de variable dans accu ****** aller chercher résultat numérique FF4F type de variable FF52 chaîne ? FF54 oui, 'type mismatch' FF56 charger valeur entière FF59 pas virgule flottante, terminé FF5A adresse du nombre à virgule flottante FF5E tester si chaîne FF61 oui, ok FF62 sortir message d'erreur FF65 'type mismatch' ****** tester si chaîne FF66 type de variable FF69 chaîne ? FF6C fixer type de variable FF6F adresse dans DE ****** placer résultat sur pile BASIC FF74 FF76 type de variable FF79 égale besoin de pile FF7A reserver place dans pile BASIC FF7D placer résultat sur pile ****** copier variable dans (HL) FF83 adresse objet dans DE FF84 adresse source FF88 type de variable FF8B égale compteur de décalage FF8C annuler octet fort FF8E décaler ****** tester si lettres FF92 convertir minuscules en majuscules FF95 'A' FF99 'Z'+l ******* tester si caractère alphanumérique FF9C tester si lettre FF9F oui FFA0 '.' FFA4 '0' FFA8 '9'+l ****** convertir minuscules en majuscules FFAB 'a' FFAE 'z'+l FFB1 'a'-'A' ****** rechercher dans table suivante FFB4 FFB6 charger longueur de table FFB8 adresse de retour pour recherche négative FFBB comparer caractère FFBC incrémenter pointeur FFBD trouvé ? FFBF table pas encore terminée ? FFC1 charger adresse de retour FFC5 adresse dans HL ****** rechercher dans zone de mémoire (HL) FFCA FFCC A dans C FFCE zéro FFD2 égale accu antérieur FFD4 fixer Carry ******* comparaison HL <> DE FFD8 FFD9 H -D FFDB L-E ****** comparaison HL <> BC FFDE FFDF H - B FFE1 L-C ******* BC := HL - DE FFE4 FFE6 HL := HL - DE FFE9 BC := HL FFEC nombre dans C FFED octet fort sur zéro FFF0 compteur BC = 0 ? FFF1 oui, alors terminé FFF2 transfert de bloc ****** transfert de bloc LDDR FFF5 FFF6 compteur BC = 0 ? FFF7 oui, alors terminé FFF8 transfert de bloc ****** saut en (HL) FFFB ****** saut en (BC) FFFC ****** saut en (DE) FFFE CPCrulez[Content Management System] v8.7-desktop/c Page créée en 186 millisecondes et consultée 1240 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. |
|