చాప్టర్ 5: అసెంబ్లీ భాషలో కమోడోర్-64 ఆపరేటింగ్ సిస్టమ్

Captar 5 Asembli Bhasalo Kamodor 64 Apareting Sistam



5.1 పరిచయం

Commodore-64 కంప్యూటర్ కోసం ఆపరేటింగ్ సిస్టమ్ కంప్యూటర్‌తో పాటు రీడ్ ఓన్లీ మెమరీ (ROM)తో వస్తుంది. కమోడోర్-64 కోసం మెమరీ బైట్ స్థానాల సంఖ్య $0000 నుండి $FFFF వరకు ఉంటుంది (అనగా 000016 నుండి FFFF16 010 నుండి 65,53510 వరకు ఉంటుంది). ఆపరేటింగ్ సిస్టమ్ $E000 నుండి $FFFF వరకు ఉంది (అంటే 57,34410 నుండి 65,53610).

కమోడోర్-64 ఆపరేటింగ్ సిస్టమ్‌ను ఎందుకు అధ్యయనం చేయాలి
కమోడోర్-64 ఆపరేటింగ్ సిస్టమ్ 1982లో విడుదలైన కంప్యూటర్ యొక్క ఆపరేటింగ్ సిస్టమ్ అయినప్పుడు దానిని ఎందుకు అధ్యయనం చేయాలి? బాగా, Commodore-64 కంప్యూటర్ సెంట్రల్ ప్రాసెసింగ్ యూనిట్ 6510ని ఉపయోగిస్తుంది, ఇది 6502 µP యొక్క అప్‌గ్రేడ్ (పెద్ద అప్‌గ్రేడ్ కానప్పటికీ).







6502 µP ఇప్పటికీ పెద్ద సంఖ్యలో ఉత్పత్తి చేయబడుతోంది; ఇది ఇకపై ఇల్లు లేదా కార్యాలయ కంప్యూటర్‌ల కోసం కాదు, ఎలక్ట్రికల్ మరియు ఎలక్ట్రానిక్ ఉపకరణాల (పరికరాలు) కోసం. 6502 µP దాని రోజుల్లోని ఇతర మైక్రోప్రాసెసర్‌లతో పోలిస్తే అర్థం చేసుకోవడం మరియు ఆపరేట్ చేయడం కూడా సులభం. వీటి ఫలితంగా, అసెంబ్లీ భాషను బోధించడానికి ఉపయోగించే ఉత్తమమైన (అత్యుత్తమమైనది కాకపోతే) మైక్రోప్రాసెసర్‌లో ఇది ఒకటి.



6502 మైక్రోప్రాసెసర్ తరగతికి చెందిన 65C02 µP, 66 అసెంబ్లీ భాషా సూచనలను కలిగి ఉంది, ఇవన్నీ కూడా హృదయపూర్వకంగా నేర్చుకోవచ్చు. ఆధునిక మైక్రోప్రాసెసర్‌లు అనేక అసెంబ్లీ భాషా సూచనలను కలిగి ఉంటాయి మరియు హృదయపూర్వకంగా నేర్చుకోలేవు. ప్రతి µP దాని స్వంత అసెంబ్లీ భాషను కలిగి ఉంటుంది. ఏదైనా ఆపరేటింగ్ సిస్టమ్, అది కొత్తది లేదా పాతది కావచ్చు, అది అసెంబ్లీ భాష. దానితో, ప్రారంభకులకు ఆపరేటింగ్ సిస్టమ్‌ను నేర్పడానికి 6502 అసెంబ్లీ భాష ఉపయోగించడం మంచిది. కమోడోర్-64 వంటి ఆపరేటింగ్ సిస్టమ్‌ను నేర్చుకున్న తర్వాత, ఆధునిక ఆపరేటింగ్ సిస్టమ్‌ను ఆధారంగా ఉపయోగించి సులభంగా నేర్చుకోవచ్చు.



ఇది కేవలం రచయిత (నేనే) అభిప్రాయం మాత్రమే కాదు. ఇది ప్రపంచంలో పెరుగుతున్న ట్రెండ్. ఆధునిక ఆపరేటింగ్ సిస్టమ్‌గా కనిపించేలా మెరుగైన కమోడోర్-64 ఆపరేటింగ్ సిస్టమ్ కోసం ఇంటర్నెట్‌లో మరిన్ని కథనాలు వ్రాయబడుతున్నాయి. ఆధునిక ఆపరేటింగ్ సిస్టమ్‌లు తదుపరి అధ్యాయంలో వివరించబడ్డాయి.





గమనిక : Commodore-64 OS (Kernal) ఇప్పటికీ ఆధునిక ఇన్‌పుట్ మరియు అవుట్‌పుట్ పరికరాలతో బాగా పనిచేస్తుంది (అన్నీ కాదు).

ఎనిమిది-బిట్ కంప్యూటర్
కమోడోర్ 64 వంటి ఎనిమిది-బిట్ మైక్రోకంప్యూటర్‌లో, సమాచారం ఎనిమిది-బిట్ బైనరీ కోడ్‌ల రూపంలో నిల్వ చేయబడుతుంది, బదిలీ చేయబడుతుంది మరియు మార్చబడుతుంది.



మెమరీ మ్యాప్
మెమరీ మ్యాప్ అనేది మెమరీ యొక్క పూర్తి పరిధిని వివిధ పరిమాణాల చిన్న పరిధులుగా విభజించి, ఏ పరిధికి చెందినదో (సబ్రౌటిన్ మరియు/లేదా వేరియబుల్) చూపే స్కేల్. వేరియబుల్ అనేది విలువను కలిగి ఉన్న నిర్దిష్ట మెమరీ చిరునామాకు అనుగుణంగా ఉండే లేబుల్. సబ్‌ట్రౌటిన్‌ల ప్రారంభాన్ని గుర్తించడానికి లేబుల్‌లు కూడా ఉపయోగించబడతాయి. కానీ ఈ సందర్భంలో, వాటిని సబ్‌రూటీన్‌ల పేర్లు అంటారు. సబ్‌ట్రౌటీన్‌ను కేవలం రొటీన్‌గా సూచించవచ్చు.

మునుపటి అధ్యాయంలో మెమరీ మ్యాప్ (లేఅవుట్) తగినంత వివరంగా లేదు. ఇది చాలా సులభం. కమోడోర్-64 కంప్యూటర్ యొక్క మెమరీ మ్యాప్ మూడు స్థాయిల వివరాలతో చూపబడుతుంది. ఇంటర్మీడియట్ స్థాయిలో చూపినప్పుడు, కమోడోర్-64 కంప్యూటర్ విభిన్న మెమరీ మ్యాప్‌లను కలిగి ఉంటుంది. ఇంటర్మీడియట్ స్థాయిలో కమోడోర్-64 కంప్యూటర్ యొక్క డిఫాల్ట్ మెమరీ మ్యాప్:


అత్తి 5.11 కమోడోర్-64 మెమరీ మ్యాప్

ఆ రోజుల్లో బేసిక్ అనే ప్రసిద్ధ కంప్యూటర్ భాష ఉండేది. చాలా మంది కంప్యూటర్ వినియోగదారులు డిస్కెట్ (డిస్క్) నుండి మెమరీకి ప్రోగ్రామ్‌ను లోడ్ చేయడం, మెమరీలో ప్రోగ్రామ్‌ను అమలు చేయడం (ఎగ్జిక్యూట్ చేయడం) మరియు ప్రోగ్రామ్‌ను నిష్క్రమించడం (క్లోజ్ చేయడం) వంటి కొన్ని కనీస బేసిక్ భాషా ఆదేశాలను తెలుసుకోవాలి. BASIC ప్రోగ్రామ్ రన్ అవుతున్నప్పుడు, వినియోగదారు డేటాను లైన్-బై-లైన్‌లో ఫీడ్ చేయాలి. ఒక అప్లికేషన్ (అనేక ప్రోగ్రామ్‌లు అప్లికేషన్‌ను ఏర్పరుస్తాయి) విండోస్‌తో ఉన్నత-స్థాయి భాషలో వ్రాయబడినప్పుడు ఇది ఈనాటిది కాదు మరియు వినియోగదారు విండోలోని ప్రత్యేక ప్రదేశాలలో వేర్వేరు డేటాలో సరిపోయేలా ఉంటుంది. కొన్ని సందర్భాల్లో, ముందుగా ఆర్డర్ చేసిన డేటాను ఎంచుకోవడానికి మేము మౌస్‌ని ఉపయోగించండి. ఆ సమయంలో బేసిక్ ఉన్నత స్థాయి భాష, కానీ అసెంబ్లీ భాషకు చాలా దగ్గరగా ఉంది.

డిఫాల్ట్ మెమరీ మ్యాప్‌లో ఎక్కువ మెమరీని బేసిక్ తీసుకుంటుందని గమనించండి. బేసిక్‌లో కమాండ్‌లు (సూచనలు) ఉన్నాయి, వీటిని బేసిక్ ఇంటర్‌ప్రెటర్ అని పిలుస్తారు. వాస్తవానికి, BASIC ఇంటర్‌ప్రెటర్ ROMలో $A000 స్థానం నుండి $BFFF (కలిసి) వరకు ఉంది, ఇది RAM ప్రాంతంగా చెప్పబడుతుంది. ఇది 8 Kbytes ఆ సమయంలో చాలా పెద్దది! ఇది వాస్తవానికి మొత్తం మెమరీ ఉన్న స్థలంలో ROMలో ఉంది. ఇది $E000 నుండి $FFFF (కలిసి) వరకు ఆపరేటింగ్ సిస్టమ్ వలె అదే పరిమాణాన్ని కలిగి ఉంది. బేసిక్‌లో వ్రాయబడిన ప్రోగ్రామ్‌లు కూడా $0200 నుండి $BFFF పరిధిలో ఉంచబడ్డాయి.

వినియోగదారు అసెంబ్లీ భాషా ప్రోగ్రామ్ కోసం RAM $C000 నుండి $CFFF వరకు ఉంది, 64 Kbytesలో కేవలం 4 Kbytes. కాబట్టి, మనం అసెంబ్లీ భాషను ఎందుకు ఉపయోగిస్తాము లేదా నేర్చుకుంటాము? కొత్త మరియు పాత ఆపరేటింగ్ సిస్టమ్‌లు అసెంబ్లీ భాషలకు చెందినవి. Commodore-64 యొక్క ఆపరేటింగ్ సిస్టమ్ ROMలో $E000 నుండి $FFFF వరకు ఉంది. ఇది 65C02 µP (6510 µP) అసెంబ్లీ భాషలో వ్రాయబడింది. ఇది సబ్‌ట్రౌటిన్‌లను కలిగి ఉంటుంది. అసెంబ్లీ భాషలోని వినియోగదారు ప్రోగ్రామ్ పెరిఫెరల్స్ (ఇన్‌పుట్ మరియు అవుట్‌పుట్ పరికరాలు)తో పరస్పర చర్య చేయడానికి ఈ సబ్‌ట్రౌటిన్‌లను కాల్ చేయాలి. అసెంబ్లీ భాషలో Commodore-64 ఆపరేటింగ్ సిస్టమ్‌ను అర్థం చేసుకోవడం వలన విద్యార్థి ఆపరేటింగ్ సిస్టమ్‌లను చాలా తక్కువ దుర్భరమైన పద్ధతిలో త్వరగా అర్థం చేసుకోగలుగుతారు. మళ్ళీ, ఆ రోజుల్లో, Commodore-64 కోసం అనేక వినియోగదారు ప్రోగ్రామ్‌లు అసెంబ్లీ భాషలో కాకుండా బేసిక్‌లో వ్రాయబడ్డాయి. ఆ రోజుల్లో అసెంబ్లీ భాషలను ప్రోగ్రామర్లు సాంకేతిక ప్రయోజనాల కోసం ఎక్కువగా ఉపయోగించారు.

K-e-r-n-a-l అని స్పెల్లింగ్ చేయబడిన Kernal, Commodore-64 యొక్క ఆపరేటింగ్ సిస్టమ్. ఇది డిస్క్ (లేదా డిస్క్)లో కాకుండా ROMలో Commodore-64 కంప్యూటర్‌తో వస్తుంది. కెర్నల్ సబ్‌ట్రౌటిన్‌లను కలిగి ఉంటుంది. పెరిఫెరల్స్‌ని యాక్సెస్ చేయడానికి, అసెంబ్లీ భాషలో (మెషిన్ లాంగ్వేజ్) యూజర్ ప్రోగ్రామ్ ఈ సబ్‌ట్రౌటిన్‌లను ఉపయోగించాలి. ఆధునిక ఆపరేటింగ్ సిస్టమ్‌లలో K-e-r-n-e-l అని స్పెల్లింగ్ చేయబడిన కెర్నల్‌తో కెర్నల్ అయోమయం చెందకూడదు, అయినప్పటికీ అవి దాదాపు ఒకే విధంగా ఉంటాయి.

4 Kbytes10 మెమరీలో $C000 (49,15210) నుండి $CFFF (6324810) వరకు మెమరీ ప్రాంతం RAM లేదా ROM. ఇది RAM అయినప్పుడు, పెరిఫెరల్స్‌ను యాక్సెస్ చేయడానికి ఇది ఉపయోగించబడుతుంది. ఇది ROM అయినప్పుడు, స్క్రీన్‌పై (మానిటర్) అక్షరాలను ముద్రించడానికి ఇది ఉపయోగించబడుతుంది. దీని అర్థం స్క్రీన్‌పై అక్షరాలు ముద్రించబడుతున్నాయి లేదా మెమరీలోని ఈ భాగాన్ని ఉపయోగించడం ద్వారా పెరిఫెరల్స్ యాక్సెస్ చేయబడుతున్నాయి. సిస్టమ్ యూనిట్ (మదర్‌బోర్డు)లో ROM బ్యాంక్ (క్యారెక్టర్ ROM) ఉంది, దాన్ని సాధించడానికి మొత్తం మెమరీ స్పేస్‌లో స్విచ్ ఇన్ మరియు అవుట్ చేయబడింది. వినియోగదారు మారడాన్ని గమనించకపోవచ్చు.

$0100 నుండి మెమరీ ప్రాంతం (256 10 ) నుండి $01FF (511 10 ) స్టాక్. ఇది ఆపరేటింగ్ సిస్టమ్ మరియు వినియోగదారు ప్రోగ్రామ్‌ల ద్వారా ఉపయోగించబడుతుంది. ఈ ఆన్‌లైన్ కెరీర్ కోర్సు యొక్క మునుపటి అధ్యాయంలో స్టాక్ యొక్క పాత్ర వివరించబడింది. $0000 నుండి మెమరీ ప్రాంతం (0 10 ) నుండి $00FF (255 10 ) ఆపరేటింగ్ సిస్టమ్ ద్వారా ఉపయోగించబడుతుంది. అక్కడ చాలా పాయింటర్లు కేటాయించబడ్డాయి.

కెర్నల్ జంప్ టేబుల్
కెర్నల్‌లో వినియోగదారు ప్రోగ్రామ్ ద్వారా పిలువబడే రొటీన్‌లు ఉన్నాయి. OS యొక్క కొత్త వెర్షన్‌లు రావడంతో, ఈ రొటీన్‌ల చిరునామాలు మారాయి. వినియోగదారు ప్రోగ్రామ్‌లు ఇకపై కొత్త OS సంస్కరణలతో పని చేయలేవని దీని అర్థం. కమోడోర్-64 జంప్ టేబుల్ అందించినందున ఇది జరగలేదు. జంప్ టేబుల్ 39 ఎంట్రీల జాబితా. పట్టికలోని ప్రతి ఎంట్రీకి మూడు చిరునామాలు (చివరి 6 బైట్‌లు మినహా) ఉన్నాయి, అవి ఆపరేటింగ్ సిస్టమ్ యొక్క సంస్కరణ మార్పుతో కూడా మారవు.

ఎంట్రీ యొక్క మొదటి చిరునామాలో JSR సూచన ఉంటుంది. తదుపరి రెండు చిరునామాలు రెండు-బైట్ పాయింటర్‌ను కలిగి ఉంటాయి. ఈ రెండు-బైట్ పాయింటర్ ఇప్పటికీ OS ROMలో ఉన్న వాస్తవ దినచర్య యొక్క చిరునామా (లేదా కొత్త చిరునామా). కొత్త OS సంస్కరణలతో పాయింటర్ కంటెంట్ మారవచ్చు, కానీ ప్రతి జంప్ టేబుల్ ఎంట్రీకి సంబంధించిన మూడు చిరునామాలు ఎప్పటికీ మారవు. ఉదాహరణకు, $FF81, $FF82 మరియు $FF83 చిరునామాలను పరిగణించండి. ఈ మూడు చిరునామాలు మదర్‌బోర్డు యొక్క స్క్రీన్ మరియు కీబోర్డ్ సర్క్యూట్‌లను (రిజిస్టర్‌లు) ప్రారంభించడం కోసం సాధారణమైనవి. $FF81 చిరునామా ఎల్లప్పుడూ JSR యొక్క op కోడ్ (ఒక బైట్)ని కలిగి ఉంటుంది. $FF82 మరియు $FF83 చిరునామాలు ప్రారంభించడం కోసం సబ్‌ట్రౌటిన్ (ఇప్పటికీ OS ROMలో) పాత లేదా కొత్త చిరునామాను కలిగి ఉంటాయి. ఒక సమయంలో, $FF82 మరియు $FF83 చిరునామాలు $FF5B యొక్క కంటెంట్ (చిరునామా)ను కలిగి ఉన్నాయి, ఇది తదుపరి OS సంస్కరణతో మారవచ్చు. అయినప్పటికీ, జంప్ టేబుల్ యొక్క $FF81, $FF82 మరియు $FF83 చిరునామాలు ఎప్పటికీ మారవు.

మూడు చిరునామాల ప్రతి ఎంట్రీకి, JSRతో మొదటి చిరునామాకు లేబుల్ (పేరు) ఉంటుంది. $FF81 లేబుల్ PCINT. PCINT ఎప్పుడూ మారదు. కాబట్టి, స్క్రీన్ మరియు కీబోర్డ్ రిజిస్టర్‌లను ప్రారంభించేందుకు, ప్రోగ్రామర్ కేవలం 'JSR PCINT' అని టైప్ చేయవచ్చు, ఇది Commodore-64 OS యొక్క అన్ని వెర్షన్‌లకు పని చేస్తుంది. వాస్తవ సబ్‌ట్రౌటిన్ యొక్క స్థానం (ప్రారంభ చిరునామా), ఉదా., $FF5B, వివిధ ఆపరేటింగ్ సిస్టమ్‌లతో కాలక్రమేణా మారవచ్చు. అవును, ROM OSని ఉపయోగించే వినియోగదారు ప్రోగ్రామ్‌లో కనీసం రెండు JSR సూచనలు ఉన్నాయి. వినియోగదారు ప్రోగ్రామ్‌లో, జంప్ టేబుల్‌లోని ఎంట్రీకి జంప్ చేసే JSR సూచన ఉంది. జంప్ టేబుల్‌లోని చివరి ఆరు చిరునామాలను మినహాయించి, జంప్ టేబుల్‌లోని ఎంట్రీ యొక్క మొదటి చిరునామా JSR సూచనను కలిగి ఉంటుంది. కెర్నల్‌లో, కొన్ని సబ్‌ట్రౌటీన్‌లు ఇతర సబ్‌ట్రౌటిన్‌లను పిలుస్తాయి.

కెర్నల్ జంప్ పట్టిక $FF81 (కలిసి) నుండి త్రీల సమూహాలలో పైకి వెళుతుంది, చివరి ఆరు బైట్‌లను మినహాయించి, తక్కువ బైట్ చిరునామాలతో మూడు పాయింటర్‌లు: $FFFA, $FFFC మరియు $FFFE. అన్ని ROM OS రొటీన్‌లు పునర్వినియోగ కోడ్‌లు. కాబట్టి, వినియోగదారు వాటిని తిరిగి వ్రాయవలసిన అవసరం లేదు.

కమోడోర్-64 సిస్టమ్ యూనిట్ యొక్క బ్లాక్ రేఖాచిత్రం
కింది రేఖాచిత్రం మునుపటి అధ్యాయంలో ఉన్నదాని కంటే మరింత వివరంగా ఉంది:


Fig. 5.12 Commodore_64 సిస్టమ్ యూనిట్ యొక్క బ్లాక్ రేఖాచిత్రం

ROM మరియు RAM ఇక్కడ ఒక బ్లాక్‌గా చూపబడ్డాయి. మునుపటి అధ్యాయంలో చూపని స్క్రీన్‌పై సమాచారాన్ని నిర్వహించడానికి వీడియో ఇంటర్‌ఫేస్ చిప్ (IC) ఇక్కడ చూపబడింది. మునుపటి అధ్యాయంలో చూపబడిన ఇన్‌పుట్/అవుట్‌పుట్ పరికరాల కోసం ఒకే బ్లాక్ ఇక్కడ రెండు బ్లాక్‌లుగా చూపబడింది: CIA #1 మరియు CIA #2. CIA అంటే కాంప్లెక్స్ ఇంటర్‌ఫేస్ అడాప్టర్. ప్రతి దానిలో పోర్ట్ A మరియు పోర్ట్ B అని పిలువబడే రెండు సమాంతర ఎనిమిది-బిట్ పోర్ట్‌లు (సిస్టమ్ యూనిట్ యొక్క నిలువు ఉపరితలంపై బాహ్య పోర్ట్‌లతో అయోమయం చెందకూడదు) ఉన్నాయి. CIAలు ఈ పరిస్థితిలో ఐదు బాహ్య పరికరాలకు కనెక్ట్ చేయబడ్డాయి. పరికరాలు కీబోర్డ్, జాయ్‌స్టిక్, డిస్క్ డ్రైవ్/ప్రింటర్ మరియు మోడెమ్. ప్రింటర్ డిస్క్ డ్రైవ్ వెనుక భాగంలో కనెక్ట్ చేయబడింది. సౌండ్ ఇంటర్‌ఫేస్ డివైస్ సర్క్యూట్ మరియు చూపబడని ప్రోగ్రామబుల్ లాజిక్ అర్రే సర్క్యూట్ కూడా ఉన్నాయి.

ఇప్పటికీ, ఒక అక్షరం స్క్రీన్‌పైకి పంపబడినప్పుడు మరియు అది బ్లాక్ రేఖాచిత్రంలో చూపబడనప్పుడు రెండు CIAలతోనూ మార్చుకోగలిగే క్యారెక్టర్ ROM ఉంది.

క్యారెక్టర్ ROM లేనప్పుడు ఇన్‌పుట్/అవుట్‌పుట్ సర్క్యూట్‌ల కోసం $D000 నుండి $DFFF వరకు ఉన్న RAM చిరునామాలు క్రింది వివరాల మెమరీ మ్యాప్‌ను కలిగి ఉంటాయి:

పట్టిక 5.11
$D000 నుండి $DFFF వరకు వివరణాత్మక మెమరీ మ్యాప్
ఉప చిరునామా పరిధి సర్క్యూట్ పరిమాణం (బైట్లు)
D000 - D3FF VIC (వీడియో ఇంటర్‌ఫేస్ కంట్రోలర్ (చిప్)) 1K
D400 - D7FF SID (సౌండ్ సర్క్యూట్) 1K
D800 - DBFF రంగు RAM 1K నిబుల్స్
DC00 - DCFF CIA #1 (కీబోర్డ్, జాయ్‌స్టిక్) 256
DD00 - DDFF CIA #2 (సీరియల్ బస్, యూజర్ పోర్ట్/RS-232) 256
DE00 - DEF I/O స్లాట్ #1ని తెరవండి 256
DF00 - DFFF I/O స్లాట్ #2ని తెరవండి 256

5.2 రెండు కాంప్లెక్స్ ఇంటర్‌ఫేస్ ఎడాప్టర్‌లు

కమోడోర్-64 సిస్టమ్ యూనిట్‌లో రెండు ప్రత్యేక ఇంటిగ్రేటెడ్ సర్క్యూట్‌లు (ICలు) ఉన్నాయి మరియు వాటిలో ప్రతి ఒక్కటి కాంప్లెక్స్ ఇంటర్‌ఫేస్ అడాప్టర్ అంటారు. మైక్రోప్రాసెసర్‌కి కీబోర్డ్ మరియు ఇతర పెరిఫెరల్స్ ఇంటర్‌ఫేస్ చేయడానికి ఈ రెండు చిప్‌లు ఉపయోగించబడతాయి. VIC మరియు స్క్రీన్ మినహా, మైక్రోప్రాసెసర్ మరియు పెరిఫెరల్స్ మధ్య ఉన్న అన్ని ఇన్‌పుట్/అవుట్‌పుట్ సిగ్నల్‌లు ఈ రెండు ICల గుండా వెళతాయి. కమోడోర్-64తో, మెమరీ మరియు ఏదైనా పరిధీయ మధ్య ప్రత్యక్ష సంభాషణ ఉండదు. మెమరీ మరియు ఏదైనా పరిధీయ మధ్య కమ్యూనికేషన్ మైక్రోప్రాసెసర్ అక్యుమ్యులేటర్ గుండా వెళుతుంది మరియు వీటిలో ఒకటి CIA ఎడాప్టర్లు (ICలు). ICలను CIA #1 మరియు CIA #2గా సూచిస్తారు. CIA అంటే కాంప్లెక్స్ ఇంటర్‌ఫేస్ అడాప్టర్.

ఒక్కో CIAకి 16 రిజిస్టర్లు ఉంటాయి. CIAలో టైమర్/కౌంటర్ రిజిస్టర్‌లు మినహా, ప్రతి రిజిస్టర్ 8-బిట్ వెడల్పు మరియు మెమరీ చిరునామాను కలిగి ఉంటుంది. CIA #1 కోసం మెమరీ రిజిస్టర్ చిరునామాలు $DC00 (56320 10 ) నుండి $DC0F (56335 10 ) CIA #2 కోసం మెమరీ రిజిస్టర్ చిరునామాలు $DD00 (56576 10 ) నుండి $DD0F (56591 10 ) ఈ రిజిస్టర్‌లు ICs మెమరీలో లేనప్పటికీ, అవి మెమరీలో భాగం. ఇంటర్మీడియట్ మెమరీ మ్యాప్‌లో, $D000 నుండి $DFFF వరకు ఉన్న I/O ప్రాంతం $DC00 నుండి $DC0F వరకు మరియు $DD00 నుండి $DD0F వరకు CIA చిరునామాలను కలిగి ఉంటుంది. $D000 నుండి $DFFF వరకు ఉన్న RAM I/O మెమరీ ఏరియాలో ఎక్కువ భాగం స్క్రీన్ క్యారెక్టర్‌ల కోసం ROM క్యారెక్టర్ యొక్క మెమరీ బ్యాంక్‌తో మార్చుకోవచ్చు. అందుకే పాత్రలను తెరపైకి పంపినప్పుడు, పెరిఫెరల్స్ పనిచేయవు; అయితే ముందుకు వెనుకకు మార్పిడి వేగంగా జరుగుతున్నందున వినియోగదారు దీనిని గమనించకపోవచ్చు.

CIA #1లో పోర్ట్ A మరియు పోర్ట్ B అని పిలువబడే రెండు రిజిస్టర్‌లు ఉన్నాయి. వాటి చిరునామాలు వరుసగా $DC00 మరియు $DC01. CIA #2లో పోర్ట్ A మరియు పోర్ట్ B అని పిలువబడే రెండు రిజిస్టర్లు కూడా ఉన్నాయి. వాస్తవానికి, వాటి చిరునామాలు భిన్నంగా ఉంటాయి; అవి వరుసగా $DD00 మరియు $DD01.

CIAలో పోర్ట్ A లేదా పోర్ట్ B ఒక సమాంతర పోర్ట్. దీనర్థం ఇది డేటాను ఒకేసారి ఎనిమిది బిట్‌లలో పెరిఫెరల్‌కు పంపగలదు లేదా మైక్రోప్రాసెసర్ నుండి ఒకేసారి ఎనిమిది బిట్లలో డేటాను స్వీకరించగలదు.

పోర్ట్ A లేదా పోర్ట్ Bతో అనుబంధించబడినది డేటా డైరెక్షన్ రిజిస్టర్ (DDR). CIA #1 (DDRA1) యొక్క పోర్ట్ A కోసం డేటా దిశ రిజిస్టర్ $DC02 యొక్క మెమరీ బైట్ స్థానంలో ఉంది. CIA #1 (DDRB1) పోర్ట్ B కోసం డేటా డైరెక్షన్ రిజిస్టర్ $DC03 యొక్క మెమరీ బైట్ స్థానంలో ఉంది. CIA #2 (DDRA2) యొక్క పోర్ట్ A కోసం డేటా దిశ రిజిస్టర్ $DD02 యొక్క మెమరీ బైట్ స్థానంలో ఉంది. CIA #2 (DDRB2) యొక్క పోర్ట్ B కోసం డేటా దిశ రిజిస్టర్ $DD03 యొక్క మెమరీ బైట్ స్థానంలో ఉంది.

ఇప్పుడు, పోర్ట్ A లేదా పోర్ట్ B కోసం ప్రతి బిట్‌ను సంబంధిత డేటా దిశ రిజిస్టర్ ద్వారా ఇన్‌పుట్ లేదా అవుట్‌పుట్‌గా సెట్ చేయవచ్చు. ఇన్‌పుట్ అంటే సమాచారం పరిధీయ నుండి మైక్రోప్రాసెసర్‌కి CIA ద్వారా వెళుతుందని అర్థం. అవుట్‌పుట్ అంటే సమాచారం మైక్రోప్రాసెసర్ నుండి పరిధీయానికి CIA ద్వారా వెళుతుందని అర్థం.

పోర్ట్ (రిజిస్టర్) యొక్క సెల్ ఇన్‌పుట్ చేయాలంటే, డేటా డైరెక్షన్ రిజిస్టర్‌లో సంబంధిత బిట్ 0. పోర్ట్ (రిజిస్టర్) యొక్క సెల్ అవుట్‌పుట్ చేయబడాలంటే, డేటా డైరెక్షన్ రిజిస్టర్‌లోని సంబంధిత బిట్ 1. చాలా సందర్భాలలో, పోర్ట్ యొక్క అన్ని 8-బిట్‌లు ఇన్‌పుట్ లేదా అవుట్‌పుట్‌గా ప్రోగ్రామ్ చేయబడతాయి. కంప్యూటర్‌ను ఆన్ చేసినప్పుడు, పోర్ట్ A అవుట్‌పుట్ కోసం ప్రోగ్రామ్ చేయబడుతుంది మరియు పోర్ట్ B ఇన్‌పుట్ కోసం ప్రోగ్రామ్ చేయబడుతుంది. కింది కోడ్ CIA #1 పోర్ట్ Aని అవుట్‌పుట్‌గా మరియు CIA #1 పోర్ట్ Bని ఇన్‌పుట్‌గా చేస్తుంది:

LDA #$FF
STA DDRA1 ; $DC00కి $DC02 దర్శకత్వం వహించారు
LDA #$00
STA DDRB1 ; $DC01 $DC03 ద్వారా దర్శకత్వం వహించబడింది

DDRA1 అనేది $DC02 యొక్క మెమరీ బైట్ స్థానానికి సంబంధించిన లేబుల్ (వేరియబుల్ పేరు), మరియు DDRB1 అనేది $DC03 యొక్క మెమరీ బైట్ స్థానం కోసం లేబుల్ (వేరియబుల్ పేరు). మొదటి సూచన 11111111ని µP యొక్క అక్యుమ్యులేటర్‌కు లోడ్ చేస్తుంది. రెండవ సూచన దీనిని CIA నంబర్ పోర్ట్ A యొక్క డేటా దిశ రిజిస్టర్‌కి కాపీ చేస్తుంది. 1. మూడవ సూచన 00000000ని µP యొక్క అక్యుమ్యులేటర్‌కు లోడ్ చేస్తుంది. నాల్గవ సూచన దీనిని CIA నంబర్ పోర్ట్ B యొక్క డేటా దిశ రిజిస్టర్‌కి కాపీ చేస్తుంది. 1. ఈ కోడ్ ఆపరేటింగ్ సిస్టమ్‌లోని సబ్‌ట్రౌటిన్‌లలో ఒకదానిలో ఉంది, ఇది కంప్యూటర్ పవర్-అప్ వద్ద ఈ ప్రారంభాన్ని చేస్తుంది.

ప్రతి CIA మైక్రోప్రాసెసర్‌కు అంతరాయ సర్వీస్ అభ్యర్థన లైన్‌ను కలిగి ఉంటుంది. CIA #1 నుండి వచ్చినది దీనికి వెళుతుంది IRQ µP యొక్క పిన్. CIA #2 నుండి వచ్చినది దీనికి వెళుతుంది NMI µP యొక్క పిన్. అని గుర్తుంచుకోండి NMI కంటే ఎక్కువ ప్రాధాన్యత ఉంది IRQ .

5.3 కీబోర్డ్ అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామింగ్

కమోడోర్-64కి మూడు అంతరాయాలు మాత్రమే ఉన్నాయి: IRQ , BRK, మరియు NMI . కోసం జంప్ టేబుల్ పాయింటర్ IRQ ROM (ఆపరేటింగ్ సిస్టమ్)లో $FFFE మరియు $FFFF చిరునామాలలో ఉంది, ఇది ఇప్పటికీ OS (ROM)లో ఉన్న సబ్‌ట్రౌటిన్‌కు అనుగుణంగా ఉంటుంది. BRK కోసం జంప్ టేబుల్ పాయింటర్ OSలోని $FFFC మరియు $FFFD చిరునామాలలో ఉంది, ఇది ఇప్పటికీ OS (ROM)లో ఉన్న సబ్‌ట్రౌటిన్‌కు అనుగుణంగా ఉంటుంది. కోసం జంప్ టేబుల్ పాయింటర్ NMI OSలో $FFFA మరియు $FFFB చిరునామాలలో ఉంది, ఇది ఇప్పటికీ OS (ROM)లో ఉన్న సబ్‌ట్రౌటిన్‌కు అనుగుణంగా ఉంటుంది. కొరకు IRQ , నిజానికి రెండు సబ్‌ట్రౌటిన్‌లు ఉన్నాయి. కాబట్టి, BRK సాఫ్ట్‌వేర్ అంతరాయానికి (సూచన) దాని స్వంత జంప్ టేబుల్ పాయింటర్ ఉంది. కోసం జంప్ టేబుల్ పాయింటర్ IRQ హార్డ్‌వేర్ అంతరాయమా లేదా సాఫ్ట్‌వేర్ అంతరాయమా అని నిర్ణయించే కోడ్‌కి దారి తీస్తుంది. ఇది హార్డ్‌వేర్ అంతరాయం అయితే, రొటీన్ IRQ అంటారు. ఇది సాఫ్ట్‌వేర్ అంతరాయం (BRK) అయితే, BRK కోసం రొటీన్ అంటారు. OS సంస్కరణల్లో ఒకదానిలో, సబ్‌రౌటిన్ IRQ $EA31 వద్ద ఉంది మరియు BRK కోసం సబ్‌ట్రౌటిన్ $FE66 వద్ద ఉంది. ఈ చిరునామాలు $FF81 క్రింద ఉన్నాయి, కాబట్టి అవి జంప్ టేబుల్ ఎంట్రీలు కావు మరియు OS సంస్కరణతో మారవచ్చు. ఈ అంశంలో ఆసక్తిని కలిగించే మూడు రొటీన్‌లు ఉన్నాయి: ఇది నొక్కిన కీ లేదా BRK, $FE43 వద్ద ఉన్నది మరియు OS వెర్షన్‌తో కూడా మారవచ్చు.

Commodore-64 కంప్యూటర్ ప్రింటింగ్ విభాగం (తల మరియు కాగితం) లేకుండా కనిపించే భారీ టైప్-రైటర్ (పైకి) లాగా ఉంటుంది. కీబోర్డ్ CIA #1కి కనెక్ట్ చేయబడింది. CIA #1 డిఫాల్ట్‌గా ఎటువంటి ప్రోగ్రామింగ్ జోక్యం లేకుండా ప్రతి 1/60 సెకనుకు కీబోర్డ్‌ను స్కాన్ చేస్తుంది. కాబట్టి, ప్రతి 1/60 సెకను, CIA #1 పంపుతుంది IRQ µPకి. ఒక్కటే ఉంది IRQ CIA #1 నుండి మాత్రమే వచ్చే µP వద్ద పిన్ చేయండి. యొక్క ఒక ఇన్‌పుట్ పిన్ NMI µP యొక్క, ఇది భిన్నంగా ఉంటుంది IRQ , CIA #2 నుండి మాత్రమే వచ్చింది (క్రింది దృష్టాంతాన్ని చూడండి). BRK అనేది వినియోగదారు ప్రోగ్రామ్‌లో కోడ్ చేయబడిన అసెంబ్లీ భాషా సూచన.

కాబట్టి, ప్రతి 1/60 సెకను, ది IRQ $FFFE మరియు $FFFF ద్వారా సూచించబడే రొటీన్ అంటారు. రొటీన్ కీ నొక్కినదా లేదా BRK సూచన ఎదురైనదా అని తనిఖీ చేస్తుంది. ఒక కీని నొక్కితే, కీ-ప్రెస్‌ని నిర్వహించే రొటీన్ అంటారు. ఇది BRK సూచన అయితే, BRKని నిర్వహించడానికి రొటీన్ అంటారు. అది రెండూ కాకపోతే, ఏమీ జరగదు. రెండూ జరగకపోవచ్చు, కానీ CIA #1 పంపుతుంది IRQ ప్రతి 1/60 సెకనుకు µPకి.

కీబోర్డ్ క్యూ, కీబోర్డ్ బఫర్ అని కూడా పిలుస్తారు, ఇది RAM బైట్ స్థానాల పరిధి $0277 నుండి $0280 వరకు, కలుపుకొని; మొత్తం 1010 బైట్లు. ఇది ఫస్ట్-ఇన్-ఫస్ట్-అవుట్ బఫర్. అంటే మొదట వచ్చే పాత్రనే వదిలేస్తుంది. పాశ్చాత్య యూరోపియన్ అక్షరం ఒక బైట్ తీసుకుంటుంది.

కాబట్టి, కీని నొక్కినప్పుడు ప్రోగ్రామ్ ఏ అక్షరాన్ని వినియోగించనప్పుడు, కీ కోడ్ ఈ బఫర్ (క్యూ)లోకి వెళుతుంది. పది అక్షరాలు ఉండే వరకు బఫర్ నిండిపోతూనే ఉంటుంది. పదవ అక్షరం తర్వాత నొక్కిన ఏ అక్షరం రికార్డ్ చేయబడదు. క్యూ నుండి కనీసం ఒక అక్షరం (వినియోగం) పొందే వరకు ఇది విస్మరించబడుతుంది. జంప్ టేబుల్‌లో సబ్‌ట్రౌటిన్ కోసం ఎంట్రీ ఉంది, ఇది క్యూ నుండి మైక్రోప్రాసెసర్‌కు మొదటి అక్షరాన్ని పొందుతుంది. అంటే ఇది క్యూలోకి వెళ్లి µP యొక్క అక్యుమ్యులేటర్‌లో ఉంచే మొదటి అక్షరాన్ని తీసుకుంటుంది. దీన్ని చేయడానికి జంప్ టేబుల్ సబ్‌రూటీన్‌ను GETIN (గెట్-ఇన్ కోసం) అంటారు. జంప్ పట్టికలో మూడు-బైట్ నమోదు కోసం మొదటి బైట్ GETIN (చిరునామా $FFE4)గా లేబుల్ చేయబడింది. తదుపరి రెండు బైట్‌లు ROM (OS)లో వాస్తవ దినచర్యను సూచించే పాయింటర్ (చిరునామా). ఈ రొటీన్ అని పిలవడం ప్రోగ్రామర్ బాధ్యత. లేకపోతే, కీబోర్డ్ బఫర్ నిండుగా ఉంటుంది మరియు ఇటీవల నొక్కిన అన్ని కీలు విస్మరించబడతాయి. అక్యుమ్యులేటర్‌లోకి వెళ్లే విలువ సంబంధిత కీ ASCII విలువ.

కీ కోడ్‌లు మొదటి స్థానంలో క్యూలోకి ఎలా వస్తాయి? SCNKEY (స్కాన్ కీ కోసం) అనే జంప్ టేబుల్ రొటీన్ ఉంది. ఈ రొటీన్‌ని సాఫ్ట్‌వేర్ మరియు హార్డ్‌వేర్ రెండింటి ద్వారా పిలవవచ్చు. ఈ సందర్భంలో, ఎలక్ట్రికల్ సిగ్నల్ ఉన్నప్పుడు మైక్రోప్రాసెసర్‌లోని ఎలక్ట్రానిక్స్ (ఫిజిక్స్) సర్క్యూట్ ద్వారా దీనిని పిలుస్తారు. IRQ తక్కువగా వుంది. అది ఎలా జరుగుతుంది అనేది ఈ ఆన్‌లైన్ కెరీర్ కోర్సులో ప్రస్తావించబడలేదు.

కీబోర్డ్ బఫర్ నుండి అక్యుమ్యులేటర్ A లోకి మొదటి కీ కోడ్‌ను పొందడానికి కోడ్ కేవలం ఒక లైన్ మాత్రమే:

GETIN

కీబోర్డ్ బఫర్ ఖాళీగా ఉంటే, అక్యుమ్యులేటర్‌లో $00 ఉంచబడుతుంది. సున్నా కోసం ASCII కోడ్ $00 కాదని గుర్తుంచుకోండి; అది $30. $00 అంటే శూన్యం. ప్రోగ్రామ్‌లో, ప్రోగ్రామ్ కీ ప్రెస్ కోసం వేచి ఉండాల్సిన పాయింట్ ఉండవచ్చు. దీని కోసం కోడ్:

JSR గెటిన్ వేచి ఉండండి
CMP #$00
కప్ప వేచి ఉండండి

మొదటి పంక్తిలో, 'WAIT' అనేది RAM చిరునామాను గుర్తించే లేబుల్, ఇక్కడ JSR సూచన (టైప్ చేయబడింది) ఉంది. GETIN కూడా ఒక చిరునామా. ఇది జంప్ టేబుల్‌లోని సంబంధిత మూడు బైట్‌లలో మొదటిది చిరునామా. GETIN ఎంట్రీ, అలాగే జంప్ టేబుల్‌లోని అన్ని ఎంట్రీలు (చివరి మూడు మినహా), మూడు బైట్‌లను కలిగి ఉంటాయి. ఎంట్రీ యొక్క మొదటి బైట్ JSR సూచన. తదుపరి రెండు బైట్‌లు ఇప్పటికీ ROM (OS)లో ఉన్నప్పటికీ జంప్ టేబుల్‌కి దిగువన ఉన్న వాస్తవ GETIN సబ్‌ట్రౌటిన్ యొక్క శరీరం యొక్క చిరునామా. కాబట్టి, GETIN సబ్‌ట్రౌటిన్‌కి వెళ్లమని ఎంట్రీ చెబుతోంది. కీబోర్డ్ క్యూ ఖాళీగా లేకుంటే, GETIN అక్యుమ్యులేటర్‌లో ఫస్ట్-ఇన్-ఫస్ట్-అవుట్ క్యూ యొక్క ASCII కీ కోడ్‌ను ఉంచుతుంది. క్యూ ఖాళీగా ఉంటే, నల్ ($00) అక్యుమ్యులేటర్‌లో ఉంచబడుతుంది.

రెండవ సూచన అక్యుమ్యులేటర్ విలువను $00తో పోలుస్తుంది. అది $00 అయితే, కీబోర్డ్ క్యూ ఖాళీగా ఉందని మరియు CMP సూచన ప్రాసెసర్ స్టేటస్ రిజిస్టర్ (కేవలం స్టేటస్ రిజిస్టర్ అని పిలుస్తారు) Z ఫ్లాగ్‌కు 1ని పంపుతుంది. Aలోని విలువ $00 కాకపోతే, CMP సూచన 0ని స్టేటస్ రిజిస్టర్ యొక్క Z ఫ్లాగ్‌కు పంపుతుంది.

స్టేటస్ రిజిస్టర్ యొక్క Z ఫ్లాగ్ 1 అయితే 'BEQ WAIT' అనే మూడవ సూచన ప్రోగ్రామ్‌ను మొదటి సూచనకు తిరిగి పంపుతుంది. మొదటిది, రెండవది మరియు మూడవ సూచనలు కీబోర్డ్‌పై కీ నొక్కినంత వరకు క్రమం తప్పకుండా అమలు చేయబడతాయి . కీని ఎప్పుడూ నొక్కకపోతే, చక్రం నిరవధికంగా పునరావృతమవుతుంది. ఇలాంటి కోడ్ సెగ్మెంట్ సాధారణంగా టైమింగ్ కోడ్ సెగ్మెంట్‌తో వ్రాయబడుతుంది, ఇది కీని ఎప్పుడూ నొక్కకపోతే కొంత సమయం తర్వాత లూప్ నుండి నిష్క్రమిస్తుంది (క్రింది చర్చను చూడండి).

గమనిక : కీబోర్డ్ డిఫాల్ట్ ఇన్‌పుట్ పరికరం మరియు స్క్రీన్ డిఫాల్ట్ అవుట్‌పుట్ పరికరం.

5.4 ఛానెల్, పరికర సంఖ్య మరియు లాజికల్ ఫైల్ నంబర్

కమోడోర్-64 ఆపరేటింగ్ సిస్టమ్‌ను వివరించడానికి ఈ అధ్యాయం ఉపయోగించే పెరిఫెరల్స్‌లో కీబోర్డ్, స్క్రీన్ (మానిటర్), డిస్క్‌తో కూడిన డిస్క్ డ్రైవ్, ప్రింటర్ మరియు RS-232C ఇంటర్‌ఫేస్ ద్వారా కనెక్ట్ అయ్యే మోడెమ్ ఉన్నాయి. ఈ పరికరాలు మరియు సిస్టమ్ యూనిట్ (మైక్రోప్రాసెసర్ మరియు మెమరీ) మధ్య కమ్యూనికేషన్ జరగాలంటే, ఒక ఛానెల్‌ని ఏర్పాటు చేయాలి.

ఛానెల్ బఫర్, పరికర సంఖ్య, లాజికల్ ఫైల్ నంబర్ మరియు ఐచ్ఛికంగా ద్వితీయ చిరునామాను కలిగి ఉంటుంది. ఈ నిబంధనల వివరణ క్రింది విధంగా ఉంది:

ఒక బఫర్
ఒక కీని నొక్కినప్పుడు, దాని కోడ్ తప్పనిసరిగా పది వరుస స్థానాల శ్రేణిలోని RAMలోని బైట్ స్థానానికి వెళ్లాలని మునుపటి విభాగం నుండి గమనించండి. ఈ పది స్థానాల శ్రేణి కీబోర్డ్ బఫర్. ప్రతి ఇన్‌పుట్ లేదా అవుట్‌పుట్ పరికరం (పరిధీయ) RAMలో బఫర్ అని పిలువబడే వరుస స్థానాలను కలిగి ఉంటుంది.

పరికర సంఖ్య
కమోడోర్-64తో, ఏదైనా పరిధీయ పరికర సంఖ్యతో ఇవ్వబడుతుంది. కింది పట్టిక వివిధ పరికరాలు మరియు వాటి సంఖ్యలను చూపుతుంది:

పట్టిక 5.41
కమోడోర్ 64 పరికర సంఖ్యలు మరియు వాటి పరికరాలు
సంఖ్య పరికరం
0 కీబోర్డ్
1 టేప్ డ్రైవ్
2 RS 232C ఇంటర్‌ఫేస్ ఉదా. ఒక మోడెమ్
3 స్క్రీన్
4 ప్రింటర్ #1
5 ప్రింటర్ #2
6 ప్లాటర్ #1
7 ప్లాటర్ #2
8 డిస్క్ డ్రైవ్
9
¦
¦
¦
30
8 (కలిసి) నుండి మరో 22 నిల్వ పరికరాల వరకు

కంప్యూటర్ కోసం రెండు రకాల పోర్ట్‌లు ఉన్నాయి. సిస్టమ్ యూనిట్ యొక్క నిలువు ఉపరితలంపై ఒక రకం బాహ్యమైనది. మరొక రకం అంతర్గతమైనది. ఈ అంతర్గత పోర్ట్ ఒక రిజిస్టర్. కమోడోర్-64లో నాలుగు అంతర్గత పోర్ట్‌లు ఉన్నాయి: CIA 1 కోసం పోర్ట్ A మరియు పోర్ట్ B మరియు CIA 2 కోసం పోర్ట్ A మరియు పోర్ట్ B. కమోడోర్-64 కోసం ఒక బాహ్య పోర్ట్ ఉంది, దీనిని సీరియల్ పోర్ట్ అని పిలుస్తారు. సంఖ్య 3 పైకి ఉన్న పరికరాలు సీరియల్ పోర్ట్‌కు కనెక్ట్ చేయబడ్డాయి. అవి డైసీ చైన్ పద్ధతిలో అనుసంధానించబడి ఉంటాయి (ఒకటి వెనుక ఒకటి కనెక్ట్ చేయబడింది), వీటిలో ప్రతి ఒక్కటి దాని పరికరం సంఖ్య ద్వారా గుర్తించబడుతుంది. సంఖ్య 8 పైకి ఉన్న పరికరాలు సాధారణంగా నిల్వ పరికరాలు.

గమనిక : డిఫాల్ట్ ఇన్‌పుట్ పరికరం అనేది పరికరం సంఖ్య 0తో కూడిన కీబోర్డ్. డిఫాల్ట్ అవుట్‌పుట్ పరికరం పరికరం సంఖ్య 3తో స్క్రీన్.

లాజికల్ ఫైల్ నంబర్
లాజికల్ ఫైల్ నంబర్ అనేది పరికరం (పరిధీయ) యాక్సెస్ కోసం తెరవబడిన క్రమంలో ఇవ్వబడిన సంఖ్య. అవి 010 నుండి 255 వరకు ఉంటాయి 10 .

ద్వితీయ చిరునామా
డిస్క్‌లో రెండు ఫైల్‌లు (లేదా ఒకటి కంటే ఎక్కువ ఫైల్‌లు) తెరవబడినట్లు ఊహించుకోండి. ఈ రెండు ఫైల్‌ల మధ్య తేడాను గుర్తించడానికి, ద్వితీయ చిరునామాలు ఉపయోగించబడతాయి. ద్వితీయ చిరునామాలు పరికరం నుండి పరికరానికి మారే సంఖ్యలు. ప్రింటర్‌కు ద్వితీయ చిరునామాగా 3 యొక్క అర్థం డిస్క్ డ్రైవ్‌కు ద్వితీయ చిరునామాగా 3 యొక్క అర్థం నుండి భిన్నంగా ఉంటుంది. ఫైల్ చదవడానికి తెరవబడినప్పుడు లేదా వ్రాయడానికి ఫైల్ తెరవబడినప్పుడు వంటి లక్షణాలపై అర్థం ఆధారపడి ఉంటుంది. సాధ్యమయ్యే ద్వితీయ సంఖ్యలు 0 నుండి 10 15 వరకు 10 ప్రతి పరికరం కోసం. అనేక పరికరాల కోసం, ఆదేశాలను పంపడానికి సంఖ్య 15 ఉపయోగించబడుతుంది.

గమనిక : పరికర సంఖ్యను పరికర చిరునామా అని కూడా అంటారు మరియు ద్వితీయ సంఖ్యను ద్వితీయ చిరునామా అని కూడా అంటారు.

పరిధీయ లక్ష్యాన్ని గుర్తించడం
డిఫాల్ట్ కమోడోర్ మెమరీ మ్యాప్ కోసం, $0200 నుండి $02FF (పేజీ 2) వరకు మెమరీ చిరునామాలు ROM (కెర్నల్)లోని ఆపరేటింగ్ సిస్టమ్ ద్వారా మాత్రమే ఉపయోగించబడతాయి మరియు ఆపరేటింగ్ సిస్టమ్ మరియు బేసిక్ భాష ద్వారా కాదు. BASIC ఇప్పటికీ ROM OS ద్వారా స్థానాలను ఉపయోగించగలిగినప్పటికీ.

మోడెమ్ మరియు ప్రింటర్ రెండు వేర్వేరు పరిధీయ లక్ష్యాలు. డిస్క్ నుండి రెండు ఫైల్‌లు తెరవబడితే, అవి రెండు వేర్వేరు లక్ష్యాలు. డిఫాల్ట్ మెమరీ మ్యాప్‌తో, మూడు వరుస పట్టికలు (జాబితాలు) ఉన్నాయి, వీటిని ఒక పెద్ద పట్టికగా చూడవచ్చు. ఈ మూడు టేబుల్‌లు లాజికల్ ఫైల్ నంబర్‌లు, డివైస్ నంబర్‌లు మరియు సెకండరీ అడ్రస్‌ల మధ్య సంబంధాన్ని కలిగి ఉంటాయి. దానితో, నిర్దిష్ట ఛానెల్ లేదా ఇన్‌పుట్/అవుట్‌పుట్ లక్ష్యం గుర్తించబడుతుంది. మూడు పట్టికలను ఫైల్ టేబుల్స్ అంటారు. RAM చిరునామాలు మరియు వాటి వద్ద ఉన్నవి:

$0259 — $0262: లేబుల్‌తో కూడిన పట్టిక, LAT, గరిష్టంగా పది క్రియాశీల లాజికల్ ఫైల్ నంబర్‌లు.
$0263 — $026C: పది సంబంధిత పరికర సంఖ్యల వరకు లేబుల్, FATతో టేబుల్.
$026D — $0276: పది సంబంధిత ద్వితీయ చిరునామాల లేబుల్, SATతో టేబుల్.

ఇక్కడ, “—“ అంటే “to”, మరియు ఒక సంఖ్య ఒక బైట్ తీసుకుంటుంది.

'ఛానెల్‌ను గుర్తించడంలో ప్రతి పరికరానికి బఫర్ ఎందుకు చేర్చబడలేదు?' అని రీడర్ అడగవచ్చు. సరే, సమాధానం ఏమిటంటే, కమోడోర్-64తో, ప్రతి బాహ్య పరికరం (పరిధీయ) RAM (మెమరీ మ్యాప్)లో బైట్‌ల స్థిర శ్రేణిని కలిగి ఉంటుంది. తెరవబడిన ఛానెల్ లేకుండా, వారి స్థానాలు ఇప్పటికీ మెమరీలో ఉన్నాయి. కీబోర్డ్ కోసం బఫర్, ఉదాహరణకు, డిఫాల్ట్ మెమరీ మ్యాప్ కోసం $0277 నుండి $0280 (కలిసి) వరకు పరిష్కరించబడింది.

కెర్నల్ SETLFS మరియు SETNAM సబ్‌రౌటీన్‌లు
SETLFS మరియు SETNAM కెర్నల్ రొటీన్‌లు. ఛానెల్‌ని లాజికల్ ఫైల్‌గా చూడవచ్చు. ఛానెల్ తెరవబడాలంటే, లాజికల్ ఫైల్ నంబర్, పరికరం నంబర్ మరియు ఐచ్ఛిక ద్వితీయ చిరునామాను రూపొందించాలి. ఐచ్ఛిక ఫైల్ పేరు (టెక్స్ట్) కూడా అవసరం కావచ్చు. SETLFS రొటీన్ లాజికల్ ఫైల్ నంబర్, పరికర సంఖ్య మరియు ఐచ్ఛిక ద్వితీయ చిరునామాను సెటప్ చేస్తుంది. ఈ సంఖ్యలు వాటి సంబంధిత పట్టికలలో ఉంచబడ్డాయి. SETNAM రొటీన్ ఫైల్ కోసం స్ట్రింగ్ పేరును సెటప్ చేస్తుంది, ఇది ఒక ఛానెల్‌కు తప్పనిసరి మరియు మరొక ఛానెల్‌కు ఐచ్ఛికం కావచ్చు. ఇది మెమరీలో పాయింటర్ (రెండు-బైట్ చిరునామా)ని కలిగి ఉంటుంది. పాయింటర్ స్ట్రింగ్ (పేరు) యొక్క ప్రారంభాన్ని సూచిస్తుంది, ఇది మెమరీలో మరొక ప్రదేశంలో ఉండవచ్చు. స్ట్రింగ్ పేరు స్ట్రింగ్ పొడవును కలిగి ఉన్న బైట్‌తో ప్రారంభమవుతుంది, దాని తర్వాత టెక్స్ట్ (పేరు) ఉంటుంది. పేరు గరిష్టంగా పదహారు బైట్లు (పొడవు).

SETLFS రొటీన్‌కు కాల్ చేయడానికి, వినియోగదారు ప్రోగ్రామ్ డిఫాల్ట్ మెమరీ మ్యాప్ కోసం ROMలోని OS యొక్క జంప్ టేబుల్ యొక్క $FFBA చిరునామాకు (JSR) వెళ్లాలి. జంప్ టేబుల్ యొక్క చివరి ఆరు బైట్‌లను మినహాయించి, ప్రతి ఎంట్రీ మూడు బైట్‌లను కలిగి ఉంటుందని గుర్తుంచుకోండి. మొదటి బైట్ JSR సూచన, ఇది సబ్‌ట్రౌటిన్‌కి జంప్ అవుతుంది, తదుపరి రెండు బైట్‌లలోని చిరునామా వద్ద ప్రారంభమవుతుంది. SETNAM రొటీన్‌కు కాల్ చేయడానికి, వినియోగదారు ప్రోగ్రామ్ ROMలోని OS యొక్క జంప్ టేబుల్ యొక్క $FFBD చిరునామాకు (JSR) వెళ్లాలి. ఈ రెండు రొటీన్‌ల వినియోగం క్రింది చర్చలో చూపబడింది.

5.5 ఛానెల్ తెరవడం, లాజికల్ ఫైల్‌ను తెరవడం, లాజికల్ ఫైల్‌ను మూసివేయడం మరియు అన్ని I/O ఛానెల్‌లను మూసివేయడం

ఛానెల్‌లో మెమరీ బఫర్, లాజికల్ ఫైల్ నంబర్, పరికర సంఖ్య (పరికర చిరునామా) మరియు ఐచ్ఛిక ద్వితీయ చిరునామా (సంఖ్య) ఉంటాయి. లాజికల్ ఫైల్ నంబర్ ద్వారా గుర్తించబడే లాజికల్ ఫైల్ (ఒక సంగ్రహణ) ప్రింటర్, మోడెమ్, డిస్క్ డ్రైవ్ మొదలైన పరిధీయ పరికరాన్ని సూచిస్తుంది. ఈ విభిన్న పరికరాలలో ప్రతి ఒక్కటి వేర్వేరు లాజికల్ ఫైల్ నంబర్‌లను కలిగి ఉండాలి. డిస్క్‌లో చాలా ఫైల్‌లు ఉన్నాయి. లాజికల్ ఫైల్ డిస్క్‌లోని నిర్దిష్ట ఫైల్‌ను కూడా సూచిస్తుంది. నిర్దిష్ట ఫైల్ ప్రింటర్ లేదా మోడెమ్ వంటి పెరిఫెరల్స్‌కు భిన్నంగా ఉండే లాజికల్ ఫైల్ నంబర్‌ను కూడా కలిగి ఉంటుంది. లాజికల్ ఫైల్ నంబర్ ప్రోగ్రామర్ ద్వారా ఇవ్వబడుతుంది. ఇది 010 ($00) నుండి 25510 ($FF) వరకు ఏదైనా సంఖ్య కావచ్చు.

OS SETLFS రొటీన్
$FFBA వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడిన OS SETLFS రొటీన్ ఛానెల్‌ని సెటప్ చేస్తుంది. ఇది LAT ($0259 — $0262) అయిన ఫైల్ టేబుల్‌లో లాజికల్ ఫైల్ నంబర్‌ను ఉంచాలి. ఇది FAT ($0263 — $026C) ఫైల్ పట్టికలో సంబంధిత పరికర సంఖ్యను ఉంచాలి. ఫైల్ (పరికరం) యాక్సెస్‌కి సెకండరీ నంబర్ అవసరమైతే, దానికి సంబంధిత సెకండరీ అడ్రస్ (నంబర్)ని ఫైల్ టేబుల్‌లో ఉంచాలి, అది SAT ($026D — $0276).

ఆపరేట్ చేయడానికి, SETLFS సబ్‌రూటీన్ µP అక్యుమ్యులేటర్ నుండి లాజికల్ ఫైల్ నంబర్‌ను పొందాలి; ఇది µP X రిజిస్టర్ నుండి పరికర సంఖ్యను పొందాలి. ఛానెల్‌కు అవసరమైతే, అది µP Y రిజిస్టర్ నుండి ద్వితీయ చిరునామాను పొందవలసి ఉంటుంది.

లాజికల్ ఫైల్ నంబర్ ప్రోగ్రామర్ ద్వారా నిర్ణయించబడుతుంది. వేర్వేరు పరికరాలను సూచించే లాజికల్ ఫైల్ నంబర్‌లు భిన్నంగా ఉంటాయి. ఇప్పుడు, SETLFS రొటీన్‌కు కాల్ చేయడానికి ముందు, ప్రోగ్రామర్ లాజికల్ ఫైల్ కోసం నంబర్‌ను µP అక్యుమ్యులేటర్‌లో ఉంచాలి. పరికర సంఖ్య పట్టిక 5.41 వంటి పట్టిక (పత్రం) నుండి చదవబడుతుంది. ప్రోగ్రామర్ పరికర నంబర్‌ను µP X రిజిస్టర్‌లో కూడా ఉంచాలి. ప్రింటర్, డిస్క్ డ్రైవ్ మొదలైన పరికరానికి సరఫరాదారు పరికరం కోసం సాధ్యమయ్యే ద్వితీయ చిరునామాలు మరియు వాటి అర్థాలను అందిస్తుంది. ఛానెల్‌కు ద్వితీయ చిరునామా అవసరమైతే, ప్రోగ్రామర్ పరికరం (పరిధీయ)తో సరఫరా చేయబడిన పత్రం నుండి దాన్ని పొందవలసి ఉంటుంది. సెకండరీ అడ్రస్ (నంబర్) అవసరమైతే, ప్రోగ్రామర్ SETLFS సబ్‌రూటీన్‌కి కాల్ చేయడానికి ముందు దానిని µP Y రిజిస్టర్‌లో ఉంచాలి. సెకండరీ అడ్రస్ అవసరం లేకుంటే, ప్రోగ్రామర్ SETLFS సబ్‌రూటీన్‌కి కాల్ చేయడానికి ముందు $FF నంబర్‌ను µP Y రిజిస్టర్‌లో ఉంచాలి.

SETLFS సబ్‌రూటీన్ ఎటువంటి వాదన లేకుండా పిలువబడుతుంది. దీని వాదనలు ఇప్పటికే 6502 µP యొక్క మూడు రిజిస్టర్‌లలో ఉన్నాయి. రిజిస్టర్లలో తగిన సంఖ్యలను ఉంచిన తర్వాత, రొటీన్ ప్రోగ్రామ్‌లో ఈ క్రింది వాటితో ప్రత్యేక లైన్‌లో పిలువబడుతుంది:

JSR SETLFS

రొటీన్ వేర్వేరు సంఖ్యలను వారి ఫైల్ పట్టికలలో తగిన విధంగా ఉంచుతుంది.

OS SETNAM రొటీన్
OS SETNAM రొటీన్ $FFBD వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. అన్ని గమ్యస్థానాలకు ఫైల్ పేర్లు లేవు. గమ్యస్థానాలను కలిగి ఉన్న వాటి కోసం (డిస్క్‌లోని ఫైల్‌లు వంటివి), ఫైల్ పేరును సెటప్ చేయాలి. కోట్‌లు లేకుండా 7 బైట్‌లను కలిగి ఉన్న ఫైల్ పేరు “mydocum” అని భావించండి. ఈ పేరు $C101 నుండి $C107 స్థానాల్లో (కలిసి) ఉందని మరియు $07 పొడవు $C100 స్థానంలో ఉందని భావించండి. స్ట్రింగ్ అక్షరాల ప్రారంభ చిరునామా $C101. ప్రారంభ చిరునామా యొక్క దిగువ బైట్ $01 మరియు అధిక బైట్ $C1.

SETNAM రొటీన్‌కు కాల్ చేయడానికి ముందు, ప్రోగ్రామర్ $07 (స్ట్రింగ్ యొక్క పొడవు) నంబర్‌ను µP అక్యుమ్యులేటర్‌లో ఉంచాలి. స్ట్రింగ్ ప్రారంభ చిరునామా యొక్క దిగువ బైట్ $01 µP X రిజిస్టర్‌లో ఉంచబడింది. $C1 యొక్క స్ట్రింగ్ ప్రారంభ చిరునామా యొక్క అధిక బైట్ µP Y రిజిస్టర్‌లో ఉంచబడింది. సబ్‌ట్రౌటిన్‌ను ఈ క్రింది వాటితో పిలుస్తారు:

JSR సెట్నం

SETNAM రొటీన్ మూడు రిజిస్టర్‌ల నుండి విలువలను ఛానెల్‌తో అనుబంధిస్తుంది. ఆ తర్వాత రిజిస్టర్లలో విలువలు ఉండాల్సిన అవసరం లేదు. ఛానెల్‌కు ఫైల్ పేరు అవసరం లేకపోతే, ప్రోగ్రామర్ µP అక్యుమ్యులేటర్‌లో $00ని ఉంచాలి. ఈ సందర్భంలో, X మరియు Y రిజిస్టర్‌లలో ఉన్న విలువలు విస్మరించబడతాయి.

OS ఓపెన్ రొటీన్
OS ఓపెన్ రొటీన్ $FFC0 వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. ఈ రొటీన్ లాజికల్ ఫైల్ నంబర్, పరికర సంఖ్య (మరియు బఫర్), సాధ్యమయ్యే ద్వితీయ చిరునామా మరియు సాధ్యమైన ఫైల్ పేరును ఉపయోగిస్తుంది, కమోడోర్ కంప్యూటర్ మరియు బాహ్య పరికరంలోని ఫైల్ లేదా బాహ్య పరికరం మధ్య కనెక్షన్‌ను అందించడానికి.

ఈ రొటీన్, అన్ని ఇతర కమోడోర్ OS ROM రొటీన్‌ల వలె, ఎటువంటి వాదనను తీసుకోదు. ఇది µP రిజిస్టర్‌లను ఉపయోగిస్తున్నప్పటికీ, రిజిస్టర్‌లలో ఏదీ దాని కోసం ఆర్గ్యుమెంట్‌లతో (విలువలు) ముందే లోడ్ చేయవలసిన అవసరం లేదు. దీన్ని కోడ్ చేయడానికి, SETLFS మరియు SETNAM అని పిలిచిన తర్వాత కింది వాటిని టైప్ చేయండి:

JSR ఓపెన్

OPEN రొటీన్‌లో లోపాలు సంభవించవచ్చు. ఉదాహరణకు, చదవడానికి ఫైల్ కనుగొనబడకపోవచ్చు. లోపం సంభవించినప్పుడు, రొటీన్ విఫలమవుతుంది మరియు సంబంధిత లోపం సంఖ్యను µP అక్యుమ్యులేటర్‌లో ఉంచుతుంది మరియు µP స్థితి రిజిస్టర్‌లో క్యారీ ఫ్లాగ్‌ను (1కి) సెట్ చేస్తుంది. కింది పట్టిక దోష సంఖ్యలు మరియు వాటి అర్థాలను అందిస్తుంది:

పట్టిక 5.51
OS ROM ఓపెన్ రొటీన్ కోసం కెర్నల్ ఎర్రర్ నంబర్‌లు మరియు వాటి అర్థాలు
ఎర్రర్ నంబర్ వివరణ ఉదాహరణ
1 చాలా ఎక్కువ ఫైల్‌లు ఉన్నాయి పది ఫైల్‌లు ఇప్పటికే తెరిచినప్పుడు తెరవండి
2 ఫైల్ తెరవబడింది ఓపెన్ 1,3: ఓపెన్ 1,4
3 ఫైల్ తెరవబడలేదు OPEN లేకుండా ప్రింట్#5
4 ఫైల్ కనుగొనబడలేదు 'NONEXISTENF',8ని లోడ్ చేయండి
5 పరికరం అందుబాటులో లేదు ఓపెన్ 11,11: ప్రింట్ #11
6 ఇన్‌పుట్ ఫైల్ కాదు “SEQ,S,W”ని తెరవండి: GET#8,X$
7 అవుట్‌పుట్ ఫైల్ కాదు తెరవండి 1,0: ప్రింట్#1
8 ఫైల్ పేరు లేదు లోడ్ “”,8
9 చట్టవిరుద్ధమైన పరికరం నం. లోడ్ “ప్రోగ్రామ్”,3

ఈ పట్టిక పాఠకులు అనేక ఇతర ప్రదేశాలలో చూసే విధంగా ప్రదర్శించబడింది.

OS CHKIN రొటీన్
OS CHKIN రొటీన్ $FFC6 వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. ఫైల్ (లాజికల్ ఫైల్) తెరిచిన తర్వాత, ఓపెనింగ్ ఇన్‌పుట్ లేదా అవుట్‌పుట్ కోసం అని నిర్ణయించుకోవాలి. CHKIN రొటీన్ తెరవడాన్ని ఇన్‌పుట్ ఛానెల్‌గా చేస్తుంది. ఈ రొటీన్ µP X రిజిస్టర్ నుండి లాజికల్ ఫైల్ నంబర్‌ను చదవాలి. కాబట్టి, ప్రోగ్రామర్ ఈ రొటీన్‌కు కాల్ చేయడానికి ముందు లాజికల్ ఫైల్ నంబర్‌ను X రిజిస్టర్‌లో ఉంచాలి. దీనిని సరళంగా అంటారు:

JSR CHKIN

OS CHKOUT రొటీన్
OS CHKOUT రొటీన్ $FFC9 వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. ఫైల్ (లాజికల్ ఫైల్) తెరిచిన తర్వాత, ఓపెనింగ్ ఇన్‌పుట్ లేదా అవుట్‌పుట్ కోసం అని నిర్ణయించుకోవాలి. CHKOUT రొటీన్ ఓపెనింగ్‌ను అవుట్‌పుట్ ఛానెల్‌గా చేస్తుంది. ఈ రొటీన్ µP X రిజిస్టర్ నుండి లాజికల్ ఫైల్ నంబర్‌ను చదవాలి. కాబట్టి, ప్రోగ్రామర్ ఈ రొటీన్‌కు కాల్ చేయడానికి ముందు లాజికల్ ఫైల్ నంబర్‌ను X రిజిస్టర్‌లో ఉంచాలి. దీనిని సరళంగా పిలుస్తారు:

JSR CHKOUT

OS క్లోజ్ రొటీన్
OS క్లోజ్ రొటీన్ $FFC3 వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. లాజికల్ ఫైల్ తెరవబడిన తర్వాత మరియు బైట్‌లు ప్రసారం చేయబడిన తర్వాత, లాజికల్ ఫైల్ మూసివేయబడాలి. లాజికల్ ఫైల్‌ను మూసివేయడం వలన సిస్టమ్ యూనిట్‌లోని బఫర్‌ను ఇంకా తెరవాల్సిన కొన్ని ఇతర లాజికల్ ఫైల్ ఉపయోగించేందుకు ఖాళీ చేస్తుంది. మూడు ఫైల్ పట్టికలలోని సంబంధిత పారామితులు కూడా తొలగించబడతాయి. ఫైల్‌ల సంఖ్య-ఓపెన్ కోసం RAM స్థానం 1 ద్వారా తగ్గించబడింది.

కంప్యూటర్ కోసం పవర్ ఆన్ చేసినప్పుడు, మదర్ బోర్డ్‌లో మైక్రోప్రాసెసర్ మరియు ఇతర ప్రధాన చిప్స్ (ఇంటిగ్రేటెడ్ సర్క్యూట్‌లు) కోసం హార్డ్‌వేర్ రీసెట్ ఉంటుంది. దీని తర్వాత మదర్‌బోర్డ్‌లోని కొన్ని చిప్‌లలో కొన్ని RAM మెమరీ స్థానాలు మరియు కొన్ని రిజిస్టర్‌లు ప్రారంభించబడతాయి. ప్రారంభ ప్రక్రియలో, ఆపరేటింగ్ సిస్టమ్ యొక్క సంస్కరణపై ఆధారపడి, పేజీ సున్నాలో $0098 చిరునామా యొక్క బైట్ మెమరీ స్థానం NFILES లేదా LDTND లేబుల్‌తో ఇవ్వబడుతుంది. కంప్యూటర్ పనిచేస్తున్నప్పుడు, 8 బిట్‌ల యొక్క ఈ వన్-బైట్ స్థానం తెరవబడిన లాజికల్ ఫైల్‌ల సంఖ్యను మరియు వరుసగా మూడు ఫైల్‌ల పట్టికల ప్రారంభ చిరునామా సూచికను కలిగి ఉంటుంది. మరో మాటలో చెప్పాలంటే, ఈ బైట్ ఫైల్స్-ఓపెన్ సంఖ్యను కలిగి ఉంది, ఇది లాజికల్ ఫైల్ మూసివేయబడినప్పుడు 1 ద్వారా తగ్గుతుంది. లాజికల్ ఫైల్ మూసివేయబడినప్పుడు, టెర్మినల్ (గమ్యం) పరికరం లేదా డిస్క్‌లోని వాస్తవ ఫైల్‌కు ప్రాప్యత ఇకపై సాధ్యం కాదు.

లాజికల్ ఫైల్‌ను మూసివేయడానికి, ప్రోగ్రామర్ లాజికల్ ఫైల్ నంబర్‌ను µP అక్యుమ్యులేటర్‌లో ఉంచాలి. ఫైల్‌ను తెరవడంలో ఉపయోగించే అదే లాజికల్ ఫైల్ నంబర్. నిర్దిష్ట ఫైల్‌ను మూసివేయడానికి CLOSE రొటీన్‌కి ఇది అవసరం. ఇతర OS ROM రొటీన్‌ల వలె, CLOSE రొటీన్ ఆర్గ్యుమెంట్ తీసుకోదు, అయితే అక్యుమ్యులేటర్ నుండి ఉపయోగించబడే విలువ కొంత వాదనగా ఉంటుంది. అసెంబ్లీ భాషా సూచన లైన్ కేవలం:

JSR క్లోజ్

కస్టమ్ లేదా ముందే నిర్వచించబడిన 6502 అసెంబ్లీ లాంగ్వేజ్ సబ్‌ట్రౌటిన్‌లు (రొటీన్‌లు) ఆర్గ్యుమెంట్‌లను తీసుకోవు. అయినప్పటికీ, మైక్రోప్రాసెసర్ రిజిస్టర్‌లలో సబ్‌ట్రౌటిన్ ఉపయోగించే విలువలను ఉంచడం ద్వారా వాదనలు అనధికారికంగా వస్తాయి.

CLRCHN రొటీన్
OS CLRCHN రొటీన్ $FFCC వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. CLRCHN అంటే క్లియర్ ఛానల్. లాజికల్ ఫైల్ మూసివేయబడినప్పుడు, దాని లాజికల్ ఫైల్ నంబర్, పరికర సంఖ్య మరియు సాధ్యమయ్యే ద్వితీయ చిరునామా యొక్క పారామితులు తొలగించబడతాయి. కాబట్టి, లాజికల్ ఫైల్ కోసం ఛానెల్ క్లియర్ చేయబడింది.

OS CLRCHN రొటీన్ తెరిచిన అన్ని ఛానెల్‌లను క్లియర్ చేస్తుంది మరియు డిఫాల్ట్ పరికర సంఖ్యలు మరియు ఇతర డిఫాల్ట్‌లను పునరుద్ధరిస్తుందని మాన్యువల్ చెబుతుంది. పరిధీయ పరికరం సంఖ్యను మార్చవచ్చని దీని అర్థం? బాగా, చాలా కాదు. ఆపరేటింగ్ సిస్టమ్ ప్రారంభ సమయంలో, కంప్యూటర్ పనిచేస్తున్నప్పుడు ప్రస్తుత ఇన్‌పుట్ పరికర సంఖ్యను ఉంచడానికి $0099 చిరునామా యొక్క బైట్ స్థానం DFLTI లేబుల్‌తో ఇవ్వబడుతుంది. కమోడోర్-64 ఒక సమయంలో ఒక పరిధీయతను మాత్రమే యాక్సెస్ చేయగలదు. ఆపరేటింగ్ సిస్టమ్ ప్రారంభ సమయంలో, కంప్యూటర్ పనిచేస్తున్నప్పుడు ప్రస్తుత అవుట్‌పుట్ పరికర సంఖ్యను ఉంచడానికి $009A చిరునామా యొక్క బైట్ స్థానం DFLTO లేబుల్‌తో ఇవ్వబడుతుంది.

CLRCHN సబ్‌ట్రౌటిన్‌ని పిలిచినప్పుడు, అది డిఫాల్ట్ ఇన్‌పుట్ పరికర సంఖ్య (కీబోర్డ్) అయిన DFLTI వేరియబుల్‌ను 0 ($00)కి సెట్ చేస్తుంది. ఇది డిఫాల్ట్ అవుట్‌పుట్ పరికర సంఖ్య (స్క్రీన్) అయిన DFLTO వేరియబుల్‌ను 3 ($03)కి సెట్ చేస్తుంది. ఇతర పరికర సంఖ్య వేరియబుల్స్ కూడా అదేవిధంగా రీసెట్ చేయబడతాయి. ఇన్‌పుట్/అవుట్‌పుట్ పరికరాలను సాధారణ (డిఫాల్ట్ విలువలు)కి రీసెట్ చేయడం (లేదా పునరుద్ధరించడం) యొక్క అర్థం.

CLRCHN రొటీన్‌ని పిలిచిన తర్వాత, తెరవబడిన లాజికల్ ఫైల్‌లు తెరిచి ఉంటాయి మరియు ఇప్పటికీ బైట్‌లను (డేటా) ప్రసారం చేయగలవని Commodore-64 మాన్యువల్ చెబుతోంది. అంటే CLRCHN రొటీన్ ఫైల్ టేబుల్‌లలోని సంబంధిత ఎంట్రీలను తొలగించదు. CLRCHN పేరు దాని అర్థం కోసం అస్పష్టంగా ఉంది.

5.6 పాత్రను స్క్రీన్‌కి పంపడం

స్క్రీన్‌పై అక్షరాలు మరియు గ్రాఫిక్‌ల ప్రదర్శనను నిర్వహించడానికి ప్రధాన ఇంటిగ్రేటెడ్ సర్క్యూట్ (IC)ని వీడియో ఇంటర్‌ఫేస్ కంట్రోలర్ (చిప్) అని పిలుస్తారు, ఇది కమోడోర్-64లో VICగా సంక్షిప్తీకరించబడింది (వాస్తవానికి VIC వెర్షన్ 2 కోసం VIC II). స్క్రీన్‌పైకి వెళ్లడానికి సమాచారం (విలువలు) కోసం, అది స్క్రీన్‌పైకి చేరే ముందు VIC II గుండా వెళ్లాలి.

స్క్రీన్ 25 అడ్డు వరుసలు మరియు 40 నిలువు వరుసల అక్షర కణాలను కలిగి ఉంటుంది. ఇది స్క్రీన్‌పై ప్రదర్శించబడే 40 x 25 = 1000 అక్షరాలను చేస్తుంది. VIC II అక్షరాల కోసం తదనుగుణంగా 1000 మెమరీ RAM వరుస బైట్ స్థానాలను చదువుతుంది. ఈ 1000 స్థానాలను కలిపి స్క్రీన్ మెమరీ అంటారు. ఈ 1000 స్థానాల్లోకి వెళ్లేవి క్యారెక్టర్ కోడ్‌లు. కమోడోర్-64 కోసం, క్యారెక్టర్ కోడ్‌లు ASCII కోడ్‌ల నుండి భిన్నంగా ఉంటాయి.

అక్షర కోడ్ అక్షర నమూనా కాదు. క్యారెక్టర్ ROM అని కూడా పిలుస్తారు. అక్షరం ROM అన్ని రకాల అక్షరాల నమూనాలను కలిగి ఉంటుంది, వాటిలో కొన్ని కీబోర్డ్‌లోని అక్షర నమూనాలకు అనుగుణంగా ఉంటాయి. ROM అనే అక్షరం స్క్రీన్ మెమరీకి భిన్నంగా ఉంటుంది. స్క్రీన్‌పై అక్షరాన్ని ప్రదర్శించాలనుకున్నప్పుడు, స్క్రీన్ మెమరీలోని 1000 స్థానాల మధ్య ఉన్న స్థానానికి అక్షర కోడ్ పంపబడుతుంది. అక్కడ నుండి, స్క్రీన్‌పై ప్రదర్శించబడే ROM అక్షరం నుండి సంబంధిత నమూనా ఎంచుకోబడుతుంది. అక్షరం కోడ్ నుండి అక్షరం ROMలో సరైన నమూనాను ఎంచుకోవడం VIC II (హార్డ్‌వేర్) ద్వారా చేయబడుతుంది.

$D000 మరియు $DFFF మధ్య ఉన్న అనేక మెమరీ స్థానాలు రెండు ప్రయోజనాలను కలిగి ఉన్నాయి: అవి స్క్రీన్ కాకుండా ఇతర ఇన్‌పుట్/అవుట్‌పుట్ ఆపరేషన్‌లను నిర్వహించడానికి లేదా స్క్రీన్‌కు క్యారెక్టర్ ROMగా ఉపయోగించబడతాయి. మెమరీ యొక్క రెండు బ్లాక్‌లు ఆందోళన చెందుతాయి. ఒకటి RAM మరియు మరొకటి ROM అక్షరం ROM. ఇన్‌పుట్/అవుట్‌పుట్ లేదా క్యారెక్టర్ ప్యాటర్న్‌లను (క్యారెక్టర్ ROM) నిర్వహించడానికి బ్యాంక్‌ల మార్పిడి సాఫ్ట్‌వేర్ ద్వారా చేయబడుతుంది (ROMలో OS యొక్క రొటీన్ $F000 నుండి $FFFF వరకు).

గమనిక : VIC $D000 మరియు $DFFF పరిధిలో ఉన్న మెమరీ స్థలం యొక్క చిరునామాలతో సంబోధించబడే రిజిస్టర్‌లను కలిగి ఉంది.

CHROUT దినచర్య
OS CHROUT రొటీన్ $FFD2 వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. ఈ రొటీన్, కాల్ చేసినప్పుడు, ప్రోగ్రామర్ µP అక్యుమ్యులేటర్‌లో ఉంచిన బైట్‌ను తీసుకుంటుంది మరియు కర్సర్ ఉన్న స్క్రీన్ వద్ద ప్రింట్ చేస్తుంది. 'E' అక్షరాన్ని ప్రింట్ చేయడానికి కోడ్ సెగ్మెంట్, ఉదాహరణకు:

LDA #$05
CHROUT

0516 అనేది “E” కోసం ASCII కోడ్ కాదు. కమోడోర్-64 స్క్రీన్ కోసం దాని స్వంత అక్షర కోడ్‌లను కలిగి ఉంది, ఇక్కడ $05 అంటే 'E'. VIC స్క్రీన్‌కి పంపే ముందు #$05 నంబర్ స్క్రీన్ మెమరీలో ఉంచబడుతుంది. ఛానెల్ సెటప్ చేయబడిన తర్వాత, లాజికల్ ఫైల్ తెరవబడిన తర్వాత మరియు అవుట్‌పుట్ కోసం CHKOUT రొటీన్ అని పిలువబడే తర్వాత ఈ రెండు కోడింగ్ లైన్‌లు రావాలి. పూర్తి కోడ్:

; ఛానెల్‌ని సెటప్ చేయండి
LDA #$40 ; తార్కిక ఫైల్ సంఖ్య
LDX #$03 ; స్క్రీన్ కోసం పరికర సంఖ్య $03
LDY #$FF ; ద్వితీయ చిరునామా లేదు
JSR SETLFS ; సరైన సెటప్ ఛానెల్
; స్క్రీన్‌కి పేరు అవసరం లేనందున SETNAM లేదు
;
; లాజికల్ ఫైల్‌ను తెరవండి
JSR ఓపెన్
; అవుట్‌పుట్ కోసం ఛానెల్‌ని సెట్ చేయండి
LDX #$40 ; తార్కిక ఫైల్ సంఖ్య
JSR CHKOUT
;
; స్క్రీన్‌కి చార్ అవుట్‌పుట్
LDA #$05
JSR CHROUT
; లాజికల్ ఫైల్‌ను మూసివేయండి
LDA #$40
JSR క్లోజ్

మరొక ప్రోగ్రామ్ అమలు చేయడానికి ముందు ఓపెనింగ్ మూసివేయబడాలి. కంప్యూటర్ వినియోగదారు ఆశించినప్పుడు కీబోర్డ్‌కు అక్షరాన్ని టైప్ చేస్తారని భావించండి. కింది ప్రోగ్రామ్ కీబోర్డ్ నుండి స్క్రీన్‌కు అక్షరాన్ని ముద్రిస్తుంది:

; ఛానెల్‌ని సెటప్ చేయండి
LDA #$40 ; తార్కిక ఫైల్ సంఖ్య
LDX #$03 ; స్క్రీన్ కోసం పరికర సంఖ్య $03
LDY #$FF ; ద్వితీయ చిరునామా లేదు
JSR SETLFS ; సరైన సెటప్ ఛానెల్
; స్క్రీన్‌కి పేరు అవసరం లేనందున SETNAM లేదు
;
; లాజికల్ ఫైల్‌ను తెరవండి
JSR ఓపెన్
; అవుట్‌పుట్ కోసం ఛానెల్‌ని సెట్ చేయండి
LDX #$40 ; తార్కిక ఫైల్ సంఖ్య
JSR CHKOUT
;
; కీబోర్డ్ నుండి చార్ ఇన్‌పుట్ చేయండి
వేచి ఉండండి JSR GETIN ; కీబోర్డ్ క్యూ ఖాళీగా ఉంటే A లో $00 ఉంచుతుంది
CMP #$00 ; $00 Aకి వెళ్లినట్లయితే, Z అనేది పోలికతో 1 అవుతుంది
వేచి ఉండండి; 0 అక్యుమ్యులేటర్‌కి వెళితే మళ్లీ క్యూ నుండి పొందండి
BNE PRNSCRN; Z 0 అయితే PRNSCRNకి వెళ్లండి, ఎందుకంటే A ఇకపై $00ని కలిగి ఉండదు
; స్క్రీన్‌కి చార్ అవుట్‌పుట్
PRNSCRN JSR CHROUT ; A లోని అక్షరాన్ని స్క్రీన్‌కి పంపండి
; లాజికల్ ఫైల్‌ను మూసివేయండి
LDA #$40
JSR క్లోజ్

గమనిక : WAIT మరియు PRNSCRN అనేవి చిరునామాలను గుర్తించే లేబుల్‌లు. µP అక్యుమ్యులేటర్‌లో వచ్చే కీబోర్డ్ నుండి బైట్ అనేది ASCII కోడ్. కమోడోర్-64 ద్వారా స్క్రీన్‌కు పంపబడే సంబంధిత కోడ్ భిన్నంగా ఉండాలి. సరళత కోసం మునుపటి ప్రోగ్రామ్‌లో ఇది పరిగణనలోకి తీసుకోబడలేదు.

5.7 డిస్క్ డ్రైవ్ కోసం బైట్‌లను పంపడం మరియు స్వీకరించడం

కమోడోర్-64 యొక్క సిస్టమ్ యూనిట్ (మదర్‌బోర్డ్)లో VIA #1 మరియు CIA #2 అని పిలువబడే రెండు కాంప్లెక్స్ ఇంటర్‌ఫేస్ అడాప్టర్‌లు ఉన్నాయి. ప్రతి CIAకి రెండు సమాంతర పోర్ట్‌లు ఉన్నాయి, వీటిని పోర్ట్ A మరియు పోర్ట్ B అని పిలుస్తారు. Commodre-64 సిస్టమ్ యూనిట్ వెనుక నిలువు ఉపరితలం వద్ద ఒక బాహ్య పోర్ట్ ఉంది, దీనిని సీరియల్ పోర్ట్ అని పిలుస్తారు. ఈ పోర్ట్‌లో 6 పిన్‌లు ఉన్నాయి, వాటిలో ఒకటి డేటా కోసం. డేటా సిస్టమ్ యూనిట్‌లో ఒక్కో బిట్‌ని సిరీస్‌లో ప్రవేశిస్తుంది లేదా వదిలివేస్తుంది.

CIA #2 యొక్క అంతర్గత పోర్ట్ A నుండి ఎనిమిది సమాంతర బిట్‌లు, ఉదాహరణకు, CIAలోని షిఫ్ట్ రిజిస్టర్ ద్వారా సీరియల్ డేటాగా మార్చబడిన తర్వాత బాహ్య సీరియల్ పోర్ట్ ద్వారా సిస్టమ్ యూనిట్ నుండి బయటకు వెళ్లవచ్చు. CIAలోని షిఫ్ట్ రిజిస్టర్ ద్వారా సమాంతర డేటాగా మార్చబడిన తర్వాత బాహ్య సీరియల్ పోర్ట్ నుండి ఎనిమిది-బిట్ సీరియల్ డేటా CIA #2 యొక్క అంతర్గత పోర్ట్ Aలోకి వెళ్లవచ్చు.

కమోడోర్-64 సిస్టమ్ యూనిట్ (బేస్ యూనిట్) డిస్క్‌తో బాహ్య డిస్క్ డ్రైవ్‌ను ఉపయోగిస్తుంది. డైసీ చైన్ పద్ధతిలో ప్రింటర్‌ను ఈ డిస్క్ డ్రైవ్‌కు కనెక్ట్ చేయవచ్చు (సిరీస్‌లో పరికరాలను స్ట్రింగ్‌గా కనెక్ట్ చేయడం). డిస్క్ డ్రైవ్ కోసం డేటా కేబుల్ కమోడోర్-64 సిస్టమ్ యూనిట్ యొక్క బాహ్య సీరియల్ పోర్ట్‌కు కనెక్ట్ చేయబడింది. డైసీ-చైన్డ్ ప్రింటర్ కూడా అదే సీరియల్ పోర్ట్‌కు కనెక్ట్ చేయబడిందని దీని అర్థం. ఈ రెండు డివైజ్‌లు రెండు వేర్వేరు పరికర సంఖ్యల ద్వారా గుర్తించబడతాయి (సాధారణంగా 8 మరియు 4, వరుసగా).

డిస్క్ డ్రైవ్ కోసం డేటాను పంపడం లేదా స్వీకరించడం గతంలో వివరించిన అదే విధానాన్ని అనుసరిస్తుంది. అంటే:

  • SETNAM రొటీన్‌ని ఉపయోగించి అసలు డిస్క్ ఫైల్‌తో సమానమైన లాజికల్ ఫైల్ (సంఖ్య) పేరును సెట్ చేస్తోంది.
  • OPEN రొటీన్‌ని ఉపయోగించి లాజికల్ ఫైల్‌ను తెరవడం.
  • ఇది CHKOUT లేదా CHKIN రొటీన్‌ని ఉపయోగించి ఇన్‌పుట్ లేదా అవుట్‌పుట్ కాదా అని నిర్ణయించడం.
  • STA మరియు/లేదా LDA సూచనలను ఉపయోగించి డేటాను పంపడం లేదా స్వీకరించడం.
  • క్లోజ్ రొటీన్‌ని ఉపయోగించి లాజికల్ ఫైల్‌ను మూసివేయడం.

లాజికల్ ఫైల్ తప్పనిసరిగా మూసివేయబడాలి. లాజికల్ ఫైల్‌ను మూసివేయడం వలన నిర్దిష్ట ఛానెల్‌ని సమర్థవంతంగా మూసివేస్తుంది. డిస్క్ డ్రైవ్ కోసం ఛానెల్‌ని సెటప్ చేసినప్పుడు, లాజికల్ ఫైల్ నంబర్ ప్రోగ్రామర్ ద్వారా నిర్ణయించబడుతుంది. ఇది $00 మరియు $FF (కలిసి) మధ్య ఉన్న సంఖ్య. ఇది ఏ ఇతర పరికరం (లేదా అసలు ఫైల్) కోసం ఇప్పటికే ఎంపిక చేయబడిన సంఖ్య కాకూడదు. ఒక డిస్క్ డ్రైవ్ మాత్రమే ఉంటే పరికరం సంఖ్య 8. ద్వితీయ చిరునామా (సంఖ్య) డిస్క్ డ్రైవ్ యొక్క మాన్యువల్ నుండి పొందబడింది. కింది ప్రోగ్రామ్ 2ని ఉపయోగిస్తుంది. ప్రోగ్రామ్ 'E' (ASCII) అనే అక్షరాన్ని డిస్క్‌లోని 'mydoc.doc' అనే ఫైల్‌కి వ్రాస్తుంది. ఈ పేరు $C101 మెమరీ చిరునామాతో ప్రారంభమవుతుందని భావించబడుతుంది. కాబట్టి, SETNAM రొటీన్ అని పిలవబడే ముందు $01 యొక్క తక్కువ బైట్ X రిజిస్టర్‌లో ఉండాలి మరియు $C1 యొక్క అధిక బైట్ Y రిజిస్టర్‌లో ఉండాలి. SETNAM రొటీన్ కాల్ చేయడానికి ముందు A రిజిస్టర్‌లో $09 నంబర్ కూడా ఉండాలి.

; ఛానెల్‌ని సెటప్ చేయండి
LDA #$40 ; తార్కిక ఫైల్ సంఖ్య
LDX #$08 ; మొదటి డిస్క్ డ్రైవ్ కోసం పరికర సంఖ్య
LDY #$02 ; ద్వితీయ చిరునామా
JSR SETLFS ; సరైన సెటప్ ఛానెల్
;
; డిస్క్ డ్రైవ్‌లోని ఫైల్‌కు పేరు అవసరం (ఇప్పటికే మెమరీలో ఉంది)
LDA #$09
LDX #$01
LDY#$C1
JSR సెట్నం
; లాజికల్ ఫైల్‌ను తెరవండి
JSR ఓపెన్
; అవుట్‌పుట్ కోసం ఛానెల్‌ని సెట్ చేయండి
LDX #$40 ; తార్కిక ఫైల్ సంఖ్య
JSR CHKOUT ;రచన కోసం
;
; డిస్క్‌కి చార్ అవుట్‌పుట్
LDA #$45
JSR CHROUT
; లాజికల్ ఫైల్‌ను మూసివేయండి
LDA #$40
JSR క్లోజ్

µP Y రిజిస్టర్‌లో డిస్క్ నుండి బైట్‌ను చదవడానికి, మునుపటి ప్రోగ్రామ్‌ను క్రింది మార్పులతో పునరావృతం చేయండి: బదులుగా “JSR CHKOUT ; వ్రాయడం కోసం”, “JSR CHKIN ; చదవడం కోసం.' ' కోసం కోడ్ సెగ్మెంట్ను భర్తీ చేయండి; కింది వాటితో డిస్క్‌కి చార్ అవుట్‌పుట్ చేయండి:

; డిస్క్ నుండి చార్ ఇన్‌పుట్ చేయండి
JSR క్రిస్

OS CHRIN రొటీన్ $FFCF వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. ఈ రొటీన్, కాల్ చేసినప్పుడు, ఇప్పటికే ఇన్‌పుట్ ఛానెల్‌గా సెటప్ చేయబడిన ఛానెల్ నుండి బైట్‌ను పొందుతుంది మరియు దానిని µP A రిజిస్టర్‌లో ఉంచుతుంది. CHRIN స్థానంలో GETIN ROM OS రొటీన్ కూడా ఉపయోగించవచ్చు.

ప్రింటర్‌కి బైట్‌ని పంపుతోంది
ప్రింటర్‌కు బైట్‌ను పంపడం డిస్క్‌లోని ఫైల్‌కి బైట్‌ను పంపే విధంగానే జరుగుతుంది.

5.8 OS సేవ్ రొటీన్

OS SAVE రొటీన్ $FFD8 వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. ROMలోని OS SAVE రొటీన్ మెమరీలోని ఒక విభాగాన్ని డిస్క్‌లో ఫైల్‌గా (పేరుతో) సేవ్ చేస్తుంది (డంప్ చేస్తుంది). మెమరీలోని సెక్షన్ ప్రారంభ చిరునామా తెలియాల్సి ఉంది. విభాగం ముగింపు చిరునామా కూడా తెలియాల్సి ఉంది. ప్రారంభ చిరునామా యొక్క దిగువ బైట్ $002B చిరునామాలో RAMలోని పేజీ సున్నాలో ఉంచబడుతుంది. ప్రారంభ చిరునామా యొక్క అధిక బైట్ తదుపరి బైట్ మెమరీ స్థానంలో $002C చిరునామాలో ఉంచబడుతుంది. పేజీ సున్నాలో, TXTTAB లేబుల్ ఈ రెండు చిరునామాలను సూచిస్తుంది, అయితే TXTTAB అంటే $002B చిరునామా. ముగింపు చిరునామా యొక్క దిగువ బైట్ µP X రిజిస్టర్‌లో ఉంచబడింది. µP Y రిజిస్టర్‌లో ముగింపు చిరునామా ప్లస్ 1 యొక్క అధిక బైట్ ఉంచబడింది. µP A రిజిస్టర్ TXTTAB ($002B) కోసం $2B విలువను తీసుకుంటుంది. దానితో, SAVE రొటీన్‌ని కింది వాటితో కాల్ చేయవచ్చు:

JSR సేవ్

సేవ్ చేయవలసిన మెమరీ విభాగం అసెంబ్లీ భాషా ప్రోగ్రామ్ లేదా పత్రం కావచ్చు. పత్రం యొక్క ఉదాహరణ ఒక లేఖ లేదా వ్యాసం కావచ్చు. సేవ్ రొటీన్‌ని ఉపయోగించడానికి, ఈ క్రింది విధానాన్ని అనుసరించాలి:

  • SETLFS రొటీన్‌ని ఉపయోగించి ఛానెల్‌ని సెటప్ చేయండి.
  • SETNAM రొటీన్‌ని ఉపయోగించి అసలు డిస్క్ ఫైల్‌తో సమానమైన లాజికల్ ఫైల్ (సంఖ్య) పేరును సెట్ చేయండి.
  • OPEN రొటీన్‌ని ఉపయోగించి లాజికల్ ఫైల్‌ను తెరవండి.
  • CHKOUTని ఉపయోగించి అవుట్‌పుట్ కోసం ఫైల్‌గా చేయండి.
  • ఫైల్‌ను సేవ్ చేయడానికి కోడ్ ఇక్కడకు వెళుతుంది, ఇది 'JSR SAVE'తో ముగుస్తుంది.
  • CLOSE రొటీన్‌ని ఉపయోగించి లాజికల్ ఫైల్‌ను మూసివేయండి.

క్రింది ప్రోగ్రామ్ $C101 నుండి $C200 వరకు మెమరీ స్థానాల నుండి ప్రారంభమయ్యే ఫైల్‌ను సేవ్ చేస్తుంది:

; ఛానెల్‌ని సెటప్ చేయండి
LDA #$40 ; తార్కిక ఫైల్ సంఖ్య
LDX #$08 ; మొదటి డిస్క్ డ్రైవ్ కోసం పరికర సంఖ్య
LDY #$02 ; ద్వితీయ చిరునామా
JSR SETLFS ; సరైన సెటప్ ఛానెల్
;
; డిస్క్ డ్రైవ్‌లోని ఫైల్ పేరు (ఇప్పటికే $C301 వద్ద మెమరీలో ఉంది)
LDA #$09 ; ఫైల్ పేరు పొడవు
LDX #$01
LDY#$C3
JSR సెట్నం
; లాజికల్ ఫైల్‌ను తెరవండి
JSR ఓపెన్
; అవుట్‌పుట్ కోసం ఛానెల్‌ని సెట్ చేయండి
LDX #$40 ; తార్కిక ఫైల్ సంఖ్య
JSR CHKOUT ; రాయడం కోసం
;
; డిస్క్‌కి అవుట్‌పుట్ ఫైల్
LDA #$01
STA $2B ; TXTTAB
LDA #$C1
STA $2C
LDX #$00
LDY #$C2
LDA #$2B
JSR సేవ్
; లాజికల్ ఫైల్‌ను మూసివేయండి
LDA #$40
JSR క్లోజ్

ఇది మెమరీలోని మరొక విభాగాన్ని (ప్రోగ్రామ్ విభాగం కాదు) డిస్క్‌లో (కమోడోర్-64 కోసం డిస్కెట్) సేవ్ చేసే ప్రోగ్రామ్ అని గమనించండి.

5.9 OS లోడ్ రొటీన్

OS లోడ్ రొటీన్ $FFD5 వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. మెమరీలోని ఒక విభాగం (పెద్ద ప్రాంతం) డిస్క్‌లో సేవ్ చేయబడినప్పుడు, అది మెమరీలో విభాగం యొక్క ప్రారంభ చిరునామాను కలిగి ఉన్న హెడర్‌తో సేవ్ చేయబడుతుంది. OS లోడ్ సబ్‌ట్రౌటిన్ ఫైల్ యొక్క బైట్‌లను మెమరీలోకి లోడ్ చేస్తుంది. ఈ లోడ్ ఆపరేషన్‌తో, అక్యుమ్యులేటర్ విలువ 010 ($00) ఉండాలి. డిస్క్‌లోని ఫైల్ హెడర్‌లో ప్రారంభ చిరునామాను చదవడానికి మరియు ఆ చిరునామా నుండి ఫైల్ బైట్‌లను RAMలో ఉంచడానికి లోడ్ ఆపరేషన్ కోసం, ఛానెల్‌కు ద్వితీయ చిరునామా 1 లేదా 2గా ఉండాలి (క్రింది ప్రోగ్రామ్ 2ని ఉపయోగిస్తుంది). ఈ రొటీన్ లోడ్ చేయబడిన అత్యధిక RAM లొకేషన్‌లో అడ్రస్ ప్లస్ 1ని అందిస్తుంది. దీనర్థం RAM ప్లస్ 1లోని ఫైల్ యొక్క చివరి చిరునామా యొక్క తక్కువ బైట్ µP X రిజిస్టర్‌లో ఉంచబడుతుంది మరియు RAM ప్లస్ 1లోని ఫైల్ యొక్క చివరి చిరునామా యొక్క అధిక బైట్ µP Y రిజిస్టర్‌లో ఉంచబడుతుంది.

లోడ్ చేయడం విఫలమైతే, µP A రిజిస్టర్ దోష సంఖ్యను కలిగి ఉంటుంది (బహుశా 4, 5, 8 లేదా 9). మైక్రోప్రాసెసర్ స్టేటస్ రిజిస్టర్ యొక్క C ఫ్లాగ్ కూడా సెట్ చేయబడింది (తయారు 1). లోడ్ చేయడం విజయవంతమైతే, A రిజిస్టర్ యొక్క చివరి విలువ ముఖ్యమైనది కాదు.

ఇప్పుడు, ఈ ఆన్‌లైన్ కెరీర్ కోర్సు యొక్క మునుపటి అధ్యాయంలో, అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్ యొక్క మొదటి సూచన ప్రోగ్రామ్ ప్రారంభమైన RAMలోని చిరునామాలో ఉంది. అలా ఉండాల్సిన అవసరం లేదు. అంటే ప్రోగ్రామ్ యొక్క మొదటి సూచన RAMలో ప్రోగ్రామ్ ప్రారంభంలో ఉండవలసిన అవసరం లేదు. ప్రోగ్రామ్ కోసం ప్రారంభ సూచన RAMలోని ఫైల్‌లో ఎక్కడైనా ఉండవచ్చు. ప్రోగ్రామర్‌కు అసెంబ్లీ భాషా సూచనలను STARTతో లేబుల్ చేయమని సూచించబడింది. దానితో, ప్రోగ్రామ్ లోడ్ అయిన తర్వాత, అది క్రింది అసెంబ్లీ భాషా సూచనలతో మళ్లీ అమలు చేయబడుతుంది (అమలు చేయబడుతుంది):

JSR START

'JSR START' అనేది అసెంబ్లీ భాషా ప్రోగ్రామ్‌లో ఉంది, అది అమలు చేయవలసిన ప్రోగ్రామ్‌ను లోడ్ చేస్తుంది. మరొక అసెంబ్లీ భాషా ఫైల్‌ను లోడ్ చేసి, లోడ్ చేయబడిన ఫైల్‌ను అమలు చేసే అసెంబ్లీ భాష కింది కోడ్ విధానాన్ని కలిగి ఉంటుంది:

  • SETLFS రొటీన్‌ని ఉపయోగించి ఛానెల్‌ని సెట్ చేయండి.
  • SETNAM రొటీన్‌ని ఉపయోగించి అసలు డిస్క్ ఫైల్‌తో సమానమైన లాజికల్ ఫైల్ (సంఖ్య) పేరును సెట్ చేయండి.
  • OPEN రొటీన్‌ని ఉపయోగించి లాజికల్ ఫైల్‌ను తెరవండి.
  • CHKINని ఉపయోగించి ఇన్‌పుట్ కోసం ఫైల్‌గా చేయండి.
  • ఫైల్‌ను లోడ్ చేయడానికి కోడ్ ఇక్కడకు వెళ్లి “JSR LOAD”తో ముగుస్తుంది.
  • CLOSE రొటీన్‌ని ఉపయోగించి లాజికల్ ఫైల్‌ను మూసివేయండి.

కింది ప్రోగ్రామ్ డిస్క్ నుండి ఫైల్‌ను లోడ్ చేస్తుంది మరియు దానిని అమలు చేస్తుంది:

; ఛానెల్‌ని సెటప్ చేయండి
LDA #$40 ; తార్కిక ఫైల్ సంఖ్య
LDX #$08 ; మొదటి డిస్క్ డ్రైవ్ కోసం పరికర సంఖ్య
LDY #$02 ; ద్వితీయ చిరునామా
JSR SETLFS ; సరైన సెటప్ ఛానెల్
;
; డిస్క్ డ్రైవ్‌లోని ఫైల్ పేరు (ఇప్పటికే $C301 వద్ద మెమరీలో ఉంది)
LDA #$09 ; ఫైల్ పేరు పొడవు
LDX #$01
LDY#$C3
JSR సెట్నం
; లాజికల్ ఫైల్‌ను తెరవండి
JSR ఓపెన్
; ఇన్‌పుట్ కోసం ఛానెల్‌ని సెట్ చేయండి
LDX #$40 ; తార్కిక ఫైల్ సంఖ్య
JSR CHKIN; చదవడం కోసం
;
; డిస్క్ నుండి ఇన్‌పుట్ ఫైల్
LDA #$00
JSR లోడ్
; లాజికల్ ఫైల్‌ను మూసివేయండి
LDA #$40
JSR క్లోజ్
; లోడ్ చేయబడిన ప్రోగ్రామ్‌ను ప్రారంభించండి
JSR START

5.10 మోడెమ్ మరియు RS-232 ప్రమాణం

మోడెమ్ అనేది ఒక పరికరం (పరిధీయ), ఇది కంప్యూటర్ నుండి బిట్‌లను టెలిఫోన్ లైన్ ద్వారా ప్రసారం చేయడానికి సంబంధిత ఎలక్ట్రికల్ ఆడియో సిగ్నల్‌లుగా మారుస్తుంది. స్వీకరించే ముగింపులో, స్వీకరించే కంప్యూటర్ ముందు మోడెమ్ ఉంది. ఈ రెండవ మోడెమ్ ఎలక్ట్రికల్ ఆడియో సిగ్నల్‌లను స్వీకరించే కంప్యూటర్‌కు బిట్‌లుగా మారుస్తుంది.

ఒక మోడెమ్ బాహ్య పోర్ట్ వద్ద (కంప్యూటర్ యొక్క నిలువు ఉపరితలం వద్ద) కంప్యూటర్‌కు కనెక్ట్ చేయబడాలి. RS-232 ప్రమాణం ఒక నిర్దిష్ట రకం కనెక్టర్‌ను సూచిస్తుంది, ఇది మోడెమ్‌ను కంప్యూటర్‌కు కనెక్ట్ చేస్తుంది (గతంలో). మరో మాటలో చెప్పాలంటే, గతంలో చాలా కంప్యూటర్‌లు RS-232 కనెక్టర్ లేదా RS-232 అనుకూల కనెక్టర్ అయిన బాహ్య పోర్ట్‌ను కలిగి ఉన్నాయి.

కమోడోర్-64 సిస్టమ్ యూనిట్ (కంప్యూటర్) దాని వెనుక నిలువు ఉపరితలం వద్ద బాహ్య పోర్ట్‌ను కలిగి ఉంది, దీనిని వినియోగదారు పోర్ట్ అని పిలుస్తారు. ఈ వినియోగదారు పోర్ట్ RS-232 అనుకూలమైనది. మోడెమ్ పరికరాన్ని అక్కడ కనెక్ట్ చేయవచ్చు. Commodore-64 ఈ యూజర్ పోర్ట్ ద్వారా మోడెమ్‌తో కమ్యూనికేట్ చేస్తుంది. Commodore-64 కోసం ROM ఆపరేటింగ్ సిస్టమ్‌లో RS-232 రొటీన్‌లు అనే మోడెమ్‌తో కమ్యూనికేట్ చేయడానికి సబ్‌ట్రౌటిన్‌లు ఉన్నాయి. ఈ రొటీన్‌లకు జంప్ టేబుల్‌లో ఎంట్రీలు ఉన్నాయి.

బాడ్ రేటు
కంప్యూటర్ నుండి ఎనిమిది-బిట్ బైట్ మోడెమ్‌కు పంపబడే ముందు ఎనిమిది బిట్‌ల శ్రేణిగా మార్చబడుతుంది. మోడెమ్ నుండి కంప్యూటర్ వరకు రివర్స్ చేయబడుతుంది. బాడ్ రేట్ అనేది సిరీస్‌లో సెకనుకు ప్రసారం చేయబడిన బిట్‌ల సంఖ్య.

బాటమ్ ఆఫ్ మెమరీ
'బాటమ్ ఆఫ్ మెమరీ' అనే పదం $0000 చిరునామా యొక్క మెమరీ బైట్ స్థానాన్ని సూచించదు. ఇది వినియోగదారు అతని/ఆమె డేటా మరియు ప్రోగ్రామ్‌లను ఉంచడం ప్రారంభించగల అతి తక్కువ RAM స్థానాన్ని సూచిస్తుంది. డిఫాల్ట్‌గా, ఇది $0800. $0800 మరియు $BFFF మధ్య చాలా స్థానాలను బేసిక్ కంప్యూటర్ భాష మరియు దాని ప్రోగ్రామర్లు (యూజర్లు) ఉపయోగిస్తున్నారని మునుపటి చర్చ నుండి గుర్తు చేసుకోండి. అసెంబ్లీ భాషా ప్రోగ్రామ్‌లు మరియు డేటా కోసం కేవలం $C000 నుండి $CFFF చిరునామా స్థానాలు మాత్రమే ఉపయోగించబడతాయి; ఇది 64 Kbytes మెమరీలో 4Kbytes.

మెమరీలో అగ్రస్థానం
ఆ రోజుల్లో, క్లయింట్లు కమోడోర్-64 కంప్యూటర్లను కొనుగోలు చేసినప్పుడు, కొంతమందికి అన్ని మెమరీ స్థానాలు రాలేదు. ఇటువంటి కంప్యూటర్లు దాని ఆపరేటింగ్ సిస్టమ్‌తో $E000 నుండి $FFFF వరకు ROMను కలిగి ఉన్నాయి. వారు $0000 నుండి పరిమితి వరకు RAM కలిగి ఉన్నారు, ఇది $E000 పక్కన $DFFF కాదు. పరిమితి $DFFF కంటే తక్కువగా ఉంది మరియు ఆ పరిమితిని 'టాప్ ఆఫ్ మెమరీ' అంటారు. కాబట్టి, టాప్-ఆఫ్-మెమరీ $FFFF స్థానాన్ని సూచించదు.

RS-232 కమ్యూనికేషన్ కోసం కమోడోర్-64 బఫర్‌లు
బఫర్‌ని ప్రసారం చేస్తోంది
RS-232 ట్రాన్స్‌మిషన్ (అవుట్‌పుట్) కోసం బఫర్ టాప్-ఆఫ్-మెమరీ నుండి 256 బైట్‌లను క్రిందికి తీసుకుంటుంది. ఈ ట్రాన్స్మిటింగ్ బఫర్ కోసం పాయింటర్ ROBUFగా లేబుల్ చేయబడింది. ఈ పాయింటర్ పేజీ సున్నాలో $00F9 చిరునామాలతో తర్వాత $00FA ఉంటుంది. ROBUF నిజానికి $00F9ని గుర్తిస్తుంది. కాబట్టి, బఫర్ ప్రారంభ చిరునామా $BE00 అయితే, $00 అయిన $BE00 యొక్క దిగువ బైట్ $00F9 స్థానంలో ఉంటుంది మరియు $BE00 యొక్క అధిక బైట్ $BE, $00FAలో ఉంటుంది. స్థానం.

బఫర్‌ని అందుకుంటున్నారు
RS-232 బైట్‌లను (ఇన్‌పుట్) స్వీకరించడానికి బఫర్ ట్రాన్స్‌మిటింగ్ బఫర్ దిగువ నుండి 256 బైట్‌లను తీసుకుంటుంది. ఈ స్వీకరించే బఫర్ కోసం పాయింటర్ RIBUFగా లేబుల్ చేయబడింది. ఈ పాయింటర్ పేజీ సున్నాలో $00F7 చిరునామాలతో తర్వాత $00F8లో ఉంది. RIBUF నిజానికి $00F7ని గుర్తిస్తుంది. కాబట్టి, బఫర్ ప్రారంభ చిరునామా $BF00 అయితే, $00 అయిన $BF00 యొక్క దిగువ బైట్ $00F7 స్థానంలో ఉంటుంది మరియు $BF00 యొక్క అధిక బైట్ $BF, $00F8లో ఉంటుంది. స్థానం. కాబట్టి, టాప్-ఆఫ్-మెమొరీ నుండి 512 బైట్‌లు మొత్తం RS-232 RAM బఫర్‌గా ఉపయోగించబడుతుంది.

RS-232 ఛానెల్
మోడెమ్ (బాహ్య) వినియోగదారు పోర్ట్‌కు కనెక్ట్ చేయబడినప్పుడు, మోడెమ్‌కు కమ్యూనికేషన్ కేవలం RS-232 కమ్యూనికేషన్ మాత్రమే. పూర్తి RS-232 ఛానెల్‌ని కలిగి ఉండే విధానం మునుపటి చర్చలో దాదాపు అదే విధంగా ఉంటుంది, కానీ ఒక ముఖ్యమైన తేడాతో: ఫైల్ పేరు ఒక కోడ్ మరియు మెమరీలో స్ట్రింగ్ కాదు. కోడ్ $0610 మంచి ఎంపిక. దీని అర్థం 300 బిట్స్/సెకన్ యొక్క బాడ్ రేటు మరియు కొన్ని ఇతర సాంకేతిక పారామితులు. అలాగే, ద్వితీయ చిరునామా లేదు. పరికరం సంఖ్య 2 అని గమనించండి. పూర్తి RS-232 ఛానెల్‌ని సెటప్ చేసే విధానం:

  • SETLFS రొటీన్‌ని ఉపయోగించి ఛానెల్‌ని సెట్ చేస్తోంది.
  • లాజికల్ ఫైల్ పేరును సెట్ చేస్తోంది, $0610.
  • OPEN రొటీన్‌ని ఉపయోగించి లాజికల్ ఫైల్‌ను తెరవడం.
  • దీన్ని CHKOUT ఉపయోగించి అవుట్‌పుట్ కోసం ఫైల్‌గా చేయడం లేదా CHKINని ఉపయోగించి ఇన్‌పుట్ కోసం ఫైల్ చేయడం.
  • CHROUTతో సింగిల్ బైట్‌లను పంపడం లేదా GETINతో సింగిల్ బైట్‌లను అందుకోవడం.
  • క్లోజ్ రొటీన్‌ని ఉపయోగించి లాజికల్ ఫైల్‌ను మూసివేయడం.

OS GETIN రొటీన్ $FFE4 వద్ద OS ROM జంప్ టేబుల్‌కి జంపింగ్ (JSR) ద్వారా యాక్సెస్ చేయబడుతుంది. ఈ రొటీన్, కాల్ చేసినప్పుడు, రిసీవర్ బఫర్‌లోకి పంపబడిన బైట్‌ని తీసుకుంటుంది మరియు దానిని µP అక్యుమ్యులేటర్‌లో ఉంచుతుంది (తిరిగి)

కింది ప్రోగ్రామ్ వినియోగదారు RS-232 అనుకూల పోర్ట్‌కు కనెక్ట్ చేయబడిన మోడెమ్‌కు బైట్ “E” (ASCII)ని పంపుతుంది:

; ఛానెల్‌ని సెటప్ చేయండి
LDA #$40 ; తార్కిక ఫైల్ సంఖ్య
LDX #$02 ; RS-232 కోసం పరికర సంఖ్య
LDY #$FF ; ద్వితీయ చిరునామా లేదు
JSR SETLFS ; సరైన సెటప్ ఛానెల్
;
; RS-232 పేరు ఒక కోడ్ ఉదా. $0610
LDA #$02 ; కోడ్ పొడవు 2 బైట్లు
LDX #$10
LDY#$06
JSR సెట్నం
;
; లాజికల్ ఫైల్‌ను తెరవండి
JSR ఓపెన్
; అవుట్‌పుట్ కోసం ఛానెల్‌ని సెట్ చేయండి
LDX #$40 ; తార్కిక ఫైల్ సంఖ్య
JSR CHKOUT
;
; RS-232కి అవుట్‌పుట్ చార్ ఉదా. మోడెమ్
LDA #$45
JSR CHROUT
; లాజికల్ ఫైల్‌ను మూసివేయండి
LDA #$40
JSR క్లోజ్

బైట్‌ను స్వీకరించడానికి, కోడ్ చాలా సారూప్యంగా ఉంటుంది, తప్ప “JSR CHKOUT” స్థానంలో “JSR CHKIN” ఉంటుంది మరియు:

LDA #$45
JSR CHROUT

'JSR GETIN' ద్వారా భర్తీ చేయబడుతుంది, ఫలితంగా A రిజిస్టర్‌లో ఉంచబడుతుంది.

బైట్‌లను నిరంతరం పంపడం లేదా స్వీకరించడం వరుసగా కోడ్ సెగ్మెంట్‌ని పంపడం లేదా స్వీకరించడం కోసం లూప్ ద్వారా జరుగుతుంది.

కమోడోర్‌తో ఇన్‌పుట్ మరియు అవుట్‌పుట్ కీబోర్డ్‌కు మినహా చాలా సందర్భాలలో ఒకే విధంగా ఉంటాయని గమనించండి, ఇక్కడ కొన్ని రొటీన్‌లను ప్రోగ్రామర్ పిలవరు, కానీ అవి ఆపరేటింగ్ సిస్టమ్ ద్వారా పిలువబడతాయి.

5.11 కౌంటింగ్ మరియు టైమింగ్

కౌంట్ డౌన్ క్రమాన్ని పరిగణించండి:

2, 1, 0

ఇది 2 నుండి 0 వరకు లెక్కించబడుతుంది. ఇప్పుడు, పునరావృతమయ్యే గణన డౌన్ క్రమాన్ని పరిగణించండి:

2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0

ఇదే క్రమంలో పునరావృతమయ్యే కౌంట్ డౌన్ ఇది. క్రమం నాలుగు సార్లు పునరావృతమవుతుంది. నాలుగు సార్లు అంటే టైమింగ్ 4. ఒక సీక్వెన్స్‌లో లెక్కింపు జరుగుతుంది. అదే క్రమాన్ని పునరావృతం చేయడం టైమింగ్.

కమోడోర్-64 యొక్క సిస్టమ్ యూనిట్‌లో రెండు కాంప్లెక్స్ ఇంటర్‌ఫేస్ ఎడాప్టర్‌లు ఉన్నాయి. ప్రతి CIAకి టైమర్ A (TA) మరియు టైమర్ B (TB) అనే రెండు కౌంటర్/టైమర్ సర్క్యూట్‌లు ఉంటాయి. కౌంటింగ్ సర్క్యూట్ టైమింగ్ సర్క్యూట్ నుండి భిన్నంగా లేదు. కమోడోర్-64లోని కౌంటర్ లేదా టైమర్ ఇదే విషయాన్ని సూచిస్తుంది. వాస్తవానికి, వాటిలో ఏదో ఒకటి తప్పనిసరిగా ఒక 16-బిట్ రిజిస్టర్‌ను సూచిస్తుంది, ఇది సిస్టమ్ క్లాక్ పల్స్‌లో ఎల్లప్పుడూ 0 వరకు లెక్కించబడుతుంది. 16-బిట్ రిజిస్టర్‌లో వేర్వేరు విలువలను సెట్ చేయవచ్చు. పెద్ద విలువ, సున్నాకి లెక్కించడానికి ఎక్కువ సమయం పడుతుంది. టైమర్‌లలో ఒకటి సున్నా దాటిన ప్రతిసారీ, ది IRQ అంతరాయ సిగ్నల్ మైక్రోప్రాసెసర్‌కు పంపబడుతుంది. లెక్కింపు సున్నా కంటే తగ్గినప్పుడు, దానిని అండర్ ఫ్లో అంటారు.

టైమర్ సర్క్యూట్ ఎలా ప్రోగ్రామ్ చేయబడిందనే దానిపై ఆధారపడి, టైమర్ వన్-టైమ్ మోడ్‌లో లేదా నిరంతర మోడ్‌లో రన్ అవుతుంది. మునుపటి దృష్టాంతంతో, వన్-టైమ్ మోడ్ అంటే '2, 1, 0 చేయండి' మరియు గడియారం పల్స్ కొనసాగుతున్నప్పుడు ఆపివేయండి. నిరంతర మోడ్ '2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, మొదలైనవి' వంటిది. ఇది గడియారం పల్స్‌తో కొనసాగుతుంది. అంటే అది సున్నా దాటినప్పుడు, సూచనలేవీ ఇవ్వకపోతే, కౌంట్‌డౌన్ క్రమం పునరావృతమవుతుంది. అతిపెద్ద సంఖ్య సాధారణంగా 2 కంటే చాలా పెద్దది.

CIA #1 యొక్క టైమర్ A (TA) ఉత్పత్తి చేస్తుంది IRQ కీబోర్డ్‌కు సేవ చేయడానికి క్రమ వ్యవధిలో (వ్యవధులు). వాస్తవానికి, ఇది డిఫాల్ట్‌గా సెకనుకు ప్రతి 1/60. IRQ ప్రతి 1/60 సెకనుకు మైక్రోప్రాసెసర్‌కి పంపబడుతుంది. అది ఎప్పుడు మాత్రమే IRQ కీబోర్డ్ క్యూ (బఫర్) నుండి ప్రోగ్రామ్ కీ విలువను చదవగలదని పంపబడింది. మైక్రోప్రాసెసర్‌కి ఒక పిన్ మాత్రమే ఉందని గుర్తుంచుకోండి IRQ సిగ్నల్. మైక్రోప్రాసెసర్‌కి కూడా ఒక పిన్ మాత్రమే ఉంది NMI సిగ్నల్. మైక్రోప్రాసెసర్‌కు ¯NMI సిగ్నల్ ఎల్లప్పుడూ CIA #2 నుండి వస్తుంది.

16-బిట్ టైమర్ రిజిస్టర్‌లో రెండు మెమరీ చిరునామాలు ఉన్నాయి: ఒకటి తక్కువ బైట్‌కు మరియు ఒకటి ఎక్కువ బైట్‌కు. ప్రతి CIAకి రెండు టైమర్ సర్క్యూట్‌లు ఉంటాయి. రెండు CIAలు ఒకేలా ఉన్నాయి. CIA #1 కోసం, రెండు టైమర్‌ల చిరునామాలు: TA కోసం DC04 మరియు DC05 మరియు TB కోసం DC06 మరియు DC07. CIA #2 కోసం, రెండు టైమర్‌ల చిరునామాలు: TA కోసం DD04 మరియు DD05 మరియు TB కోసం DD06 మరియు DD07.

కౌంట్ డౌన్ కోసం CIA #2 యొక్క TA టైమర్‌కు 25510 నంబర్ పంపబడుతుందని భావించండి. 25510 = 00000000111111112 పదహారు బిట్‌లలో ఉంది. 00000000111111112 = $000FFF హెక్సాడెసిమల్‌లో ఉంది. ఈ సందర్భంలో, $DD04 చిరునామాలో $FF రిజిస్టర్‌కి పంపబడుతుంది మరియు $DD05 చిరునామాలో $00 రిజిస్టర్‌కి పంపబడుతుంది - కొద్దిగా అంతిమత్వం. కింది కోడ్ సెగ్మెంట్ నంబర్‌ను రిజిస్టర్‌కి పంపుతుంది:

LDA #$FF
STA $DD04
LDA #$00
రాష్ట్రం $DD05

CIAలోని రిజిస్టర్‌లు RAM చిరునామాలను కలిగి ఉన్నప్పటికీ, అవి భౌతికంగా CIAలో ఉంటాయి మరియు CIA అనేది RAM లేదా ROM నుండి ప్రత్యేక IC.

అంతే కాదు! టైమర్‌కు కౌంట్ డౌన్ కోసం నంబర్ ఇవ్వబడినప్పుడు, మునుపటి కోడ్‌తో పాటు, కౌంట్ డౌన్ ప్రారంభించబడదు. టైమర్ కోసం సంబంధిత నియంత్రణ రిజిస్టర్‌కి ఎనిమిది-బిట్ బైట్ పంపబడినప్పుడు కౌంట్ డౌన్ ప్రారంభమవుతుంది. నియంత్రణ రిజిస్టర్ కోసం ఈ బైట్ యొక్క మొదటి బిట్ కౌంటింగ్ డౌన్ ప్రారంభించాలా వద్దా అని సూచిస్తుంది. ఈ మొదటి బిట్‌కు 0 విలువ అంటే కౌంట్ డౌన్ చేయడం ఆపివేయడం, అయితే 1 విలువ అంటే కౌంట్ డౌన్‌ను ప్రారంభించడం. అలాగే, బైట్ కౌంట్ డౌన్ వన్ షాట్ (వన్-టైమ్) మోడ్‌లో ఉందా లేదా ఫ్రీ రన్నింగ్ మోడ్‌లో (నిరంతర మోడ్) ఉందా అని సూచించాలి. టైమర్ రిజిస్టర్ విలువ సున్నా అయినప్పుడు వన్-షాట్ మోడ్ డౌన్ కౌంట్ అవుతుంది మరియు ఆగిపోతుంది. ఉచిత రన్నింగ్ మోడ్‌తో, కౌంట్ డౌన్ 0కి చేరుకున్న తర్వాత పునరావృతమవుతుంది. కంట్రోల్ రిజిస్టర్‌కి పంపబడే బైట్ యొక్క నాల్గవ (సూచిక 3) బిట్ మోడ్‌ను సూచిస్తుంది: 0 అంటే ఫ్రీ రన్నింగ్ మోడ్ మరియు 1 అంటే వన్-షాట్ మోడ్.

ఒక షాట్ మోడ్‌లో లెక్కించడం ప్రారంభించడానికి తగిన సంఖ్య హెక్సాడెసిమల్‌లో 000010012 = $09. ఉచిత రన్నింగ్ మోడ్‌లో లెక్కింపు ప్రారంభించడానికి తగిన సంఖ్య హెక్సాడెసిమల్‌లో 000000012 = $01. ప్రతి టైమర్ రిజిస్టర్‌కు దాని స్వంత నియంత్రణ రిజిస్టర్ ఉంటుంది. CIA #1లో, టైమర్ A కోసం కంట్రోల్ రిజిస్టర్‌లో DC0E16 యొక్క RAM చిరునామా ఉంటుంది మరియు టైమర్ B కోసం కంట్రోల్ రిజిస్టర్‌లో DC0F16 యొక్క RAM చిరునామా ఉంటుంది. CIA #2లో, టైమర్ A కోసం కంట్రోల్ రిజిస్టర్‌లో DD0E16 యొక్క RAM చిరునామా ఉంటుంది మరియు టైమర్ B కోసం కంట్రోల్ రిజిస్టర్‌లో DD0F16 యొక్క RAM చిరునామా ఉంటుంది. CIA #2 యొక్క TAలోని పదహారు-బిట్ సంఖ్యను వన్-షాట్ మోడ్‌లో లెక్కించడం ప్రారంభించడానికి, కింది కోడ్‌ని ఉపయోగించండి:

LDA #$09
STA $DD0E

CIA #2 యొక్క TAలోని పదహారు-బిట్ సంఖ్యను ఉచితంగా రన్నింగ్ మోడ్‌లో లెక్కించడం ప్రారంభించడానికి, కింది కోడ్‌ని ఉపయోగించండి:

LDA #$01
STA $DD0E

5.12 ది IRQ మరియు NMI అభ్యర్థనలు

6502 మైక్రోప్రాసెసర్ ఉంది IRQ మరియు NMI పంక్తులు (పిన్స్). CIA #1 మరియు CIA #2 రెండూ ఒక్కొక్కటి ఉన్నాయి IRQ మైక్రోప్రాసెసర్ కోసం పిన్. ది IRQ CIA #2 యొక్క పిన్ దీనికి కనెక్ట్ చేయబడింది NMI µP యొక్క పిన్. ది IRQ CIA #1 యొక్క పిన్ దీనికి కనెక్ట్ చేయబడింది IRQ µP యొక్క పిన్. మైక్రోప్రాసెసర్‌ను కనెక్ట్ చేసే రెండు అంతరాయ పంక్తులు మాత్రమే. కాబట్టి, ది IRQ CIA #2 యొక్క పిన్ NMI మూలం మరియు ¯NMI లైన్‌గా కూడా చూడవచ్చు.

CIA #1 ఉత్పత్తి చేయడానికి ఐదు తక్షణ మూలాలను కలిగి ఉంది IRQ µP కోసం సంకేతం. CIA #2 నిర్మాణంలో CIA #1 వలె ఉంటుంది. కాబట్టి, CIA #2 ఈసారి అంతరాయ సిగ్నల్‌ను ఉత్పత్తి చేసే ఐదు తక్షణ మూలాలను కలిగి ఉంది. NMI సిగ్నల్. µP అందుకున్నప్పుడు గుర్తుంచుకోండి NMI సిగ్నల్, అది నిర్వహిస్తుంటే IRQ అభ్యర్థన, అది సస్పెండ్ చేస్తుంది మరియు నిర్వహిస్తుంది NMI అభ్యర్థన. ఇది నిర్వహణను పూర్తి చేసినప్పుడు NMI అభ్యర్థన, ఇది నిర్వహణను తిరిగి ప్రారంభిస్తుంది IRQ అభ్యర్థన.

CIA #1 సాధారణంగా కీబోర్డ్ మరియు జాయ్‌స్టిక్ వంటి గేమ్ పరికరానికి బాహ్యంగా కనెక్ట్ చేయబడింది. కీబోర్డ్ పోర్ట్ B కంటే CIA #1 యొక్క పోర్ట్ Aని ఎక్కువగా ఉపయోగిస్తుంది. గేమ్ పరికరం దాని పోర్ట్ A కంటే CIA #1 పోర్ట్ Bని ఎక్కువగా ఉపయోగిస్తుంది. CIA #2 సాధారణంగా డిస్క్ డ్రైవ్‌కు బాహ్యంగా కనెక్ట్ చేయబడింది (డైసీ ప్రింటర్‌కి చైన్ చేయబడింది) మరియు మోడెమ్. డిస్క్ డ్రైవ్ దాని పోర్ట్ B కంటే CIA #2 (బాహ్య సీరియల్ పోర్ట్ ద్వారా) పోర్ట్ Aని ఎక్కువగా ఉపయోగిస్తుంది. మోడెమ్ (RS-232) దాని పోర్ట్ A కంటే ఎక్కువ CIA #2 పోర్ట్ Bని ఉపయోగిస్తుంది.

వీటన్నింటితో పాటు, సిస్టమ్ యూనిట్‌కి ఎలా కారణమవుతుంది IRQ లేదా NMI అంతరాయం కలిగించాలా? CIA #1 మరియు CIA #2 అంతరాయానికి ఐదు తక్షణ మూలాలను కలిగి ఉన్నాయి. µPకి అంతరాయం సిగ్నల్ అయితే NMI , మూలం CIA #2 నుండి తక్షణ ఐదు మూలాలలో ఒకటి. µPకి అంతరాయం సిగ్నల్ అయితే IRQ , మూలం CIA #1 నుండి తక్షణ ఐదు మూలాలలో ఒకటి.

తదుపరి ప్రశ్న ఏమిటంటే, 'సిస్టమ్ యూనిట్ ప్రతి CIA యొక్క ఐదు తక్షణ మూలాల మధ్య ఎలా విభేదిస్తుంది?' ప్రతి CIAకి ఎనిమిది-బిట్ రిజిస్టర్ ఉంటుంది, దీనిని ఇంటరప్ట్ కంట్రోల్ రిజిస్టర్ (ICR) అంటారు. ICR CIA యొక్క రెండు పోర్టులకు సేవలు అందిస్తుంది. బిట్ 0 నుండి ప్రారంభమయ్యే అంతరాయ నియంత్రణ రిజిస్టర్ యొక్క ఎనిమిది బిట్‌ల అర్థాలను క్రింది పట్టిక చూపిస్తుంది:

పట్టిక 5.13
అంతరాయ నియంత్రణ రిజిస్టర్
బిట్ ఇండెక్స్ అర్థం
0 టైమర్ A యొక్క అండర్‌ఫ్లో ద్వారా సెట్ (1 తయారు చేయబడింది).
1 టైమర్ B యొక్క అండర్ ఫ్లో ద్వారా సెట్ చేయబడింది
2 టైమ్ ఆఫ్ డే గడియారం అలారంతో సమానంగా ఉన్నప్పుడు సెట్ చేయండి
3 సీరియల్ పోర్ట్ నిండినప్పుడు సెట్ చేయండి
4 బాహ్య పరికరం ద్వారా సెట్ చేయబడింది
5 ఉపయోగించబడలేదు (0 తయారు చేయబడింది)
6 ఉపయోగించబడలేదు (0 తయారు చేయబడింది)
7 మొదటి ఐదు బిట్‌లలో ఏదైనా సెట్ చేసినప్పుడు సెట్ చేయండి

పట్టిక నుండి చూడగలిగినట్లుగా, ప్రతి తక్షణ మూలాలు మొదటి ఐదు బిట్‌లలో ఒకటి ద్వారా సూచించబడతాయి. కాబట్టి, µP వద్ద అంతరాయ సిగ్నల్ వచ్చినప్పుడు, అంతరాయానికి సంబంధించిన ఖచ్చితమైన మూలాన్ని తెలుసుకోవడానికి అంతరాయ నియంత్రణ రిజిస్టర్‌లోని కంటెంట్‌ను చదవడానికి కోడ్‌ని అమలు చేయాలి. CIA #1 యొక్క ICR కోసం RAM చిరునామా DC0D16. CIA #2 యొక్క ICR కోసం RAM చిరునామా DD0D16. CIA #1 యొక్క ICR యొక్క కంటెంట్‌ను µP అక్యుమ్యులేటర్‌కి చదవడానికి (తిరిగి) కింది సూచనలను టైప్ చేయండి:

LDA$DC0D

CIA #2 యొక్క ICR యొక్క కంటెంట్‌ను µP అక్యుమ్యులేటర్‌కి చదవడానికి (తిరిగి) కింది సూచనలను టైప్ చేయండి:

LDA $DD0D

5.13 ఇంటరప్ట్ డ్రైవెన్ బ్యాక్‌గ్రౌండ్ ప్రోగ్రామ్

కీబోర్డ్ సాధారణంగా మైక్రోప్రాసెసర్‌కి ప్రతి 1/60 సెకనుకు అంతరాయం కలిగిస్తుంది. ప్రోగ్రామ్ రన్ అవుతుందని ఊహించండి మరియు అది దిగువ కోడ్ విభాగాలతో కొనసాగడానికి ముందు కీబోర్డ్ నుండి కీ కోసం వేచి ఉండే స్థితికి చేరుకుంటుంది. కీబోర్డ్ నుండి కీని నొక్కినట్లయితే, ప్రోగ్రామ్ ఒక చిన్న లూప్ మాత్రమే చేస్తుంది, కీ కోసం వేచి ఉంది. ప్రోగ్రామ్ రన్ అవుతుందని మరియు కీబోర్డ్ అంతరాయాన్ని జారీ చేసిన తర్వాత కీబోర్డ్ నుండి కీని ఆశించినట్లు ఊహించుకోండి. ఆ సమయంలో, మొత్తం కంప్యూటర్ పరోక్షంగా ఆగిపోతుంది మరియు వెయిట్-లూప్ లూపింగ్ కోసం తప్ప మరేమీ చేయడం లేదు. తదుపరి కీబోర్డ్ అంతరాయానికి సంబంధించిన తదుపరి సంచికకు ముందు కీబోర్డ్ కీ నొక్కినట్లు ఊహించండి. అంటే కంప్యూటర్ సెకనులో అరవై వంతు వరకు ఏమీ చేయలేదు! కమోడోర్-64 రోజులలో కూడా కంప్యూటర్ ఏమీ చేయలేకపోవడానికి ఇది చాలా కాలం. ఆ సమయంలో (వ్యవధి) కంప్యూటర్ ఇంకేదైనా చేసి ఉండవచ్చు. ప్రోగ్రామ్‌లో ఇలాంటి వ్యవధి చాలా ఉన్నాయి.

అటువంటి 'నిష్క్రియ' వ్యవధిలో పనిచేయడానికి రెండవ ప్రోగ్రామ్ వ్రాయబడుతుంది. అటువంటి ప్రోగ్రామ్ ప్రధాన (లేదా మొదటి) ప్రోగ్రామ్ నేపథ్యంలో పనిచేస్తుందని చెప్పబడింది. కీబోర్డ్ నుండి కీ ఆశించబడినప్పుడు సవరించిన BRK అంతరాయ నిర్వహణలో బలవంతం చేయడం దీన్ని చేయడానికి సులభమైన మార్గం.

BRK సూచనల కోసం పాయింటర్
$0316 మరియు $0317 చిరునామాల యొక్క RAM వరుస స్థానాల్లో వాస్తవ BRK సూచనల రొటీన్ కోసం పాయింటర్ (వెక్టార్) ఉంటుంది. ROMలోని ఆపరేటింగ్ సిస్టమ్ ద్వారా కంప్యూటర్‌ను ఆన్ చేసినప్పుడు డిఫాల్ట్ పాయింటర్ అక్కడ ఉంచబడుతుంది. ఈ డిఫాల్ట్ పాయింటర్ ఇప్పటికీ OS ROMలోని డిఫాల్ట్ BRK సూచనల హ్యాండ్లర్‌ను సూచించే చిరునామా. పాయింటర్ 16-బిట్ చిరునామా. పాయింటర్ యొక్క దిగువ బైట్ $0306 చిరునామా యొక్క బైట్ స్థానంలో ఉంచబడుతుంది మరియు పాయింటర్ యొక్క అధిక బైట్ $0317 బైట్ స్థానంలో ఉంచబడుతుంది.

సిస్టమ్ 'నిష్క్రియ'గా ఉన్నప్పుడు, రెండవ ప్రోగ్రామ్ యొక్క కొన్ని కోడ్‌లు సిస్టమ్ ద్వారా అమలు చేయబడే విధంగా రెండవ ప్రోగ్రామ్‌ను వ్రాయవచ్చు. అంటే రెండవ ప్రోగ్రామ్ సబ్‌ట్రౌటిన్‌లతో రూపొందించబడాలి. కీబోర్డ్ నుండి కీ కోసం వేచి ఉన్న సిస్టమ్ 'నిష్క్రియ' అయినప్పుడు, రెండవ ప్రోగ్రామ్ కోసం తదుపరి సబ్‌ట్రౌటిన్ అమలు చేయబడుతుంది. సిస్టమ్ యూనిట్ యొక్క ఆపరేషన్‌తో పోలిస్తే కంప్యూటర్‌తో మానవ పరస్పర చర్య నెమ్మదిగా ఉంటుంది.

ఈ సమస్యను పరిష్కరించడం చాలా సులభం: కంప్యూటర్ కీబోర్డ్ నుండి కీ కోసం వేచి ఉండాల్సిన ప్రతిసారీ, కోడ్‌లో BRK సూచనను చొప్పించండి మరియు పాయింటర్‌ను $0316 (మరియు $0317) వద్ద రెండవ సబ్‌ట్రౌటిన్ యొక్క పాయింటర్‌తో భర్తీ చేయండి ( కస్టమ్) ప్రోగ్రామ్. ఆ విధంగా, రెండు ప్రోగ్రామ్‌లు ఒంటరిగా నడుస్తున్న ప్రధాన ప్రోగ్రామ్ కంటే ఎక్కువ కాలం లేని వ్యవధిలో రన్ అవుతాయి.

5.14 అసెంబ్లీ మరియు సంకలనం

అసెంబ్లర్ అన్ని లేబుల్‌లను చిరునామాలతో భర్తీ చేస్తాడు. అసెంబ్లీ భాషా ప్రోగ్రామ్ సాధారణంగా నిర్దిష్ట చిరునామాలో ప్రారంభించడానికి వ్రాయబడుతుంది. అసెంబ్లర్ నుండి వచ్చే ఫలితం (అసెంబ్లింగ్ తర్వాత) బైనరీలో ఉన్న ప్రతిదానితో 'ఆబ్జెక్ట్ కోడ్' అని పిలువబడుతుంది. ఫైల్ ప్రోగ్రామ్ మరియు పత్రం కానట్లయితే ఆ ఫలితం ఎక్జిక్యూటబుల్ ఫైల్. పత్రం అమలు చేయబడదు.

ఒక అప్లికేషన్ ఒకటి కంటే ఎక్కువ (అసెంబ్లీ లాంగ్వేజ్) ప్రోగ్రామ్‌లను కలిగి ఉంటుంది. సాధారణంగా ఒక ప్రధాన కార్యక్రమం ఉంది. ఇక్కడ పరిస్థితిని అంతరాయంతో నడిచే నేపథ్య ప్రోగ్రామ్‌ల పరిస్థితితో గందరగోళం చెందకూడదు. ఇక్కడ అన్ని ప్రోగ్రామ్‌లు ముందుభాగం ప్రోగ్రామ్‌లు, కానీ మొదటి లేదా ప్రధాన ప్రోగ్రామ్ ఉంది.

ఒకటి కంటే ఎక్కువ ముందుభాగం ప్రోగ్రామ్‌లు ఉన్నప్పుడు అసెంబ్లర్‌కు బదులుగా కంపైలర్ అవసరం. కంపైలర్ ప్రతి ప్రోగ్రామ్‌ను ఆబ్జెక్ట్ కోడ్‌కు సమీకరించింది. అయితే, ఒక సమస్య ఉంటుంది: ప్రోగ్రామ్‌లు వేర్వేరు వ్యక్తులచే వ్రాయబడినందున కొన్ని కోడ్ విభాగాలు అతివ్యాప్తి చెందుతాయి. కంపైలర్ ద్వారా పరిష్కారం మెమరీ స్థలంలో మొదటిది మినహా అన్ని అతివ్యాప్తి చెందుతున్న ప్రోగ్రామ్‌లను మార్చడం, తద్వారా ప్రోగ్రామ్‌లు అతివ్యాప్తి చెందవు. ఇప్పుడు, వేరియబుల్స్ నిల్వ విషయానికి వస్తే, కొన్ని వేరియబుల్ చిరునామాలు ఇప్పటికీ అతివ్యాప్తి చెందుతాయి. అతివ్యాప్తి చెందుతున్న చిరునామాలను కొత్త చిరునామాలతో (మొదటి ప్రోగ్రామ్ మినహా) భర్తీ చేయడం ఇక్కడ పరిష్కారం, తద్వారా అవి ఇకపై అతివ్యాప్తి చెందవు. ఈ విధంగా, వివిధ ప్రోగ్రామ్‌లు మెమరీలోని వివిధ భాగాలకు (ప్రాంతాలు) సరిపోతాయి.

అంతటితో ఒక ప్రోగ్రామ్‌లో ఒక రొటీన్‌కి మరో ప్రోగ్రామ్‌లో రొటీన్ కాల్ చేయడం సాధ్యమవుతుంది. కాబట్టి, కంపైలర్ లింకింగ్ చేస్తుంది. లింక్ చేయడం అనేది ఒక ప్రోగ్రామ్‌లో సబ్‌ట్రౌటిన్ యొక్క ప్రారంభ చిరునామాను కలిగి ఉండటం మరియు దానిని మరొక ప్రోగ్రామ్‌లో కాల్ చేయడం; రెండూ అప్లికేషన్‌లో భాగం. దీని కోసం రెండు ప్రోగ్రామ్‌లు ఒకే చిరునామాను ఉపయోగించాలి. అంతిమ ఫలితం బైనరీ (బిట్స్)లో ఉన్న ప్రతిదానితో ఒక పెద్ద ఆబ్జెక్ట్ కోడ్.

5.15 ప్రోగ్రామ్‌ను సేవ్ చేయడం, లోడ్ చేయడం మరియు అమలు చేయడం

అసెంబ్లీ భాష సాధారణంగా కొన్ని ఎడిటర్ ప్రోగ్రామ్‌లో వ్రాయబడుతుంది (ఇది అసెంబ్లర్ ప్రోగ్రామ్‌తో అందించబడుతుంది). ఎడిటర్ ప్రోగ్రామ్ మెమరీ (RAM)లో ప్రోగ్రామ్ ఎక్కడ ప్రారంభమవుతుందో మరియు ముగుస్తుందో సూచిస్తుంది. Commodore-64 యొక్క OS ROM యొక్క Kernal SAVE రొటీన్ మెమరీలో డిస్క్‌లో ప్రోగ్రామ్‌ను సేవ్ చేయగలదు. ఇది డిస్క్‌కి దాని సూచన కాల్‌ని కలిగి ఉండే మెమరీ యొక్క విభాగాన్ని (బ్లాక్) డంప్ చేస్తుంది. సేవ్ చేయబడుతున్న ప్రోగ్రామ్ నుండి వేరు చేయబడి, సేవ్ చేయడానికి కాలింగ్ సూచనలను కలిగి ఉండటం మంచిది, తద్వారా ప్రోగ్రామ్ డిస్క్ నుండి మెమరీలోకి లోడ్ చేయబడినప్పుడు, అది అమలు చేయబడినప్పుడు అది మళ్లీ సేవ్ చేయబడదు. డిస్క్ నుండి అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్‌ను లోడ్ చేయడం వేరే రకమైన సవాలు ఎందుకంటే ప్రోగ్రామ్ స్వయంగా లోడ్ చేయబడదు.

ప్రోగ్రామ్ డిస్క్ నుండి ర్యామ్‌లో ప్రారంభమయ్యే మరియు ముగిసే చోటికి లోడ్ కాదు. ఆ రోజుల్లో కమోడోర్-64 సాధారణంగా బేసిక్ భాషా ప్రోగ్రామ్‌లను అమలు చేయడానికి బేసిక్ ఇంటర్‌ప్రెటర్‌తో సరఫరా చేయబడేది. యంత్రం (కంప్యూటర్) ఆన్ చేయబడినప్పుడు, అది కమాండ్ ప్రాంప్ట్‌తో స్థిరపడుతుంది: సిద్ధంగా ఉంది. అక్కడ నుండి, టైప్ చేసిన తర్వాత 'Enter' కీని నొక్కడం ద్వారా BASIC ఆదేశాలు లేదా సూచనలను టైప్ చేయవచ్చు. ఫైల్‌ను లోడ్ చేయడానికి బేసిక్ కమాండ్ (సూచన):

లోడ్ “ఫైల్ పేరు”,8,1

కమాండ్ LOAD అనే BASIC రిజర్వ్ చేయబడిన పదంతో ప్రారంభమవుతుంది. దీని తర్వాత స్పేస్ ఉంటుంది మరియు డబుల్ కోట్‌లలో ఫైల్ పేరు ఉంటుంది. పరికర సంఖ్య 8 అనుసరించబడుతుంది, దీనికి ముందు కామా ఉంటుంది. డిస్క్ యొక్క ద్వితీయ చిరునామా 1 అనుసరించబడుతుంది, ముందు కామా ఉంటుంది. అటువంటి ఫైల్‌తో, అసెంబ్లీ భాషా ప్రోగ్రామ్ యొక్క ప్రారంభ చిరునామా డిస్క్‌లోని ఫైల్ యొక్క హెడర్‌లో ఉంటుంది. BASIC ప్రోగ్రామ్‌ను లోడ్ చేయడం పూర్తయినప్పుడు, ప్రోగ్రామ్‌లోని చివరి RAM చిరునామా ప్లస్ 1 తిరిగి ఇవ్వబడుతుంది. ఇక్కడ 'తిరిగి' అనే పదం అంటే చివరి చిరునామా ప్లస్ 1 యొక్క దిగువ బైట్ µP X రిజిస్టర్‌లో ఉంచబడుతుంది మరియు చివరి చిరునామా ప్లస్ 1 యొక్క అధిక బైట్ µP Y రిజిస్టర్‌లో ఉంచబడుతుంది.

ప్రోగ్రామ్‌ను లోడ్ చేసిన తర్వాత, దాన్ని అమలు చేయాలి (అమలు చేయాలి). ప్రోగ్రామ్ యొక్క వినియోగదారు మెమరీలో అమలు చేయడానికి ప్రారంభ చిరునామాను తెలుసుకోవాలి. మళ్ళీ, ఇక్కడ మరొక బేసిక్ ప్రోగ్రామ్ అవసరం. ఇది SYS ఆదేశం. SYS ఆదేశాన్ని అమలు చేసిన తర్వాత, అసెంబ్లీ భాషా ప్రోగ్రామ్ రన్ అవుతుంది (మరియు ఆగిపోతుంది). నడుస్తున్నప్పుడు, కీబోర్డ్ నుండి ఏదైనా ఇన్‌పుట్ అవసరమైతే, అసెంబ్లీ భాష ప్రోగ్రామ్ దానిని వినియోగదారుకు సూచించాలి. వినియోగదారు కీబోర్డ్‌లోని డేటాను టైప్ చేసి, “Enter” కీని నొక్కిన తర్వాత, బేసిక్ ఇంటర్‌ప్రెటర్ జోక్యం లేకుండా కీబోర్డ్ ఎంట్రీని ఉపయోగించి అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్ రన్ అవుతూ ఉంటుంది.

అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్ కోసం ఎగ్జిక్యూషన్ (రన్నింగ్) RAM అడ్రస్ ప్రారంభం C12316 అని ఊహిస్తే, C123 SYS కమాండ్‌తో ఉపయోగించే ముందు బేస్ టెన్‌కి మార్చబడుతుంది. C12316ని బేస్ టెన్‌కి మార్చడం క్రింది విధంగా ఉంది:

కాబట్టి, బేసిక్ SYS కమాండ్:

SYS 49443

5.16 కమోడోర్-64 కోసం బూటింగ్

Commodore-64 కోసం బూటింగ్ రెండు దశలను కలిగి ఉంటుంది: హార్డ్‌వేర్ రీసెట్ దశ మరియు ఆపరేటింగ్ సిస్టమ్ ప్రారంభ దశ. ఆపరేటింగ్ సిస్టమ్ అనేది ROMలోని కెర్నల్ (మరియు డిస్క్‌లో కాదు). రీసెట్ లైన్ ఉంది (వాస్తవానికి RES ) అది 6502 µP వద్ద ఉన్న పిన్‌కి మరియు CIA 1, CIA 2 మరియు VIC II వంటి అన్ని ప్రత్యేక నౌకల్లో అదే పిన్ పేరుకు కనెక్ట్ చేస్తుంది. రీసెట్ దశలో, ఈ పంక్తి కారణంగా, µP మరియు ప్రత్యేక చిప్‌లలోని అన్ని రిజిస్టర్‌లు 0కి రీసెట్ చేయబడతాయి (ప్రతి బిట్‌కు సున్నా చేయబడింది). తరువాత, మైక్రోప్రాసెసర్ హార్డ్‌వేర్ ద్వారా, స్టాక్ పాయింటర్ మరియు ప్రాసెసర్ స్టేటస్ రిజిస్టర్ మైక్రోప్రాసెసర్‌లో వాటి ప్రారంభ విలువలతో ఇవ్వబడ్డాయి. ప్రోగ్రామ్ కౌంటర్ $FFFC మరియు $FFFD స్థానాల్లో విలువ (చిరునామా)తో ఇవ్వబడుతుంది. ప్రోగ్రామ్ కౌంటర్ తదుపరి సూచనల చిరునామాను కలిగి ఉందని గుర్తుంచుకోండి. ఇక్కడ ఉంచబడిన కంటెంట్ (చిరునామా) సాఫ్ట్‌వేర్ ప్రారంభాన్ని ప్రారంభించే సబ్‌ట్రౌటిన్‌కు సంబంధించినది. ఇప్పటివరకు ప్రతిదీ మైక్రోప్రాసెసర్ హార్డ్‌వేర్ ద్వారా జరుగుతుంది. ఈ దశలో మొత్తం మెమరీని తాకలేదు. తదుపరి దశ ప్రారంభ దశ ప్రారంభమవుతుంది.

ROM OSలో కొన్ని రొటీన్‌ల ద్వారా ప్రారంభించడం జరుగుతుంది. ప్రారంభించడం అంటే ప్రత్యేక చిప్‌లలోని కొన్ని రిజిస్టర్‌లకు ప్రారంభ లేదా డిఫాల్ట్ విలువలను ఇవ్వడం. ప్రత్యేక చిప్‌లలోని కొన్ని రిజిస్టర్‌లకు ప్రారంభ లేదా డిఫాల్ట్ విలువలను ఇవ్వడం ద్వారా ప్రారంభించడం ప్రారంభమవుతుంది. IRQ , ఉదాహరణకు, ప్రతి 1/60 సెకను జారీ చేయడం ప్రారంభించాలి. కాబట్టి, CIA #1లో దాని సంబంధిత టైమర్ దాని డిఫాల్ట్ విలువకు సెట్ చేయబడాలి.

తరువాత, Kernal RAM పరీక్షను నిర్వహిస్తుంది. ఇది ప్రతి లొకేషన్‌కు బైట్‌ని పంపడం ద్వారా మరియు దాన్ని తిరిగి చదవడం ద్వారా పరీక్షిస్తుంది. ఏదైనా తేడా ఉంటే, కనీసం ఆ స్థలం కూడా చెడ్డది. కెర్నల్ మెమొరీ పైభాగాన్ని మరియు మెమొరీ దిగువ భాగాన్ని కూడా గుర్తిస్తుంది మరియు పేజీ 2లో సంబంధిత పాయింటర్‌లను సెట్ చేస్తుంది. మెమొరీ పైభాగం $DFFF అయితే, $FF $0283 స్థానంలో మరియు $DF $0284 బైట్ లొకేషన్‌లో ఉంచబడుతుంది. $0283 మరియు $0284 రెండూ HIRAM లేబుల్‌ను కలిగి ఉన్నాయి. మెమొరీ దిగువన $0800 ఉంటే, $00 $0281 స్థానంలో మరియు $08 $0282 స్థానంలో ఉంచబడుతుంది. $0281 మరియు $0282 రెండూ LORAM లేబుల్‌ని కలిగి ఉన్నాయి. RAM పరీక్ష వాస్తవానికి $0300 నుండి మెమరీ ఎగువన (RAM) ప్రారంభమవుతుంది.

చివరగా, ఇన్‌పుట్/అవుట్‌పుట్ వెక్టర్స్ (పాయింటర్లు) వాటి డిఫాల్ట్ విలువలకు సెట్ చేయబడతాయి. RAM పరీక్ష వాస్తవానికి $0300 నుండి మెమరీ ఎగువన (RAM) ప్రారంభమవుతుంది. దీని అర్థం పేజీ 0, పేజీ 1 మరియు పేజీ 2 ప్రారంభించబడ్డాయి. పేజీ 0, ప్రత్యేకించి, చాలా OS ROM పాయింటర్‌లను కలిగి ఉంది మరియు పేజీ 2లో చాలా బేసిక్ పాయింటర్‌లు ఉన్నాయి. ఈ పాయింటర్‌లను వేరియబుల్స్‌గా సూచిస్తారు. పేజీ 1 స్టాక్ అని గుర్తుంచుకోండి. పాయింటర్‌లకు పేర్లు (లేబుల్‌లు) ఉన్నందున వాటిని వేరియబుల్స్‌గా సూచిస్తారు. ఈ దశలో, స్క్రీన్ (మానిటర్) కోసం స్క్రీన్ మెమరీ క్లియర్ చేయబడుతుంది. దీనర్థం స్పేస్ కోసం $20 కోడ్‌ను (ఇది ASCII $20 వలె ఉంటుంది) 1000 RAM స్క్రీన్ స్థానాలకు పంపడం. చివరగా, మానిటర్ (స్క్రీన్) పైభాగంలో సిద్ధంగా ఉన్న బేసిక్ కమాండ్ ప్రాంప్ట్‌ను ప్రదర్శించడానికి కెర్నల్ బేసిక్ ఇంటర్‌ప్రెటర్‌ను ప్రారంభిస్తుంది.

5.17 సమస్యలు

తదుపరి అధ్యాయానికి వెళ్లే ముందు అన్ని సమస్యలను ఒక అధ్యాయంలో పరిష్కరించాలని పాఠకులకు సలహా ఇస్తారు.

  1. CIA #2 పోర్ట్ A యొక్క అన్ని బిట్‌లను అవుట్‌పుట్‌గా మరియు CIA #2 పోర్ట్ B ఇన్‌పుట్‌గా చేసే అసెంబ్లీ లాంగ్వేజ్ కోడ్‌ను వ్రాయండి.
  2. కీబోర్డ్ కీ నొక్కినంత వరకు వేచి ఉండే 6502-అసెంబ్లీ లాంగ్వేజ్ కోడ్‌ను వ్రాయండి.
  3. కమోడోర్-64 స్క్రీన్‌కు “E” అక్షరాన్ని పంపే 6502-అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్‌ను వ్రాయండి.
  4. 6502-అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్‌ను వ్రాయండి, అది కీబోర్డ్ నుండి అక్షరాన్ని తీసుకొని దానిని కమోడోర్-64 స్క్రీన్‌కి పంపుతుంది, కీ కోడ్ మరియు టైమింగ్‌ను విస్మరిస్తుంది.
  5. కమోడోర్-64 డిస్కెట్ నుండి బైట్‌ను స్వీకరించే 6502-అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్‌ను వ్రాయండి.
  6. కమోడోర్-64 డిస్కెట్‌లో ఫైల్‌ను సేవ్ చేసే 6502-అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్‌ను వ్రాయండి.
  7. కమోడోర్-64 డిస్కెట్ నుండి ప్రోగ్రామ్ ఫైల్‌ను లోడ్ చేసి, దాన్ని ప్రారంభించే 6502-అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్‌ను వ్రాయండి.
  8. కమోడోర్-64 యొక్క వినియోగదారు RS-232 అనుకూల పోర్ట్‌కు కనెక్ట్ చేయబడిన మోడెమ్‌కు బైట్ “E” (ASCII)ని పంపే 6502-అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్‌ను వ్రాయండి.
  9. కమోడోర్-64 కంప్యూటర్‌లో కౌంటింగ్ మరియు టైమింగ్ ఎలా జరుగుతుందో వివరించండి.
  10. కమోడోర్-64 సిస్టమ్ యూనిట్ నాన్-మాస్కేబుల్ అంతరాయ అభ్యర్థనలతో సహా 10 వేర్వేరు తక్షణ అంతరాయ అభ్యర్థన మూలాలను ఎలా గుర్తించగలదో వివరించండి.
  11. కమోడోర్-64 కంప్యూటర్‌లో ముందుభాగం ప్రోగ్రామ్‌తో బ్యాక్‌గ్రౌండ్ ప్రోగ్రామ్ ఎలా నడుస్తుందో వివరించండి.
  12. కమోడోర్-64 కంప్యూటర్ కోసం అసెంబ్లీ లాంగ్వేజ్ ప్రోగ్రామ్‌లను ఒక అప్లికేషన్‌గా ఎలా కంపైల్ చేయవచ్చో క్లుప్తంగా వివరించండి.
  13. Commodore-64 కంప్యూటర్ కోసం బూటింగ్ ప్రక్రియను క్లుప్తంగా వివరించండి.