3.4 La ROM Basic 3.4.1 L'arithmétique à virgule flottante Vous trouverez dans les pages suivantes le listing de l'arithmétique à virgule flottante. Chaque routine contient également l'adresse de la table de saut à travers laquelle elle est appelée par l'interpréteur Basic. Vous trouverez ensuite, dans le chapitre consacré à la ROM BASIC, aux adresses DD2F à DE19, l'arithmétique entière qui est utilisée par l'interpréteur chaque fois que c'est possible. En effet comme elle ne travaille qu'avec des valeurs sur deux octets, cette arithmétique est toujours nettement plus rapide que le calcul avec des nombres à virgule flottante. Servez-vous également de ce fait dans vos programmes et utilisez autant que possible des variables entières. Cela vaut notamment pour les boucles FOR-NEXT (voyez également à ce sujet le chapitre 3.2). ****** Cpc 664 & 6128 BASIC 1.1C000 première ROM de premier plan C001 marque 1 C002 Version 1 C003 Modification 0 C004 Adresse du nom ****** initialisation du BASIC C006 Stack à partir de C000 C009 KL ROM WALK C00C configurer la mémoire C00F trop peu de mémoire, alors Reset C013 supprimer flag pour inhibation espaces C016 pointeur sur ' BASIC 1.1* C019 sortir texte C01C adresse de ligne actuelle sur zéro C01F annuler numéro d'erreur C022 RND-Init C025 annuler mode AUTO C028 instruction NEW C02B 240 C02E SYMBOL AFTER 240 C031 au mode READY C033 ' BASIC 1.1% LF,LF,0 C040 'BASF, 'C'+80H,0 ******* instruction BASIC EDIT C046 amener numéro de ligne dans DE C04A initialiser la pile C04D chercher ligne BASIC DE C050 lister ligne BASIC dans buffer C053 aller chercher ligne d'entrée ******* mode READY C058 initialiser la pile C05B diverses initialisations C05E aller chercher adresse de ligne C061 SOUND HOLD C064 supprimer Break Event C067 initialiser l'écran C06A programme protégé ? C06E oui, supprimer programme et variables C071 numéro ERROR C074 'Syntax error' ? C076 non C078 numéro ERROR sur zéro C07B aller chercher numéro de ligne de la ligne ERROR C07F à l'instruction EDIT C081 pointeur sur 'Ready' C084 sortir C087 adresse de ligne actuelle sur zéro C08A AUTO-Flag mis ? C08E non C090 indiquer prochain numéro de ligne C093 au mode READY C095 ignorer espace, TAB et LF C09D ignorer espace, TAB et LF COAD COAF aller chercher ligne d'entrée C0B2 'ESC appuyée, alors répéter C0B4 sortir LF C0B7 ignorer espace, TAB et LF C0CB C0D4 à la boucle de l'interpréteur C0D7 'Ready', LF,0 ******* annuler mode AUTO C0DF ******* fixer mode AUTO C0E1 numéro de ligne C0E6 mettre flag pour AUTO ******* instruction BASIC AUTO COEA 10, Default C0EF ',' C0F1 amener numéro de ligne dans DE C0F5 10, Default C0F8 suit virgule ? C0FB oui, amener numéro de ligne dans DE C0FE fin de ligne, sinon 'Syntax error' C102 ranger incrément AUTO C106 ranger flag pour mode AUTO C10D numéro de ligne C115 annuler mode AUTO C118 éditer ligne C11E numéro de ligne C121 plus incrément C122 fixer mode AUTO ****** instruction BASIC NEW C128 C129 supprimer programme et variables C12C au mode READY ****** instruction BASIC CLEAR C12F INPUT' Cl3A diverses initialisations ****** CLEAR INPUT C13F ignorer les espaces ****** supprimer programme et variables C145 début de la RAM libre C149 HIMEM C152 annuler accu C154 supprimer début RAM libre jusqu'à HIMEM C156 annuler flag pour programme protégé C159 restaurer pointeur de variable C15F interrompre Disk I/O C163 fixer mode RAD C166 initialiser pile descripteur C16C Stream-Reset C16F TROFF C172 supprimer mode AUTO C175 diverses initialisations, voir plus bas C17A supprimer Strings C17D restaurer pointeur de variable C180 toutes les variables sur type 'Real' C183 ignorer espace, TAB et LF ****** diverses initialisations C189 initialiser taquets de tabulation C18C annuler pointeur de programme C18F annuler ON ERROR C192 annuler pointeur de programme après interruption C195 reset SOUND et event C198 initialiser pile BASIC C19B annuler flag pour FN C19E RESTORE C1AB < 8 ? C1AD TXT STR SELECT C1B1 actuel numéro stream C1B7 canal d'entrée Cl Cl actuel numéro stream C1C4 imprimante ? C1C7 canal d'entrée C1CA disquette? C1CD tester sur numéro stream C1D2 tester numéro stream C1D7 tester numéro stream ****** aller chercher numéro stream C1E8 tester numéro stream C1ED Tmproper argument' C1F5 ',' C1F7 saut dans (BC), exécuter fonction ******* tester sur numéro stream C1FF '#' C201 0 comme défaut C204 aller chercher numéro stream C208 suit virgule ? C20B non, alors fin de l'instruction ****** Streamnummer holen C210 Test sur nachfolgendes Zeichen C213 "#" C214 10, valeur maximum+1 C218 valeur maximum dans B C219 aller chercher valeur 8 bits C21C comparer avec valeur maximum C21F plus petit, ok C220 Tmproper argument' ****** aller chercher valeur 8 bits plus petite que 2 C223 valeur maximum 2 C225 aller chercher argument et tester ****** instruction BASIC PEN C227 aller chercher numéro stream C22A TXT SET PEN C230 aller chercher suit virgule ? C234 valeur 8 bits plus petit 2 C237 TXT SET BACK ****** instruction BASIC PAPER C23C aller chercher numéro stream C23F TXT SET PAPER C242 aller chercher argument < 16 C246 saut dans (BC), exécuter fonction ****** instruction BASIC BORDER C24B aller chercher 2 arguments plus petits que 32 C24F SCR SET BORDER ****** instruction BASIC INK C254 aller chercher argument plus petit que 16 C258 tester si ',' C25B aller chercher 2 arguments plus petits que 32 C260 SCR SET INK ****** aller chercher 2 arguments plus petits que 32 C265 aller chercher argument < 32 C268 dans B C269 suit virgule ? C26D 32 C26F aller chercher argument plus petit que 32 C272 dans C ****** aller chercher argument < 16 C274 16 C276 aller chercher argument plus petit que 16 ****** instruction BASIC MODE C278 3 C27A aller chercher argument plus petit que 3 C27E SCR SET MODE ****** instruction BASIC CLS C283 aller chercher numéro stream C287 TXT CLEAR WINDOW C28C aller chercher numéro stream C291 Tmproper argument' C294 tester si ')' ****** fonction BASIC COPYCHRS C29B aller chercher numéro stream, parenthèse fermée C29E TXT RD CHAR C2A1 accepter caractère comme chaîne ****** fonction BASIC VPOS C2A4 aller chercher numéro stream C2A8 aller chercher ligne curseur ****** fonction BASIC POS C2AD aller chercher numéro stream C2B0 tester si ')' C2B4 aller chercher position C2B7 accepter contenu accu comme nombre entier ****** aller chercher position PRINT actuelle ****** aller chercher ligne curseur C2CA TXT GET CURSOR C2CD TXT VALIDATE C2DA TXT GET WINDOW ****** instruction BASIC LOCATE C302 aller chercher numéro stream C305 aller chercher deux valeurs 8 bits différentes de zéro C30C TXT SET CURSOR ****** instruction BASIC WINDOW C311 'SWAP' C315 aller chercher numéro stream C318 aller chercher deux valeurs 8 bits différentes de zéro C31C tester si ',' C31F aller chercher deux valeurs 8 bits différentes de zéro C326 TXT WIN ENABLE ****** WINDOW SWAP C32B ignorer les espaces C32E aller chercher argument < 8 C332 suit virgule ? C335 défaut zéro C337 oui, aller chercher argument < 8 C33C TXT SWAP STREAMS ****** aller chercher argument < 8 C341 8, valeur maximum C343 aller chercher argument ****** instruction BASIC TAG C346 aller chercher numéro stream ****** instruction BASIC TAGOFF C34D aller chercher numéro stream C351 TXT SET GRAPHIC ****** aller chercher deux valeurs 8 bits différentes de zéro C354 aller chercher première valeur C357 dans D C358 tester si ',' C35C aller chercher valeur 8 bits différente de zéro C360 valeur dans E ****** instruction BASIC CURSOR C363 aller chercher numéro stream C366 zéro ? C368 aller chercher valeur 8 bits < 2 C36C TXT CUR OFF C36F TXT CUR ON C372 suit virgule ? C375 non C376 aller chercher valeur 8 bits < 2 C37A TXT CUR DISABLE C37D TXT CUR ENABLE ****** sortir chaîne C380 adresse chaîne C381 132 C384 WIDTHsur 132 C387 fixer POS sur un C390 aller chercher caractère C391 incrémenter pointeur C392 dernier caractère ? C393 non, sortir C396 prochain caractère ****** sortir LF C39C LF C39E sortir ****** sortir caractère C3A5 sortir caractère C3AB LF C3AD non C3AF périphérique de sortie C3B2 imprimante ? C3B5 disque ? C3B8 sortir caractère ****** sortir caractère C3BE sortir caractère ****** canal de sortie sélectionné C3C4 canal de sortie C3C9 sortir sur imprimante C3 CC sur disque C3D0 sur écran C3D4 TXT SET GRAPHIC C3D9 TXT SET BACK C3DD TXT VDU ENABLE C3E0 TXT VALIDATE C3E5 CR C3EA LF C3EC TXT OUTPUT C3F1 TXT VALIDATE ****** sortir CR & LF sur imprimante C3F8 CR C3FD LF C40B MC PRINT CHAR C40F tester si interruption avec 'ESC C415 CR C41A ' ' C434 CR C439 LF C449 DISK OUT CHAR C44C pas d'erreur ? C44D sortir message d'erreur C44F fixer DERR C453 CAS TEST EOF C45A accepter signe comme nombre entier C45F CAS IN CHAR C462 pas d'erreur ? C468 sortir message d'erreur C46B 'erreur disquette' ****** fixer POS sur un C472 KM READ CHAR ****** tester si interruption avec 'ESC C475 KM READ CHAR C479 'Break' C47C attendre deuxième frappe de touche C47F 'ESC, alors interruption C485 adresse de la routine Break Event C488 BASIC-ROM-Select C48E KM ARM BREAK ****** Break-Event-Routine C495 KM READ CHAR C498 aucune touche appuyée ? C49A Break par 'ESC C49C ignorer touches frappées avant 'ESC C49E attendre deuxième 'ESC ****** attendre touche frappée après 'ESC ****** attendre touche frappée après 'ESC C4A7 SOUND HOLD C4AF TXT CUR ON C4B2 KM WAIT CHAR C4B5 'ESC C4BB TXT CUR OFF C4C3 C4C5 KM CHAR RETURN C4CA SOUND CONTINUE C4DC KM DISARM BREAK ****** instruction BASIC ORIGIN C4E1 aller chercher 2 arguments C4E6 suit virgule ? C4E9 non C4EB aller chercher 2 arguments C4F0 tester si ',' C4F3 aller chercher 2 arguments C4F8 GRA WIN HEIGHT C4FE GRA WIN WIDTH C504 GRA SET ORIGIN C509 fin de l'instruction ? C510 GRA CLEAR WIN DOW ******* instruction BASIC FILL C515 aller chercher argument < 16 C51A Garbage Collection C51D calculer place mémoire libre C520 au moins 29 octets C523 comparaison HL <> BC C526 sinon 'Memory full' C528 sortir message d'erreur C52D FILL ****** instruction BASIC MOVE C532 GRA MOVE ABSOLUTE ****** instruction BASIC MOVER C537 GRA MOVE RELATIVE ****** instruction BASIC DRAW C53C GRA LINE ABSOLUTE ****** instruction BASIC DRAWR C541 GRA LINE RELATIVE ****** instruction BASIC PLOT C546 GRA PLOT ABSOLUTE ****** instruction BASIC PLOTR C54B GRA PLOT ABSOLUTE C54F aller chercher 2 arguments entiers C552 suit virgule ? C555 non C557 V C55C suit virgule ? C55F non C563 aller chercher valeur 8 bits < 4 C567 SCR ACCESS C56F saut dans (BC) ****** fonction BASIC TEST C574 GRA TEST ABSOLUTE ****** fonction BASIC TESTR C579 GRA TEST RELATIVE C57D aller chercher 2 arguments C580 tester si ')' C587 saut dans (BC) C58A accepter contenu accu comme nombre entier ****** aller chercher 2 arguments entiers C58F aller chercher valeur 16 bits -32768 à 32767 C593 tester si ',' C596 aller chercher valeur 16 bits -32768 à 32767 C59A résultat dans BC ****** instruction BASIC GRAPHICS C59D 'PAPER' C5A1 tester si encore un caractère C5A4 'PEN' C5A5 V C5AA suit virgule ? C5AE aller chercher valeur 8 bits < 2 ****** GRAPHICS PAPER C5B4 ignorer les espaces C5B7 aller chercher argument < 16 C5BA GRA SET PAPER ****** GRAPHICS PEN C5BD aller chercher argument < 16 C5C0 GRA SET PEN ****** instruction BASIC MASK C5C3 ',' C5C7 aller chercher argument 8 bits C5CD suit virgule ? C5D1 aller chercher valeur 8 bits < 2 ****** instruction BASIC FOR C5D7 lire variable C5DD chercher NEXT correspondant C5E0 ranger adresse C5E6 chercher boucle FOR-NEXT ouverte C5E9 trouvé, fixer pointeur de pile BASIC C5ED fin de l'instruction ? C5F0 défaut zéro C5F3 non, aller chercher variable C5FC comparaison HLoDE C5FF 'Unexpected NEXT' C603 adresse de ligne actuelle dans HL C607 fixer adresse de ligne actuelle C610 22 octets, type 5 'Real' C616 16 octets, type 2 Integer' C61A 'type mismatch' C61C sortir message d'erreur C61F nombre octets dans A C620 reserver place dans pile BASIC C624 adresse de variable sur pile BASIC C628 tester si '=' C62B aller chercher expression C62F comparer type de variable C633 mémoire provisoire pour variable FOR C636 copier variable dans HL C63A tester si encore un caractère C63D TO' C63E aller chercher expression C643 comparer type de variable C646 valeur finale sur pile BASIC C64C un comme valeur STEP défaut C64F accepter nombre entier HL C653 prochain caractère C654 'STEP ? C656 non C658 ignorer les espaces C65B aller chercher expression C65F comparer type de variable C663 copier variable dans (HL) C666 aller chercher signe C66A signe de valeur STEP sur pile BASIC C66E fin de l'instruction, sinon 'Syntax error' C673 adresse de l'instruction FOR sur pile BASIC C677 adresse de ligne actuelle dans HL C67C adresse de ligne de FOR sur pile BASIC C681 adresse de l'instruction NEXT sur pile BASIC C689 adresse de ligne instruction NEXT sur pile BASIC C68C #10 ou #16 pour Integer/Real sur pile C68E pointeur sur mémoire provisoire C691 ramener variable FOR C695 flag pour premier parcours C699 fixer adresse de ligne actuelle C69F à l'instruction NEXT C6A1 sortir message d'erreur C6A4 'Unexpected NEXT' ******* instruction BASIC NEXT C6A5 additionner C6A7 flag pour incrément C6AB chercher boucle FOR-NEXT ouverte C6B1 fixer pointeur de pile BASIC C6B6 tester si fin de boucle C6BE pointeur de programme dans DE C6C2 adresse de ligne dans HL C6C5 fixer adresse de ligne actuelle C6CA pointeur de pile BASIC C6CD plus 5 C6CF pointeur de programme dans 'NEXT' C6D2 fixer pointeur de pile BASIC C6D6 suit virgule ? C6D9 oui, prochaine boucle NEXT ****** chercher boucle FOR-NEXT ouverte C6DC pointeur de pile BASIC C6EB 'WHILE-WEND' ? C6F8 comparaison HL <> DE C70A Integer ? C70C oui C713 fixer type et adresse de variable C717 flag pour premier parcours C71B oui, sauter addition C71F addition C729 copier variable dans (HL) C730 comparaison arithmétique C734 10 C73E premier parcours ? C742 oui, sauter addition C749 aller chercher valeur STEP dans HL C74C Integer-Addition HL := HL + DE C74F 'Overflow' C751 sortir message d'erreur C761 comparaison entiers ****** instruction BASIC IF C76A aller chercher expression C76D 'GOTO' C771 tester si encore un caractère C774 THEN' C778 chercher fin de la ligne ou branche ELSE C77C fin de l'instruction ? C77F oui C780 numéro de ligne C782 oui, à l'instruction GOTO C784 adresse de ligne ? C786 non, exécuter instruction BASIC ****** instruction BASIC GOTO C789 aller chercher adresse de ligne C78D accepter adresse comme pointeur de programme ****** instruction BASIC GOSUB C78F aller chercher adresse de ligne C794 marque pour GOSUB normal C796 ranger adresse du sous-programme C797 6 octets C799 reserver place dans pile BASIC C79F adresse de l'instruction dans 'GOSUB' C7A0 sur pile BASIC C7A3 adresse de ligne actuelle dans HL C7A8 adresse de ligne sur pile BASIC C7AB marque pour 'GOSUB' C7B1 pointeur de programme sur sous-programme ******* instruction BASIC RETURN C7B4 chercher 'GOSUB' sur pile BASIC C7B7 restaurer pointeur de pile BASIC C7BA octet type C7BD adresse de l'instruction dans 'GOSUB' C7BE aller chercher dans DE C7C1 adresse de ligne dans HL C7C4 fixer actuel numéro de ligne C7C8 octet type C7C9 plus petit que un ? C7CB oui, GOSUB normal C7CC un, alors GOSUB dans AFTER/EVERY C7CF à la routine event C7D6 aller chercher marque de pile BASIC C7DB restaurer pointeur de pile BASIC C7E0 'GOSUB' C7E6 sortir message d'erreur C7E9 'Unexpected RETURN' ****** instruction BASIC WHILE C7EB chercher WEND correspondant C7EE ranger adresse C7F0 adresse de ligne pour 'WHILE-WEND' C7F6 fixer pointeur de pile BASIC C7F9 7 octets C7FB reserver place dans pile BASIC C7FF adresse de ligne actuelle dans HL C804 adresse de ligne sur pile BASIC C809 adresse dans 'WEND' sur pile BASIC C810 adresse de la condition WHILE C811 sur pile BASIC C813 marque pour 'WHILE' C816 fixer pointeur de pile BASIC C81B tester condition WHILE ****** instruction BASIC WEND C81D C822 'Unexpected WEND' C824 sortir message d'erreur C82C fixer pointeur de pile BASIC C82F adresse de ligne actuelle dans HL C832 adresse de ligne pour-WHILE-WEND C83B fixer adresse de ligne actuelle C848 aller chercher expression C84B aller chercher signe C84F condition remplie ? C850 adresse de ligne pour WHILE-WEND C853 fixer comme adresse de ligne actuelle C858 libérer place dans pile BASIC ******* C860 pointeur de pile BASIC C87B comparaison HL <> DE ******* instruction BASIC ON C885 'ERROR' C88A aller chercher valeur 8 bits C88F 'GOTO' C894 tester si encore un caractère C897 'GOSUB' C899 ignorer les espaces suivants C89C décrémenter compteur C89F aller chercher numéro de ligne dans DE C8A2 suit virgule ? ****** traitement event (AFTER/EVERY) C8B5 C8B9 KL NEXT SYNC C8BC aucun événement en attente ? C8BE ranger priorité C8C2 annuler bit 7 C8C8 adresse du bloc event C8C9 KL DO SYNC C8D4 KL DONE SYNC C8D9 prochain Event C8E0 autoriser interruption par 'ESC C8ED 'Break' C8F2 à la boucle de l'interpréteur C8FC adresse ON-BREAK C901 numéro de ligne dans HL C906 mode direct ? C909 SOUND CONTINUE C915 tester si encore un caractère C918 'GOSUB' C919 aller chercher adresse de ligne C91D dans BC C920 10 ****** Event-Routine C929 C92D aller chercher numéro de ligne/mode direct ? C932 oui C934 octet type pour AFTER/EVERY-GOSUB C937 instruction GOSUB C93A adresse de l'instruction actuelle C949 adresse de l'instruction actuelle C95A -8 C95E KL DONE SYNC C968 -4 C96C KL DONE SYNC C96F autoriser interruption par 'Break' C976 à la boucle de l'interpréteur ****** instruction BASIC ON BREAK C979 C97C ignorer les espaces C97F 'CONT' C984 'STOP' C986 valeur défaut zéro pour Stop C98B tester si encore un caractère C98E 'GOSUB' C98F aller chercher adresse de ligne C993 adresse ON-BREAK C997 KM DISARM BREAK ******* instruction BASIC DI C99A C99B KL EVENT DISABLE ******* instruction BASIC El C9A0 C9A1 KL EVENT ENABLE ****** reset SOUND et event C9A6 SOUND RESET C9A9 adresse de base du bloc event C9AC 4 Timer C9AF KL DEL TICKER C9B3 18 C9B6 additionner C9B7 prochain timer C9B9 KM DISARM BREAK C9BC KL SYNC RESET C9C2 annuler adresse ON-BREAK C9C5 autoriser interruption par BREAK C9C8 adresse de la Sound-Queue C9D4 adresse du bloc event C9DF BASIC-ROM-Select C9E1 ADresse de la Event-Routine C9E4 KL INIT EVENT ****** instruction BASIC ON SQ C9F8 tester si '(' C9FB aller chercher valeur 8 bits C9FF calculer adresse de la Sound-Queue CA05 tester si ')' CA08 aller chercher 'GOSUB' et adresse CAOE SOUND ARM EVENT ****** calculer adresse de la Sound-Queue CA13 bit 0 mis ? CA18 bit 1 mis ? CA1D bit 2 mis ? CA22 'Improper argument' ****** instruction BASIC AFTER CA25 aller chercher valeur 16 bits 0 - 32767 CA28 Recharge Count sur zéro ****** instruction BASIC EVERY CA2D aller chercher valeur 16 bits 0 - 32767 CA30 comme Count et CA31 Recharge Count CA34 suit virgule ? CA37 valeur défaut zéro CA3A oui, aller chercher valeur entière avec signe CA3E aller chercher dans Timer# adresse du bloc event CA42 additionner 6 octets pour Tickerblock CA47 aller chercher 'GOSUB' et adresse CA4E KL ADD TICKER ****** fonction BASIC REMAIN CA53 CINT CA56 aller chercher adresse du bloc event CA59 KL DEL TICKER CA5C trouvé ? CA5E non, zéro CA62 accepter nombre entier dans HL ****** calculer adresse du bloc event CA65 CA66 octet fort égale zéro ? CA67 non, 'Improper argument' CA6A supérieur ou égal 4 ? CA6C oui, 'Improper argument' CA70 * 18 CA74 adresse de base table event CA77 plus Offset ****** chercher NEXT correspondant CA79 CA7A adresse de ligne actuelle dans HL CA7F compteur pour imbrication CA81 numéro d'erreur pour 'NEXT missing' CA87 ignorer les espaces CA8A 'NEXT' CA8F 'FOR' CA93 incrémenter imbrication CA94 chercher encore CA99 adresse de ligne actuelle dans HL CA9D fixer adresse de ligne actuelle CAA1 décrémenter imbrication CAA2 NEXT correspondant trouvé ? CAA4 ignorer les espaces CAA7 fin de ligne ? CAAB chercher variable CABO suit virgule ? CAB3 non CAB5 sinon prochaine variable dans NEXT CAB8 trouvé NEXT correspondant CABA oui CABD adresse de ligne actuelle dans HL CAO fixer adresse de ligne actuelle CAC6 chercher encore CAC9 ignorer les espaces ****** chercher WEND correspondant CACC CACE adresse de ligne actuelle dans HL CAD2 compteur pour imbrication CAD4 incrémenter CAD5 numéro d'erreur pour 'WEND missing' CADB ignorer les espaces CADF 'WHILE' CAE1 incrémenter imbrication CAE3 'WEND' CAE7 décrémenter imbrication CAE9 ignorer les espaces CAEC ignorer les espaces CAEF aller chercher ligne d'entrée CAF3 sélectionné stream 0 CAF6 initialiser pointeur de pile CAF9 à la boucle de l'interpréteur ****** aller chercher ligne d'entrée CAFC pointeur sur buffer d'entrée CAFF annuler contenu buffer CB01 aller chercher ligne d'entrée ****** éditer ligne CB04 pointeur sur buffer d'entrée CB07 éditer ligne CB0A sortir LF ****** aller chercher ligne d'entrée sur la disquette CB0D CB0E pointeur sur buffer d'entrée CB18 DISK IN CHAR CB1D CR CB25 LF CB2D sortir message d'erreur CB30 'Une too long' CB32 LF ****** annuler numéro d'erreur CB3A ****** fixer numéro d'erreur CB3B erreur disquette CB3E numéro d'erreur CB41 adresse de ligne actuelle dans HL CB44 comme ERROR-Line ****** sortir message d'erreur CB48 adresse de retour dans HL CB49 aller chercher caractère dans instruction CALL CB4A comme numéro d'erreur, sortir message ****** sortir 'Syntax error' CB4C numéro d'erreur pour 'Syntax error' CB4E sortir message d'erreur ****** sortir 'Improper argument' CB50 numéro d'erreur pour 'Improper argument' CB52 sortir message d'erreur ****** instruction BASIC ERROR CB54 aller chercher valeur 8 bits différ. de 0 CB58 fixer numéro et ligne d'erreur CB5B adresse de l'instruction actuelle CB5E pointeur de programme dans ERROR CB61 ranger adresse de ligne et pointeur de programme CB67 pointeur de pile sur C000 CB70 initialiser descripteur de pile CB79 adresse de la routine ON-ERROR CB7D flag pour en traitement d'erreur CB8B à la boucle de l'interpréteur CB90 numéro d'erreur CB93 calculer adresse des messages d'erreur CB99 comme actuel numéro de ligne CBA3 erreur disquette CBAA au mode READY CBAD adresse de la ligne ERROR CBBO aller chercher numéro de ligne dans HL CBBA pointeur sur 'Division by zéro' CBBD numéro d'erreur CBC3 pointeur sur 'Overflow' CBC6 numéro d'erreur CBCA adresse de la routine ON-ERROR CBDO numéro d'erreur dans accu CBD1 sortir message d'erreur CBD4 numéro stream sur zéro CBD5 stream sélectionné CBD8 ranger ancien numéro stream CBDA sortir message d'erreur CBDE sortir LF CBE1 ancien numéro stream CBE2 sélectionné CBE9 initialiser écran CBEC sortir 'Undefind Une' CBEF sortir numéro de ligne CBF2 sortir 'in numéro de ligne' CBF4 'Undefined Une ',0 CC04 pointeur sur 'Break' CCOA initialiser écran CCOD sortir message d'erreur CC10 aller chercher adresse de ligne CC13 mode direct ? CC15 pointeur sur ' in ' CC18 sortir chaîne CC1C sortir numéro de ligne CC1F 'Break' CC24 ' in ',0 ****** instruction BASIC STOP CC29 CC2B sortir 'Break in numéro de ligne' CC32 au mode READY ****** instruction BASIC END CC34 ****** erreur disquette CC3A ranger erreur disque CC3D sortir message d'erreur CC40 'Nr 32' CC4A au mode READY CC66 au mode READY CC6A aller chercher numéro de ligne dans HL CC6E mode direct ? CC70 fin de l'instruction ? CC7B fixer adresse de ligne actuelle CC87 mode direct ? CC8A oui CC8B adresse de ligne dans HL CC8E adresse de ligne après interruption CC92 pointeur de programme après interruption ****** instruction BASIC CONT CC96 CC97 pointeur de programme après interruption CC9B tester si mode direct CC9C 'Cannot CONTinue' CC9E sortir message d'erreur CCA2 adresse de ligne après interruption CCA5 fixer adresse de ligne actuelle CCA8 SOUND CONTINUE CCAC à la boucle de l'interpréteur CCBO annuler flag pour en traitement d'erreur CCB6 adresse de la routine ON-ERROR ****** ON ERROR CCBB ignorer les espaces CCBE tester si encore un caractère CCC1 'GOTO' CCC2 aller chercher numéro de ligne dans DE CCC6 chercher ligne BASIC DE CCCB fixer adresse de la routine ON-ERROR ****** instruction BASIC ON ERROR GOTO 0 CCCD adresse ON-ERROR sur zéro CCD0 en traitement d'erreur ? CCD4 non CCD5 sortie d'erreur ****** instruction BASIC RESUME CCD8 CCDA 'NEXT' CCDE aller chercher adresse de ligne CCE2 en traitement d'erreur ? CCE8 à la boucle de l'interpréteur CCEB en traitement d'erreur ? CCEF à la boucle de l'interpréteur CCF2 ignorer les espaces CCF6 en traitement d'erreur CCFA ignorer reste de la ligne CCFD en traitement d'erreur ? CD01 'Unexpected RESUME' CD03 non, sortir message d'erreur CD07 annuler numéro ERROR CDOA annuler flag pour en traitement d'erreur CDOD adresse de la ligne ERROR CD 10 comme adresse de ligne actuelle CD 13 pointeur de programme après ERROR ****** messages d'erreur ****** sortir message d'erreur CE76 adresse de base des messages d'erreur CE79 fixer pointeur sur message d'erreur CE7D aller chercher caractère des messages d'erreur CE7E annuler bit 7 CE80 caractère imprimable ? CE82 oui, sortir CE85 non, fixer message d'erreur CE89 aller chercher caractère encore une fois CE8A incrémenter pointeur CE8B tester bit 7 CE8C pas mis, sortir encore ****** fixer pointeur DE sur message d'erreur CE8F CE95 numéro zéro ? CE96 terminé CE98 numéro d'erreur dans B CE99 aller chercher caractère CE9A incrémenter pointeur CE9B tester bit 7 CE9C pas mis, ignorer message CE9E prochain message d'erreur CEA0 DE pointe maintenant sur début du message ****** aller chercher valeur 8 bits CEBB aller chercher valeur entière avec signe CEBF octet fort CEC1 différ. de zéro, 'Improper argument' CEC4 accepter octet faible ******* aller chercher valeur 8 bits différente de zéro CEC6 aller chercher valeur entière avec signe CECC différ. de zéro ? CECE 'Improper argument' ******* aller chercher valeur 16 bits 0 à 32767 CED1 aller chercher valeur entière avec signe CED5 octet fort CED6 tester bit 15 CED7 mis, 'Improper argument' ******* aller chercher valeur entière avec signe CEDB aller chercher expression CEEO CINT CEE6 aller chercher expression CEE9 tester si chaîne CEEC non ****** aller chercher valeur 16 bits, expression d'adresse CEF8 aller chercher expression CEFE UNT ****** aller chercher expression chaîne et paramètre CF06 aller chercher expression CF09 aller chercher param. de chaîne ****** aller chercher expression chaîne CF0C aller chercher expression CF0F type chaîne, sinon 'Type mismatch' ****** aller chercher numéro de zone de ligne CF12 1 et CF15 65535 comme défaut CF18 suit virgule ? CF1B non, fin de l'instruction ? CF1E oui CF1F '#' CF22 '-' CF26 aller chercher numéro de ligne dans DE CF2A et dans BC CF2C suit virgule ? CF2F oui CF30 tester si encore un caractère CF33 '-' CF34 65535 comme valeur finale défaut CF38 suit virgule ? CF3B oui CF3C aller chercher numéro de ligne dans DE CF3F suit virgule ? CF46 'Improper argument' ******* aller chercher numéro de ligne dans DE CF4B type de constante CF4E valeur dans DE CF50 numéro de ligne ? CF52 oui, terminé CF54 adresse de ligne ? CF56 non, 'Syntax error' CF5A HL pointe sur début de ligne CF5F numéro de ligne dans DE CF62 ignorer les espaces ****** aller chercher expression CF65 CF66 code de hiérarchie zéro CF68 aller chercher terme CF6D ignorer les espaces ****** aller chercher terme CF70 CF72 aller chercher expression CF78 opérateur CF79 V CF7B plus petit ? CF7C 'NOT' CF7E supérieur ou égal ? CF7F '+' CF81 plus petit, alors opérateur de comparaison CF83 '+', alors tester si chaîne CF86 pas chaîne CF8A descripteur de chaîne CF8D sur pile CF8E aller chercher expression CF91 type chaîne, sinon 'Type mismatch' CF95 addition de chaîne CF98 traiter prochain terme ****** opérateurs arithmétiques CF9A CF9B moins #F4 CF9E fois 4 CFA2 plus #CFF0, adresse table CFA9 code de hiérarchie CFAB plus petit, terminé CFAD placer résultat sur pile CFB3 code de hiérarchie CFB4 aller chercher terme CFC0 reserver place dans pile BASIC CFC3 JP (DE), exécuter opération CFC6 traiter prochain terme ****** opérateurs de comparaison CFC8 CFCD Token CFCE moins Offset CFD1 tester si chaîne CFD4 adresse pour comparaisons arithmétiques CFD7 pas chaîne CFDA descripteur de chaîne CFDD sur pile CFDF code de hiérarchie CFE1 aller chercher terme CFE7 comparaison de chaîne CFEB aller chercher résultat des comparaisons CFEE traiter prochain terme CPCrulez[Content Management System] v8.73-desktop/c Page créée en 463 millisecondes et consultée 1352 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. |
|