Поглавље 5: Оперативни систем Цоммодоре-64 у језику асемблера

Poglavle 5 Operativni Sistem Commodore 64 U Jeziku Asemblera



5.1 Увод

Оперативни систем за рачунар Цоммодоре-64 долази са рачунаром у меморији само за читање (РОМ). Број локација меморијских бајтова за Цоммодоре-64 креће се од $0000 до $ФФФФ (тј. 000016 до ФФФФ16 што је од 010 до 65,53510). Оперативни систем је од $Е000 до $ФФФФ (тј. 57,34410 до 65,53610).

Зашто проучавати Цоммодоре-64 оперативни систем
Зашто проучавати Цоммодоре-64 оперативни систем данас када је то био оперативни систем рачунара који је објављен 1982? Па, рачунар Цоммодоре-64 користи Централну процесорску јединицу 6510 која је надоградња (иако не велика надоградња) 6502 µП.







6502 µП се и данас производи у великом броју; више није за кућне или канцеларијске рачунаре већ за електричне и електронске уређаје (уређаје). 6502 µП је такође једноставан за разумевање и рад у поређењу са осталим микропроцесорима тог времена. Као резултат тога, то је један од најбољих (ако не и најбољих) микропроцесора који се користи за подучавање асемблерског језика.



65Ц02 µП, још увек из класе микропроцесора 6502, има 66 инструкција асемблерског језика, од којих се све могу научити напамет. Савремени микропроцесори имају много упутстава на асемблерском језику и не могу се научити напамет. Сваки µП има за себе сопствени асемблерски језик. Сваки оперативни систем, био он нови или стари, је асемблерски језик. Уз то, 6502 асемблерски језик је добар за учење оперативног система за почетнике. Након учења оперативног система, као што је онај за Цоммодоре-64, савремени оперативни систем се лако може научити користећи га као основу.



Ово није само мишљење аутора (себе). То је растући тренд у свету. На Интернету се пише све више чланака о побољшаном оперативном систему Цоммодоре-64 како би изгледао као модеран оперативни систем. Савремени оперативни системи су објашњени у поглављу после следећег.





Белешка : Цоммодоре-64 ОС (Кернал) и даље добро ради са модерним улазним и излазним уређајима (не са свим).

Осмобитни рачунар
У осмобитном микрорачунару као што је Цоммодоре 64, информације се чувају, преносе и њима манипулише у облику осмобитних бинарних кодова.



Мапа меморије
Меморијска мапа је скала која дели комплетан опсег меморије на мање опсеге различитих величина и показује шта (потпрограм и/или променљива) којем опсегу припада. Променљива је ознака која одговара одређеној меморијској адреси која има вредност. Ознаке се такође користе за идентификацију почетка потпрограма. Али у овом случају, они су познати као имена потпрограма. Потпрограм се једноставно може назвати рутином.

Мапа меморије (изглед) у претходном поглављу није довољно детаљна. То је прилично једноставно. Мапа меморије рачунара Цоммодоре-64 може се приказати са три нивоа детаља. Када је приказан на средњем нивоу, рачунар Цоммодоре-64 има различите меморијске мапе. Подразумевана меморијска мапа рачунара Цоммодоре-64 на средњем нивоу је:


Слика 5.11 Мапа меморије Цоммодоре-64

У то време постојао је популаран компјутерски језик који се звао БАСИЦ. Многи корисници рачунара морали су да знају неке минималне команде БАСИЦ језика као што су да учитају програм са дискете (диска) у меморију, да покрену (изврше) програм у меморији и да изађу (затворе) програм. Када је БАСИЦ програм покренут, корисник мора да унесе податке, ред по ред. Није као данас када је апликација (бројни програми формирају апликацију) написана на језику високог нивоа са прозорима и корисник мора само да стане у различите податке на специјализованим местима у прозору. У неким случајевима користите миш да изаберете унапред наручене податке. БАСИЦ је у то време био језик високог нивоа, али је прилично близак асемблерском језику.

Приметите да већину меморије заузима БАСИЦ у подразумеваној мапи меморије. БАСИЦ има команде (инструкције) које се извршавају помоћу онога што је познато као БАСИЦ тумач. У ствари, БАСИЦ интерпретер је у РОМ-у од $А000 локације до $БФФФ (укључиво) што је наводно РАМ област. Ово је 8 кбајта што је прилично велико у то време! Заправо је у РОМ-у на том месту целе меморије. Има исту величину као оперативни систем од $Е000 до $ФФФФ (укључиво). Програми који су написани на БАСИЦ-у се такође налазе у распону од $0200 до $БФФФ.

РАМ за кориснички програм асемблерског језика је од $Ц000 до $ЦФФФ, само 4 кбајта од 64 кбајта. Дакле, зашто користимо или учимо асемблерски језик? Нови и стари оперативни системи су асемблерски. Оперативни систем Цоммодоре-64 је у РОМ-у, од $Е000 до $ФФФФ. Написан је у асемблерском језику 65Ц02 µП (6510 µП). Састоји се од потпрограма. Кориснички програм на асемблерском језику треба да позове ове потпрограме да би ступио у интеракцију са периферним уређајима (улазним и излазним уређајима). Разумевање Цоммодоре-64 оперативног система на асемблерском језику омогућава ученику да разуме оперативне системе брзо, на далеко мање заморан начин. Опет, у то време, многи кориснички програми за Цоммодоре-64 су писани на БАСИЦ-у, а не на асемблеру. Сами програмери су у то време више користили асемблерске језике у техничке сврхе.

Кернал, написан као К-е-р-н-а-л, је оперативни систем Цоммодоре-64. Долази са рачунаром Цоммодоре-64 у РОМ-у, а не на диску (или дискети). Кернал се састоји од потпрограма. Да би приступио периферији, кориснички програм у асемблерском језику (машинском језику) мора да користи ове потпрограме. Кернал не треба мешати са кернелом који се пише као К-е-р-н-е-л модерних оперативних система, иако су то скоро иста ствар.

Меморијска област од $Ц000 (49,15210) до $ЦФФФ (6324810) од 4 кбајта10 меморије је или РАМ или РОМ. Када је у питању РАМ, користи се за приступ периферним уређајима. Када је у питању РОМ, користи се за штампање знакова на екрану (монитор). То значи да се или знакови штампају на екрану или се периферним уређајима приступа коришћењем овог дела меморије. Постоји банка РОМ (РОМ знакова) у системској јединици (матична плоча) која се укључује и искључује из целог меморијског простора да би се то постигло. Корисник можда неће приметити пребацивање.

Подручје меморије од 0100 долара (256 10 ) до $01ФФ (511 10 ) је стек. Користе га и оперативни систем и кориснички програми. Улога стека објашњена је у претходном поглављу овог онлајн курса за каријеру. Подручје меморије од $0000 (0 10 ) до 00 ФФ (255 10 ) користи оперативни систем. Тамо су додељени многи показивачи.

Кернал Јумп Табле
Кернал има рутине које позива кориснички програм. Како су излазиле нове верзије ОС-а, адресе ових рутина су се мењале. То значи да кориснички програми више не могу да раде са новим верзијама ОС-а. То се није догодило јер је Цоммодоре-64 обезбедио сто за скок. Табела скокова је листа од 39 уноса. Сваки унос у табели има три адресе (осим последњих 6 бајтова) које се никада нису промениле чак ни са променом верзије оперативног система.

Прва адреса уноса има ЈСР инструкцију. Следеће две адресе се састоје од двобајтног показивача. Овај двобајтни показивач је адреса (или нова адреса) стварне рутине која је још увек у ОС РОМ-у. Садржај показивача могао би да се промени са новим верзијама ОС-а, али три адресе за сваки унос табеле скокова се никада не мењају. На пример, узмите у обзир адресе $ФФ81, $ФФ82 и $ФФ83. Ове три адресе служе за рутину за иницијализацију кола (регистра) екрана и тастатуре на матичној плочи. Адреса $ФФ81 увек има оперативни код (један бајт) ЈСР-а. Адресе $ФФ82 и $ФФ83 имају стару или нову адресу потпрограма (још увек у ОС РОМ-у) за иницијализацију. Некада су адресе $ФФ82 и $ФФ83 имале садржај (адресу) од $ФФ5Б који се могао променити са следећом верзијом ОС-а. Међутим, $ФФ81, $ФФ82 и $ФФ83 адресе табеле за скок се никада не мењају.

За сваки унос од три адресе, прва адреса са ЈСР-ом има ознаку (име). Ознака за $ФФ81 је ПЦИНТ. ПЦИНТ се никада не мења. Дакле, да би иницијализовао регистре екрана и тастатуре, програмер може једноставно да укуца „ЈСР ПЦИНТ“ који ради за све верзије Цоммодоре-64 ОС. Локација (почетна адреса) стварне потпрограма, на пример, $ФФ5Б, може да се промени током времена са различитим оперативним системима. Да, постоје најмање две ЈСР инструкције укључене у кориснички програм који користи РОМ ОС. У корисничком програму постоји ЈСР инструкција која скаче на унос у табели скокова. Са изузетком последњих шест адреса у табели за прескакање, прва адреса уноса у табели за скок има ЈСР инструкцију. У Керналу, неке потпрограме могу позвати друге потпрограме.

Кернал табела скокова почиње од $ФФ81 (укључиво) идући нагоре у групама по три, осим за последњих шест бајтова који су три показивача са нижим бајт адресама: $ФФФА, $ФФФЦ и $ФФФЕ. Све РОМ ОС рутине су кодови за вишекратну употребу. Дакле, корисник не мора да их преписује.

Блок дијаграм системске јединице Цоммодоре-64
Следећи дијаграм је детаљнији од оног у претходном поглављу:


Слика 5.12 Блок дијаграм системске јединице Цоммодоре_64

РОМ и РАМ су овде приказани као један блок. Овде је приказан чип видео интерфејса (ИЦ) за руковање информацијама на екрану, који није приказан у претходном поглављу. Једини блок за улазно/излазне уређаје, који је приказан у претходном поглављу, овде је приказан као два блока: ЦИА #1 и ЦИА #2. ЦИА је скраћеница од Цомплек Интерфаце Адаптер. Сваки од њих има два паралелна осмобитна порта (не треба их мешати са спољним портовима на вертикалној површини системске јединице) који се зову порт А и порт Б. ЦИА-и су повезани са пет спољних уређаја у овој ситуацији. Уређаји су тастатура, џојстик, диск јединица/штампач и модем. Штампач је повезан на задњој страни диск јединице. Такође постоји коло уређаја звучног интерфејса и коло програмабилног логичког низа који нису приказани.

Ипак, постоји РОМ карактера који се може заменити са оба ЦИА-а када се знак пошаље на екран и није приказан на блок дијаграму.

РАМ адресе од $Д000 до $ДФФФ за улазно/излазна кола у одсуству карактерног РОМ-а имају следећу детаљну меморијску мапу:

Табела 5.11
Детаљна мапа меморије од $Д000 до $ДФФФ
Опсег под-адреса Струјно коло Величина (бајтови)
Д000 – Д3ФФ ВИЦ (контролор видео интерфејса (чип))
Д400 – Д7ФФ СИД (звучно коло)
Д800 – ДБФФ РАМ у боји 1К Нибблес
ДЦ00 – ДЦФФ ЦИА #1 (тастатура, џојстик) 256
ДД00 – ДДФФ ЦИА #2 (серијска магистрала, кориснички порт/РС-232) 256
ДЕ00 – ДЕФ Отворите И/О слот #1 256
ДФ00 – ДФФФ Отворите И/О слот #2 256

5.2 Два сложена адаптера интерфејса

Постоје два посебна интегрисана кола (ИЦ) у системској јединици Цоммодоре-64, а свако од њих се зове сложени интерфејс адаптер. Ова два чипа се користе за повезивање тастатуре и других периферних уређаја са микропроцесором. Са изузетком ВИЦ-а и екрана, сви улазно/излазни сигнали између микропроцесора и периферних уређаја пролазе кроз ова два ИЦ-а. Код Цоммодоре-64 нема директне комуникације између меморије и било које периферије. Комуникација између меморије и било које периферије пролази кроз микропроцесорски акумулатор, а један од њих су ЦИА адаптери (ИЦ). ИЦ се називају ЦИА #1 и ЦИА #2. ЦИА је скраћеница од Цомплек Интерфаце Адаптер.

Свака ЦИА има 16 регистара. Са изузетком регистара тајмера/бројача у ЦИА-и, сваки регистар је широк 8 бита и има меморијску адресу. Адресе меморијског регистра за ЦИА #1 су од $ДЦ00 (56320 10 ) до ДЦ0Ф (56335 10 ). Адресе меморијског регистра за ЦИА #2 су од $ДД00 (56576 10 ) до ДД0Ф (56591 10 ). Иако се ови регистри не налазе у меморији ИЦ-а, они су део меморије. У средњој меморијској мапи, И/О област од $Д000 до $ДФФФ укључује ЦИА адресе од $ДЦ00 до $ДЦ0Ф и од $ДД00 до $ДД0Ф. Већина РАМ И/О меморијске области од $Д000 до $ДФФФ може се заменити са меморијском банком РОМ-а знакова за знакове на екрану. Зато када се ликови шаљу на екран, периферне јединице не могу да раде; иако корисник то можда неће приметити пошто је размена напред-назад брза.

Постоје два регистра у ЦИА #1 који се зову Порт А и Порт Б. Њихове адресе су $ДЦ00 и $ДЦ01, респективно. У ЦИА #2 постоје и два регистра који се зову Лука А и Лука Б. Наравно, њихове адресе су различите; они су $ДД00 и $ДД01, респективно.

Порт А или Порт Б у било којој ЦИА-и је паралелни порт. То значи да може да шаље податке периферији у осам битова одједном или да прима податке од микропроцесора у осам битова одједном.

Повезан са портом А или портом Б је регистар смера података (ДДР). Регистар правца података за порт А ЦИА #1 (ДДРА1) је на локацији меморијског бајта $ДЦ02. Регистар правца података за порт Б ЦИА #1 (ДДРБ1) је на локацији меморијског бајта $ДЦ03. Регистар правца података за порт А ЦИА #2 (ДДРА2) је на локацији меморијског бајта $ДД02. Регистар правца података за порт Б ЦИА #2 (ДДРБ2) је на локацији меморијског бајта $ДД03.

Сада, сваки бит за порт А или порт Б може бити подешен одговарајућим регистром правца података да буде улаз или излаз. Унос значи да информације иду са периферије на микропроцесор преко ЦИА-е. Излаз значи да информације иду од микропроцесора ка периферији кроз ЦИА.

Ако треба да се унесе ћелија порта (регистра), одговарајући бит у регистру правца података је 0. Ако треба да се изађе из ћелије порта (регистра), одговарајући бит у регистру правца података је 1. У већини случајева, свих 8-бита порта су програмирани да буду или улазни или излазни. Када је рачунар укључен, порт А је програмиран за излаз, а порт Б је програмиран за улаз. Следећи код чини ЦИА #1 порт А као излаз и ЦИА #1 порт Б као улаз:

ЛДА #$ФФ
СТА ДДРА1 ; $ДЦ00 режира $ДЦ02
ЛДА #00$
СТА ДДРБ1 ; $ДЦ01 режира $ДЦ03

ДДРА1 је ознака (име променљиве) за локацију меморијског бајта $ДЦ02, а ДДРБ1 је ознака (име променљиве) за локацију меморијског бајта $ДЦ03. Прва инструкција учитава 11111111 у акумулатор µП. Друго упутство ово копира у регистар праваца података порта А ЦИА бр. 1. Трећа инструкција учитава 00000000 у акумулатор µП. Четврто упутство ово копира у регистар праваца података луке Б ЦИА бр. 1. Овај код се налази у једној од потпрограма у оперативном систему који обавља ову иницијализацију при укључивању рачунара.

Свака ЦИА има линију захтева за услугу прекида до микропроцесора. Онај из ЦИА #1 иде у ИРК пин на µП. Онај из ЦИА #2 иде у НМИ пин на µП. Запамтите да НМИ има већи приоритет од ИРК .

5.3 Програмирање асемблерског језика тастатуре

Постоје само три могућа прекида за Цоммодоре-64: ИРК , БРК и НМИ . Показивач табеле скокова за ИРК је на адресама $ФФФЕ и $ФФФФ у РОМ-у (оперативни систем) што одговара потпрограму који је још увек у ОС (РОМ). Показивач табеле скокова за БРК је на $ФФФЦ и $ФФФД адресама у ОС-у што одговара потпрограму који је још увек у ОС-у (РОМ). Показивач табеле скокова за НМИ је на адресама $ФФФА и $ФФФБ у ОС-у што одговара потпрограму који је још увек у ОС-у (РОМ). За ИРК , заправо постоје два потпрограма. Дакле, БРК софтверски прекид (инструкција) има сопствени показивач табеле скокова. Показивач табеле скокова за ИРК води до кода који одлучује да ли је у питању хардверски или софтверски прекид. Ако је то хардверски прекид, рутина за ИРК се зове. Ако је у питању софтверски прекид (БРК), позива се рутина за БРК. У једној од верзија ОС-а, потпрограм за ИРК је на $ЕА31, а потпрограм за БРК је на $ФЕ66. Ове адресе су испод $ФФ81, тако да нису уноси у табели за скок и могу се променити са верзијом ОС-а. Постоје три рутине од интереса у овој теми: она која проверава да ли је притиснут тастер или БРК, она која је на $ФЕ43 и она која се такође може променити са верзијом ОС-а.

Компјутер Цоммодоре-64 изгледа као огромна писаћа машина (нагоре) без дела за штампање (глава и папир). Тастатура је повезана са ЦИА #1. ЦИА #1 скенира тастатуру сваке 1/60 секунде самостално без икаквих програмских сметњи, подразумевано. Дакле, сваке 1/60 секунде, ЦИА #1 шаље поруку ИРК на µП. Постоји само једна ИРК пин на µП који долази само од ЦИА #1. Један улазни пин НМИ од µП, који се разликује од ИРК , долази само од ЦИА #2 (погледајте следећу илустрацију). БРК је заправо инструкција асемблерског језика која је кодирана у корисничком програму.

Дакле, сваке 1/60 секунде, ИРК позива се рутина на коју указује $ФФФЕ и $ФФФФ. Рутина проверава да ли је притиснут тастер или се наишла на БРК инструкцију. Ако се притисне тастер, позива се рутина за руковање притиском на тастер. Ако је то БРК инструкција, позива се рутина за руковање БРК-ом. Ако није ни једно ни друго, ништа се не дешава. Не може се десити ни једно ни друго, али ЦИА #1 шаље ИРК на µП сваке 1/60 секунде.

Ред на тастатури, такође познат као бафер тастатуре, је опсег локација РАМ бајтова од $0277 до $0280, укључујући; 1010 бајтова укупно. Ово је бафер први-у-први-изишао. То значи да први лик који долази први одлази. Западноевропски карактер заузима један бајт.

Дакле, док програм не троши ниједан знак када се притисне тастер, код тастера иде у овај бафер (ред). Бафер се пуни све док не буде десет знакова. Ниједан карактер који се притисне после десетог знака се не снима. Игнорише се све док се бар један знак не добије (потроши) из реда. Табела скокова има унос за потпрограм који прима први знак из реда у микропроцесор. То значи да узима први знак који иде у ред и ставља га у акумулатор µП. Подпрограм табеле скокова за ово се зове ГЕТИН (за Гет-Ин). Први бајт за унос од три бајта у табели за скокове је означен као ГЕТИН (адреса $ФФЕ4). Следећа два бајта су показивач (адреса) који указује на стварну рутину у РОМ-у (ОС). Одговорност програмера је да позове ову рутину. У супротном, бафер тастатуре ће остати пун и сви недавно притиснути тастери ће бити занемарени. Вредност која улази у акумулатор је одговарајућа вредност АСЦИИ кључа.

Како кодови кључева уопште доспевају у ред чекања? Постоји рутина за прескакање табеле која се зове СЦНКЕИ (за кључ за скенирање). Ову рутину може позвати и софтвер и хардвер. У овом случају, позива га електроника (физичко) коло у микропроцесору када електрични сигнал ИРК ниска. Како се то тачно ради није обрађено у овом онлајн курсу за каријеру.

Код за добијање првог кода кључа из бафера тастатуре у акумулатор А је само један ред:

УЋИ

Ако је бафер тастатуре празан, $00 се ставља у акумулатор. Запамтите да АСЦИИ код за нулу није $00; то је 30 долара. $00 значи Нулл. У програму може постојати тачка у којој програм мора да сачека притисак на тастер. Код за ово је:

САЧЕКАЈТЕ ЈСР ГЕТИН
ЦМП #$00
ЖАБА ЧЕКАЈ

У првом реду, „ВАИТ“ је ознака која идентификује РАМ адресу на коју се ставља (укуцава) ЈСР инструкција. ГЕТИН је такође адреса. То је адреса првог од одговарајућа три бајта у табели скокова. ГЕТИН унос, као и сви уноси у табели скокова (осим последња три), састоје се од три бајта. Први бајт уноса је ЈСР инструкција. Следећа два бајта су адреса тела стварног ГЕТИН потпрограма који је још увек у РОМ-у (ОС), али испод табеле скокова. Дакле, унос каже да пређете на ГЕТИН потпрограм. Ако ред на тастатури није празан, ГЕТИН ставља шифру АСЦИИ кључа из реда „Први-први-излази“ у акумулатор. Ако је ред празан, Нулл ($00) се ставља у акумулатор.

Друга инструкција пореди вредност акумулатора са $00. Ако је $00, то значи да је ред на тастатури празан, а ЦМП инструкција шаље 1 у З заставицу регистра статуса процесора (једноставно назван статусни регистар). Ако вредност у А није $00, ЦМП инструкција шаље 0 у З заставицу статусног регистра.

Трећа инструкција која је „БЕК ВАИТ“ шаље програм назад на прву инструкцију ако је ознака З статусног регистра 1. Прва, друга и трећа инструкција се извршавају више пута док се не притисне тастер на тастатури. . Ако се тастер никада не притисне, циклус се понавља бесконачно. Сегмент кода попут овог се обично пише са сегментом временског кода који напушта петљу након неког времена ако се тастер никада не притисне (погледајте следећу дискусију).

Белешка : Тастатура је подразумевани улазни уређај, а екран је подразумевани излазни уређај.

5.4 Канал, број уређаја и логички број датотеке

Периферне јединице које се у овом поглављу користе за објашњење оперативног система Цоммодоре-64 су тастатура, екран (монитор), диск јединица са дискетом, штампач и модем који се повезује преко РС-232Ц интерфејса. Да би се комуникација одвијала између ових уређаја и системске јединице (микропроцесора и меморије), потребно је успоставити канал.

Канал се састоји од бафера, броја уређаја, логичког броја датотеке и опционо секундарне адресе. Објашњење ових појмова је следеће:

А Буффер
Приметите из претходног одељка да када се притисне тастер, његов код мора да иде на локацију бајтова у РАМ-у серије од десет узастопних локација. Ова серија од десет локација је бафер тастатуре. Сваки улазни или излазни уређај (периферијски) има низ узастопних локација у РАМ-у који се назива бафер.

Број уређаја
Код Цоммодоре-64, свака периферна јединица има број уређаја. Следећа табела приказује различите уређаје и њихове бројеве:

Табела 5.41
Цоммодоре 64 бројеви уређаја и њихови уређаји
Број Уређај
0 Тастатура
1 Тапе Дриве
2 РС 232Ц интерфејс за нпр. модем
3 Екран
4 Штампач #1
5 Штампач #2
6 Плотер #1
7 Плотер #2
8 Диск
9
¦
¦
¦
30
Од 8 (укључиво) до још 22 уређаја за складиштење

Постоје две врсте портова за рачунар. Један тип је спољашњи, на вертикалној површини системске јединице. Други тип је унутрашњи. Овај интерни порт је регистар. Цоммодоре-64 има четири интерна порта: порт А и порт Б за ЦИА 1 и порт А и порт Б за ЦИА 2. Постоји један екстерни порт за Цоммодоре-64 који се зове серијски порт. Уређаји са бројем 3 нагоре су повезани на серијски порт. Они су повезани на начин ланца у низу (један који је повезан иза другог), од којих се сваки може идентификовати по броју уређаја. Уређаји са бројем 8 нагоре су углавном уређаји за складиштење.

Белешка : Подразумевани улазни уређај је тастатура са бројем уређаја 0. Подразумевани излазни уређај је екран са бројем уређаја 3.

Логички број датотеке
Логички број датотеке је број дат за уређај (периферију) по редоследу којим се отварају ради приступа. Они се крећу од 010 до 255 10 .

Секундарна адреса
Замислите да су две датотеке (или више од једне датотеке) отворене на диску. Да би се разликовале ове две датотеке, користе се секундарне адресе. Секундарне адресе су бројеви који се разликују од уређаја до уређаја. Значење 3 као секундарне адресе за штампач се разликује од значења 3 као секундарне адресе за диск јединицу. Значење зависи од функција као што су када се датотека отвори за читање или када се датотека отвори за писање. Могући секундарни бројеви су од 0 10 до 15 10 за сваки уређај. За многе уређаје, број 15 се користи за слање команди.

Белешка : Број уређаја је такође познат као адреса уређаја, а секундарни број је такође познат као секундарна адреса.

Идентификовање периферне мете
За подразумевану Цоммодоре меморијску мапу, меморијске адресе од $0200 до $02ФФ (страница 2) користи искључиво оперативни систем у РОМ-у (Кернал), а не оперативни систем плус БАСИЦ језик. Иако БАСИЦ и даље може да користи локације преко РОМ ОС-а.

Модем и штампач су две различите периферне мете. Ако се две датотеке отворе са диска, то су две различите мете. Са подразумеваном меморијском мапом, постоје три узастопне табеле (листе) које се могу видети као једна велика табела. Ове три табеле садрже однос између логичких бројева датотека, бројева уређаја и секундарних адреса. Са тим, одређени канал или циљ за улаз/излаз постаје препознатљив. Те три табеле се зову табеле датотека. РАМ адресе и оно што имају су:

$0259 — $0262: Табела са ознаком, ЛАТ, са до десет активних логичких бројева датотека.
$0263 — $026Ц: Табела са ознаком, ФАТ, са највише десет одговарајућих бројева уређаја.
$026Д — $0276: Табела са ознаком, САТ, десет одговарајућих секундарних адреса.

Овде „—“ значи „до“, а број заузима један бајт.

Читалац може да пита: „Зашто бафер за сваки уређај није укључен у идентификацију канала?“ Па, одговор је да са цоммодоре-64, сваки спољни уређај (периферија) има фиксну серију бајтова у РАМ-у (меморија). Без иједног отвореног канала, њихове позиције су и даље тамо у меморији. Бафер за тастатуру, на пример, је фиксиран од $0277 до $0280 (укључиво) за подразумевану меморијску мапу.

Кернал СЕТЛФС и СЕТНАМ потпрограми
СЕТЛФС и СЕТНАМ су Кернал рутине. Канал се може посматрати као логичка датотека. Да би се канал отворио, морају се произвести логички број датотеке, број уређаја и опциона секундарна адреса. Опциони назив датотеке (текст) такође може бити потребан. СЕТЛФС рутина поставља логички број датотеке, број уређаја и опциону секундарну адресу. Ови бројеви се стављају у одговарајуће табеле. СЕТНАМ рутина поставља име низа за датотеку које може бити обавезно за један канал и опционо за други канал. Ово се састоји од показивача (двобајтне адресе) у меморији. Показивач показује на почетак низа (име) који се може налазити на другом месту у меморији. Име стринга почиње бајтом који има дужину стринга, након чега следи текст (име). Име има највише шеснаест бајтова (дугачко).

Да би позвао СЕТЛФС рутину, кориснички програм мора да скочи (ЈСР) на $ФФБА адресу табеле скокова ОС у РОМ-у за подразумевану меморијску мапу. Запамтите да се са изузетком последњих шест бајтова табеле скокова, сваки унос састоји од три бајта. Први бајт је ЈСР инструкција, која затим скаче на потпрограм, почиње на адреси у следећа два бајта. Да би позвао СЕТНАМ рутину, кориснички програм мора да скочи (ЈСР) на адресу $ФФБД табеле скокова ОС у РОМ-у. Употреба ове две рутине је приказана у следећој дискусији.

5.5 Отварање канала, отварање логичке датотеке, затварање логичке датотеке и затварање свих И/О канала

Канал се састоји од меморијског бафера, логичког броја датотеке, броја уређаја (адреса уређаја) и опционе секундарне адресе (броја). Логичка датотека (апстракција) која је идентификована логичким бројем датотеке може се односити на периферију као што је штампач, модем, диск јединица, итд. Сваки од ових различитих уређаја треба да има различите логичке бројеве датотека. На диску има много датотека. Логичка датотека се такође може односити на одређену датотеку на диску. Та конкретна датотека такође има логички број датотеке који се разликује од броја периферних уређаја као што су штампач или модем. Логички број датотеке даје програмер. Може бити било који број од 010 ($00) до 25510 ($ФФ).

ОС СЕТЛФС рутина
ОС СЕТЛФС рутина којој се приступа скакањем (ЈСР) на ОС РОМ табелу скокова на $ФФБА поставља канал. Треба да стави логички број датотеке у табелу датотека која је ЛАТ ($0259 — $0262). Потребно је да унесе одговарајући број уређаја у табелу датотека која је ФАТ ($0263 — $026Ц). Ако приступ датотеци (уређају) треба секундарни број, потребно је да унесе одговарајућу секундарну адресу (број) у табелу датотека која је САТ ($026Д — $0276).

Да би радио, СЕТЛФС потпрограм треба да добије логички број датотеке од µП акумулатора; потребно је да добије број уређаја из µП Кс регистра. Ако је потребно каналу, потребно је да добије секундарну адресу из µП И регистра.

О логичком броју датотеке одлучује програмер. Логички бројеви датотека који се односе на различите уређаје су различити. Сада, пре него што позове СЕТЛФС рутину, програмер треба да стави број за логичку датотеку у µП акумулатор. Број уређаја се чита из табеле (документа) као што је табела 5.41. Програмер такође треба да унесе број уређаја у регистар µП Кс. Добављач уређаја као што је штампач, диск јединица, итд. обезбеђује могуће секундарне адресе и њихова значења за уређај. Ако је каналу потребна секундарна адреса, програмер треба да је добије из документа који је испоручен са уређајем (периферијом). Ако је секундарна адреса (број) неопходна, програмер мора да је стави у µП И регистар пре него што позове СЕТЛФС потпрограм. Ако нема потребе за секундарном адресом, програмер мора да стави $ФФ број у µП И регистар пре него што позове СЕТЛФС потпрограм.

СЕТЛФС потпрограм се позива без икаквог аргумента. Његови аргументи су већ у три регистра 6502 µП. Након уноса одговарајућих бројева у регистре, рутина се позива у програму једноставно са следећим у посебном реду:

ЈСР СЕТЛФС

Рутина на одговарајући начин ставља различите бројеве у своје табеле датотека.

Рутина ОС СЕТНАМ
ОС СЕТНАМ рутини се приступа скакањем (ЈСР) на ОС РОМ табелу скокова на $ФФБД. Немају сва одредишта имена датотека. За оне који имају одредишта (као што су датотеке на диску), треба подесити име датотеке. Претпоставимо да је име датотеке „мидоцум“ које се састоји од 7 бајтова без наводника. Претпоставимо да је ово име на локацијама од $Ц101 до $Ц107 (укључиво) и да је дужина од $07 на локацији $Ц100. Почетна адреса стринг знакова је $Ц101. Нижи бајт почетне адресе је $01, а виши бајт је $Ц1.

Пре него што позове СЕТНАМ рутину, програмер мора да стави број $07 (дужина низа) у µП акумулатор. Нижи бајт почетне адресе стринга од $01 ставља се у µП Кс регистар. Виши бајт почетне адресе стринга $Ц1 ставља се у µП И регистар. Потпрограм се једноставно позива на следећи начин:

ЈСР СЕТНАМ

СЕТНАМ рутина повезује вредности из три регистра са каналом. Вредности не морају да остану у регистрима након тога. Ако каналу није потребан назив датотеке, програмер мора да стави $00 у µП акумулатор. У овом случају се занемарују вредности које се налазе у регистрима Кс и И.

Рутина ОС ОПЕН
Рутини ОС ОПЕН приступа се скакањем (ЈСР) на табелу скока ОС РОМ-а на $ФФЦ0. Ова рутина користи број логичке датотеке, број уређаја (и бафер), могућу секундарну адресу и могуће име датотеке, да обезбеди везу између комодорског рачунара и датотеке у спољном уређају или самог спољног уређаја.

Ова рутина, као и све друге Цоммодоре ОС РОМ рутине, не узимају никакве аргументе. Иако користи µП регистре, ниједан од регистара није морао бити унапред учитан са аргументима (вредностима) за њега. Да бисте га кодирали, само унесите следеће након што се позову СЕТЛФС и СЕТНАМ:

ЈСР ОПЕН

Може доћи до грешака са рутином ОПЕН. На пример, датотека можда неће бити пронађена за читање. Када дође до грешке, рутина не успева и ставља одговарајући број грешке у µП акумулатор, и поставља ознаку за ношење (на 1) µП статусног регистра. Следећа табела даје бројеве грешака и њихова значења:

Табела 5.51
Бројеви керналних грешака и њихова значења за рутину ОС РОМ ОПЕН
Број грешке Опис Пример
1 ПРЕВИШЕ ДАТОТЕКА ОТВОРИ када се већ отвори десет датотека
2 ФИЛЕ ОПЕН ОТВОРЕН 1,3: ОТВОРЕН 1,4
3 ДАТОТЕКА НИЈЕ ОТВОРЕНА ПРИНТ#5 без ОПЕН
4 ФАЈЛ НИЈЕ ПРОНАЂЕН УЧИТАЈТЕ “НЕПОСТОЈЕЋЕ”,8
5 УРЕЂАЈ НИЈЕ ПРИСУТАН ОТВОРЕН 11,11: ПРИНТ#11
6 НИЈЕ УЛАЗНА ДАТОТЕКА ОТВОРИ “СЕК,С,В”: ГЕТ#8,Кс$
7 НИЈЕ ИЗЛАЗНА ДАТОТЕКА ОТВОРЕН 1,0: ПРИНТ#1
8 НЕДОСТАЈЕ ИМЕ ДАТОТЕКЕ ЛОАД “”,8
9 НЕЛЕГАЛНИ УРЕЂАЈ БР. УЧИТАЈТЕ “ПРОГРАМ”,3

Ова табела је представљена на начин који ће читалац вероватно видети на многим другим местима.

ОС ЦХКИН рутина
ОС ЦХКИН рутини се приступа скакањем (ЈСР) на табелу скока ОС РОМ-а на $ФФЦ6. Након отварања датотеке (логичке датотеке), мора се одлучити да ли је отварање за улаз или излаз. ЦХКИН рутина чини отварање улазног канала. Ова рутина треба да прочита логички број датотеке из µП Кс регистра. Дакле, програмер мора да стави логички број датотеке у Кс регистар пре него што позове ову рутину. Зове се једноставно као:

ЈСР ЦХКИН

Рутина ОС ЦХКОУТ
ОС ЦХКОУТ рутини се приступа скакањем (ЈСР) на табелу скока ОС РОМ-а на $ФФЦ9. Након отварања датотеке (логичке датотеке), мора се одлучити да ли је отварање за улаз или излаз. ЦХКОУТ рутина чини отварање излазног канала. Ова рутина треба да прочита логички број датотеке из µП Кс регистра. Дакле, програмер мора да стави логички број датотеке у Кс регистар пре него што позове ову рутину. Зове се једноставно као:

ЈСР ЦХКОУТ

Рутина ОС ЦЛОСЕ
Рутини ОС ЦЛОСЕ се приступа скоком (ЈСР) на табелу скока ОС РОМ-а на $ФФЦ3. Након што се логичка датотека отвори и бајтови се пренесу, логичка датотека се мора затворити. Затварање логичке датотеке ослобађа бафер у системској јединици да га користи нека друга логичка датотека која тек треба да се отвори. Одговарајући параметри у три табеле датотека такође се бришу. Локација РАМ меморије за број отворених датотека се смањује за 1.

Када се рачунар укључи, долази до хардверског ресетовања микропроцесора и других главних чипова (интегрисаних кола) на матичној плочи. Након тога следи иницијализација неких локација РАМ меморије и неких регистара у неким чиповима на матичној плочи. У процесу иницијализације, меморијска локација бајтова адресе $0098 на страници нула се даје ознаком НФИЛЕС или ЛДТНД, у зависности од верзије оперативног система. Док рачунар ради, ова једнобајтна локација од 8 бита садржи број логичких датотека које су отворене и индекс почетне адресе узастопне табеле са три датотеке. Другим речима, овај бајт има број отворених датотека који се смањује за 1 када се логичка датотека затвори. Када се логичка датотека затвори, приступ терминалном (одредишном) уређају или стварној датотеци на диску више није могућ.

Да би затворио логичку датотеку, програмер мора да стави број логичке датотеке у µП акумулатор. Ово је исти логички број датотеке који се користи за отварање датотеке. То је потребно рутини ЦЛОСЕ да би затворила ту одређену датотеку. Као и друге ОС РОМ рутине, рутина ЦЛОСЕ не узима аргумент, иако је вредност која се користи из акумулатора донекле аргумент. Линија инструкција асемблерског језика је једноставно:

ЈСР ЦЛОСЕ

Прилагођене или унапред дефинисане 6502 потпрограме (рутине) асемблерског језика не узимају аргументе. Међутим, аргументи долазе неформално стављањем вредности које ће потпрограм користити у регистре микропроцесора.

ЦЛРЦХН рутина
ОС ЦЛРЦХН рутини се приступа скакањем (ЈСР) на табелу скока ОС РОМ-а на $ФФЦЦ. ЦЛРЦХН је скраћеница од ЦЛеаР ЦханнеЛ. Када се логичка датотека затвори, њени параметри број логичке датотеке, број уређаја и могућа секундарна адреса се бришу. Дакле, канал за логичку датотеку је очишћен.

У приручнику се каже да ОС ЦЛРЦХН рутина брише све отворене канале и враћа подразумеване бројеве уређаја и друге подразумеване вредности. Да ли то значи да се број уређаја за периферију може променити? Па, не баш. Током иницијализације оперативног система, локација бајта адресе $0099 се даје са ознаком ДФЛТИ да би се садржао број тренутног улазног уређаја када рачунар ради. Цоммодоре-64 може приступити само једном периферном уређају у исто време. Током иницијализације оперативног система, локација бајта адресе $009А се даје са ознаком ДФЛТО да задржи број тренутног излазног уређаја када рачунар ради.

Када се позове ЦЛРЦХН потпрограм, он поставља ДФЛТИ променљиву на 0 ($00) што је подразумевани број уређаја за унос (тастатура). Поставља променљиву ДФЛТО на 3 ($03) што је подразумевани број излазног уређаја (екран). Друге променљиве броја уређаја се на сличан начин ресетују. То је значење ресетовања (или враћања) улазно/излазних уређаја на нормалне (подразумеване вредности).

У приручнику Цоммодоре-64 се каже да након што се ЦЛРЦХН рутина позове, отворене логичке датотеке остају отворене и да и даље могу да преносе бајтове (податке). То значи да ЦЛРЦХН рутина не брише одговарајуће уносе у табелама датотека. Име ЦЛРЦХН је прилично двосмислено по свом значењу.

5.6 Слање лика на екран

Главно интегрисано коло (ИЦ) за управљање приказом карактера и графике на екрану назива се контролер видео интерфејса (чип) који је скраћено ВИЦ у Цоммодоре-64 (заправо ВИЦ ИИ за ВИЦ верзију 2). Да би информација (вредности) изашла на екран, она мора да прође кроз ВИЦ ИИ пре него што стигне до екрана.

Екран се састоји од 25 редова и 40 колона ћелија са знаковима. Ово чини 40 к 25 = 1000 карактера који се могу приказати на екрану. ВИЦ ИИ чита одговарајућих 1000 меморијских РАМ узастопних локација бајтова за знакове. Ових 1000 локација заједно је познато као меморија екрана. Оно што улази у ових 1000 локација су кодови знакова. За Цоммодоре-64, кодови знакова се разликују од АСЦИИ кодова.

Шифра карактера није образац карактера. Постоји и оно што је познато као карактерни РОМ. РОМ знакова се састоји од свих врста образаца знакова, од којих неки одговарају шаблонима знакова на тастатури. РОМ карактера се разликује од меморије екрана. Када знак треба да се прикаже на екрану, код карактера се шаље на позицију међу 1000 позиција у меморији екрана. Одатле се бира одговарајући образац из РОМ-а знакова који треба да се прикаже на екрану. Одабир исправног узорка у РОМ-у знакова из кода карактера врши ВИЦ ИИ (хардвер).

Многе меморијске локације између $Д000 и $ДФФФ имају две сврхе: користе се за руковање улазно/излазним операцијама које нису екран или се користе као РОМ знакова за екран. У питању су два блока меморије. Један је РАМ, а други РОМ за карактерни РОМ. Замена банака за руковање било улазом/излазом или шаблонима знакова (РОМ знакова) се врши софтвером (рутина ОС у РОМ-у од $Ф000 до $ФФФФ).

Белешка : ВИЦ има регистре који су адресирани са адресама меморијског простора из опсега од $Д000 и $ДФФФ.

ЦХРОУТ рутина
ОС ЦХРОУТ рутини се приступа скакањем (ЈСР) на табелу скока ОС РОМ-а на $ФФД2. Ова рутина, када се позове, узима бајт који је програмер ставио у µП акумулатор и штампа на екрану где се налази курсор. Сегмент кода за штампање знака „Е“, на пример, је:

ЛДА #$05
ЦХРОУТ

0516 није АСЦИИ код за „Е“. Цоммодоре-64 има сопствене кодове знакова за екран где $05 значи 'Е'. Број #$05 се ставља у меморију екрана пре него што га ВИЦ пошаље на екран. Ове две линије кодирања треба да дођу након што је канал подешен, логичка датотека се отвори и ЦХКОУТ рутина се позове за излаз. Комплетан код је:

; Подешавање канала
ЛДА #$40; логички број датотеке
ЛДКС #$03 ; број уређаја за екран је $03
ЛДИ #$ФФ ; нема секундарне адресе
ЈСР СЕТЛФС ; подешавање исправног канала
; нема СЕТНАМ јер екрану није потребно име
;
; Отворите логичку датотеку
ЈСР ОПЕН
; Подесите канал за излаз
ЛДКС #$40; логички број датотеке
ЈСР ЦХКОУТ
;
; Излаз цхар на екран
ЛДА #$05
ЈСР ЦХРОУТ
; Затвори логичку датотеку
ЛДА #40$
ЈСР ЦЛОСЕ

Отвор треба затворити пре него што се покрене други програм. Претпоставимо да корисник рачунара укуца знак на тастатури када се очекује. Следећи програм штампа знак са тастатуре на екран:

; Подешавање канала
ЛДА #$40; логички број датотеке
ЛДКС #$03 ; број уређаја за екран је $03
ЛДИ #$ФФ ; нема секундарне адресе
ЈСР СЕТЛФС ; подешавање исправног канала
; нема СЕТНАМ јер екрану није потребно име
;
; Отворите логичку датотеку
ЈСР ОПЕН
; Подесите канал за излаз
ЛДКС #$40; логички број датотеке
ЈСР ЦХКОУТ
;
; Унесите цхар са тастатуре
ВАИТ ЈСР ГЕТИН ; ставља $00 у А ако је ред на тастатури празан
ЦМП #$00 ; Ако је 00 долара отишло у А, онда је З 1 са поређењем
БЕК ВАИТ ; ГЕТИН поново из реда ако је 0 отишао у акумулатор
БНЕ ПРНСЦРН ; идите на ПРНСЦРН ако је З 0, јер А више нема $00
; Излаз цхар на екран
ПРНСЦРН ЈСР ЦХРОУТ ; пошаљите знак у А на екран
; Затвори логичку датотеку
ЛДА #40$
ЈСР ЦЛОСЕ

Белешка : ВАИТ и ПРНСЦРН су ознаке које идентификују адресе. Бајт са тастатуре који стиже у µП акумулатор је АСЦИИ код. Одговарајући код који Цоммодоре-64 шаље на екран мора бити другачији. То није узето у обзир у претходном програму ради једноставности.

5.7 Слање и примање бајтова за диск јединицу

Постоје два комплексна интерфејс адаптера у системској јединици (матична плоча) Цоммодоре-64 под називом ВИА #1 и ЦИА #2. Свака ЦИА има два паралелна порта који се зову Порт А и Порт Б. Постоји екстерни порт на вертикалној површини на задњој страни системске јединице Цоммодре-64 који се назива серијски порт. Овај порт има 6 пинова, од којих је један за податке. Подаци улазе или излазе из системске јединице у серији, један по један бит.

Осам паралелних битова из интерног порта А ЦИА #2, на пример, може изаћи из системске јединице преко екстерног серијског порта након што се конвертује у серијске податке помоћу регистра померања у ЦИА-и. Осмобитни серијски подаци са екстерног серијског порта могу ићи у интерни порт А ЦИА-е #2 након што буду конвертовани у паралелне податке помоћу регистра померања у ЦИА-и.

Системска јединица Цоммодоре-64 (базна јединица) користи екстерни диск са дискетом. Штампач се може повезати на овај диск драјв на начин у низу (повезивање уређаја у серију као низ). Кабл за пренос података за диск јединицу је повезан на екстерни серијски порт системске јединице Цоммодоре-64. То значи да је штампач са ланчаним ланцем такође повезан на исти серијски порт. Ова два уређаја су идентификована са два различита броја уређаја (обично 8 и 4, респективно).

Слање или примање података за диск јединицу прати исти поступак као што је претходно описано. То је:

  • Подешавање имена логичке датотеке (броја) које је исто као и стварне диск датотеке помоћу рутине СЕТНАМ.
  • Отварање логичке датотеке помоћу ОПЕН рутине.
  • Одлучивање да ли је улаз или излаз помоћу ЦХКОУТ или ЦХКИН рутине.
  • Слање или примање података помоћу СТА и/или ЛДА инструкције.
  • Затварање логичке датотеке помоћу ЦЛОСЕ рутине.

Логичка датотека мора бити затворена. Затварање логичке датотеке ефективно затвара тај одређени канал. Приликом подешавања канала за диск јединицу, логички број датотеке одређује програмер. То је број између $00 и $ФФ (укључиво). То не би требало да буде број који је већ изабран за било који други уређај (или стварну датотеку). Број уређаја је 8 ако постоји само један диск. Секундарна адреса (број) се добија из упутства за диск јединицу. Следећи програм користи 2. Програм уписује слово „Е“ (АСЦИИ) у датотеку на диску под називом „мидоц.доц“. Претпоставља се да ово име почиње на меморијској адреси $Ц101. Дакле, нижи бајт од $01 мора бити у Кс регистру, а виши бајт од $Ц1 мора бити у И регистру пре него што се позове СЕТНАМ рутина. А регистар такође треба да има број $09 пре него што се позове СЕТНАМ рутина.

; Подешавање канала
ЛДА #$40; логички број датотеке
ЛДКС #$08 ; број уређаја за први диск
ЛДИ #$02 ; секундарна адреса
ЈСР СЕТЛФС ; подешавање исправног канала
;
; Датотеци на диск јединици је потребно име (већ у меморији)
ЛДА #09$
ЛДКС #$01
ЛДИ#$Ц1
ЈСР СЕТНАМ
; Отворите логичку датотеку
ЈСР ОПЕН
; Подесите канал за излаз
ЛДКС #$40; логички број датотеке
ЈСР ЦХКОУТ ;за писање
;
; Излаз цхар на диск
ЛДА #45 долара
ЈСР ЦХРОУТ
; Затвори логичку датотеку
ЛДА #40$
ЈСР ЦЛОСЕ

Да бисте прочитали бајт са диска у µП И регистар, поновите претходни програм са следећим изменама: Уместо „ЈСР ЦХКОУТ ; за писање“, користите „ЈСР ЦХКИН ; за читање”. Замените сегмент кода за „; Излаз цхар на диск” са следећим:

; Унесите цхар са диска
ЈСР ЦХРИС

ОС ЦХРИН рутини се приступа скакањем (ЈСР) на табелу скока ОС РОМ-а на $ФФЦФ. Ова рутина, када се позове, добија бајт са канала који је већ подешен као улазни канал и ставља га у µП А регистар. ГЕТИН РОМ ОС рутина се такође може користити уместо ЦХРИН-а.

Слање бајта на штампач
Слање бајта на штампач се врши на сличан начин као и слање бајта у датотеку на диску.

5.8 Рутина ОС САВЕ

Рутини ОС САВЕ приступа се скоком (ЈСР) на табелу скока ОС РОМ-а на $ФФД8. Рутина ОС САВЕ у РОМ-у чува (испушта) део меморије на диск као датотеку (са именом). Почетна адреса секције у меморији мора бити позната. Крајња адреса секције такође мора бити позната. Доњи бајт почетне адресе је смештен на нулту страницу у РАМ-у на адреси $002Б. Виши бајт почетне адресе се поставља у следећу меморијску локацију на адреси $002Ц. На нултој страници, ознака ТКСТТАБ се односи на ове две адресе, иако ТКСТТАБ заправо значи адресу од $002Б. Доњи бајт крајње адресе се смешта у µП Кс регистар. Виши бајт крајње адресе плус 1 смештен је у µП И регистар. µП А регистар има вредност од $2Б за ТКСТТАБ ($002Б). Уз то, САВЕ рутина се може позвати на следећи начин:

ЈСР САВЕ

Одељак меморије који треба сачувати може бити програм на асемблерском језику или документ. Пример документа може бити писмо или есеј. Да бисте користили рутину чувања, треба следити следећу процедуру:

  • Подесите канал користећи СЕТЛФС рутину.
  • Подесите име логичке датотеке (број) које је исто као и стварне датотеке диска користећи рутину СЕТНАМ.
  • Отворите логичку датотеку користећи ОПЕН рутину.
  • Направите датотеку за излаз користећи ЦХКОУТ.
  • Овде иде код за чување датотеке који се завршава са „ЈСР САВЕ“.
  • Затворите логичку датотеку користећи ЦЛОСЕ рутину.

Следећи програм чува датотеку која почиње од меморијских локација од $Ц101 до $Ц200:

; Подешавање канала
ЛДА #$40; логички број датотеке
ЛДКС #$08 ; број уређаја за први диск
ЛДИ #$02 ; секундарна адреса
ЈСР СЕТЛФС ; подешавање исправног канала
;
; Назив датотеке на диск јединици (већ у меморији на $Ц301)
ЛДА #$09 ; дужина имена датотеке
ЛДКС #$01
ЛДИ#$Ц3
ЈСР СЕТНАМ
; Отворите логичку датотеку
ЈСР ОПЕН
; Подесите канал за излаз
ЛДКС #$40; логички број датотеке
ЈСР ЦХКОУТ ; за писање
;
; Излаз датотеке на диск
ЛДА #$01
СТА $2Б; ТКСТТАБ
ЛДА #$Ц1
СТА $2Ц
ЛДКС #00$
ЛДИ#$Ц2
ЛДА #$2Б
ЈСР САВЕ
; Затвори логичку датотеку
ЛДА #40$
ЈСР ЦЛОСЕ

Имајте на уму да је ово програм који чува други део меморије (не део програма) на диск (дискета за Цоммодоре-64).

5.9 Рутина ОС ЛОАД

Рутини ОС ЛОАД приступа се скакањем (ЈСР) на табелу скока ОС РОМ-а на $ФФД5. Када се део (велика област) меморије сачува на диску, он се чува са заглављем које има почетну адресу секције у меморији. Подпрограм ОС ЛОАД учитава бајтове датотеке у меморију. Са овом операцијом ЛОАД, вредност акумулатора мора бити 010 ($00). Да би операција ЛОАД прочитала почетну адресу у заглављу датотеке на диску и ставила бајтове датотеке у РАМ почевши од те адресе, секундарна адреса канала мора бити 1 или 2 (следећи програм користи 2). Ова рутина враћа адресу плус 1 највише РАМ локације која је учитана. То значи да се нижи бајт последње адресе датотеке у РАМ-у плус 1 ставља у регистар µП Кс, а високи бајт последње адресе датотеке у РАМ-у плус 1 ставља у регистар µП И.

Ако је учитавање неуспешно, µП А регистар садржи број грешке (могуће 4, 5, 8 или 9). Поставља се и Ц заставица регистра статуса микропроцесора (направљена 1). Ако је учитавање успешно, последња вредност регистра А није важна.

Сада, у претходном поглављу овог онлајн курса за каријеру, прва инструкција програма асемблерског језика је на адреси у РАМ меморији где је програм започео. Не мора да буде тако. То значи да прва инструкција програма не мора бити на почетку програма у РАМ-у. Инструкција за почетак програма може бити било где унутар датотеке у РАМ-у. Програмеру се саветује да означи почетак инструкција асемблерског језика са СТАРТ. Уз то, након што се програм учита, он се поново покреће (извршава) са следећом инструкцијом асемблерског језика:

ЈСР СТАРТ

„ЈСР СТАРТ“ је у програму асемблерског језика који учитава програм који треба да се покрене. Асемблерски језик који учитава другу датотеку асемблерског језика и покреће учитану датотеку има следећу процедуру кода:

  • Подесите канал користећи СЕТЛФС рутину.
  • Подесите име логичке датотеке (број) које је исто као и стварне датотеке диска користећи рутину СЕТНАМ.
  • Отворите логичку датотеку користећи ОПЕН рутину.
  • Учините то датотеком за унос користећи ЦХКИН.
  • Код за учитавање датотеке иде овде и завршава се са „ЈСР ЛОАД“.
  • Затворите логичку датотеку користећи ЦЛОСЕ рутину.

Следећи програм учитава датотеку са диска и покреће је:

; Подешавање канала
ЛДА #$40; логички број датотеке
ЛДКС #$08 ; број уређаја за први диск
ЛДИ #$02 ; секундарна адреса
ЈСР СЕТЛФС ; подешавање исправног канала
;
; Назив датотеке на диск јединици (већ у меморији на $Ц301)
ЛДА #$09 ; дужина имена датотеке
ЛДКС #$01
ЛДИ#$Ц3
ЈСР СЕТНАМ
; Отворите логичку датотеку
ЈСР ОПЕН
; Подесите канал за улаз
ЛДКС #$40; логички број датотеке
ЈСР ЦХКИН ; за читање
;
; Улазни фајл са диска
ЛДА #00$
ЈСР ЛОАД
; Затвори логичку датотеку
ЛДА #40$
ЈСР ЦЛОСЕ
; Покрените учитани програм
ЈСР СТАРТ

5.10 Модем и РС-232 стандард

Модем је уређај (периферијски) који претвара битове из рачунара у одговарајуће електричне аудио сигнале који се преносе преко телефонске линије. На пријемној страни налази се модем испред рачунара примаоца. Овај други модем претвара електричне аудио сигнале у битове за рачунар који прима.

Модем треба да буде повезан са рачунаром на екстерном порту (на вертикалној површини рачунара). РС-232 стандард се односи на одређени тип конектора који повезује модем са рачунаром (у прошлости). Другим речима, многи рачунари у прошлости су имали екстерни порт који је био РС-232 конектор или РС-232 компатибилан конектор.

Цоммодоре-64 системска јединица (рачунар) има екстерни порт на задњој вертикалној површини који се назива кориснички порт. Овај кориснички порт је компатибилан са РС-232. Тамо се може повезати модемски уређај. Цоммодоре-64 комуницира са модемом преко овог корисничког порта. РОМ оперативни систем за Цоммодоре-64 има потпрограме за комуникацију са модемом који се називају РС-232 рутине. Ове рутине имају уносе у табели скокова.

Број бауда
Осмобитни бајт из рачунара се конвертује у низ од осам битова пре него што се пошаље модему. Обрнуто се ради од модема до рачунара. Брзина преноса је број битова који се преносе у секунди, у серији.

Дно сећања
Термин „дно меморије“ не односи се на локацију меморијског бајта адресе $0000. Односи се на најнижу РАМ локацију на коју корисник може да почне да ставља своје податке и програме. Подразумевано је 0800 долара. Подсетимо се из претходне дискусије да многе локације између $0800 и $БФФФ користе БАСИЦ рачунарски језик и његови програмери (корисници). Остале су само адресе адресе од $Ц000 до $ЦФФФ за употребу за програме и податке асемблерског језика; ово је 4 кбајта од 64 кбајта меморије.

Врх меморије
У то време, када су клијенти куповали рачунаре Цоммодоре-64, неки нису долазили са свим меморијским локацијама. Такви рачунари су имали РОМ са својим оперативним системом од $Е000 до $ФФФФ. Имали су РАМ од $0000 до лимита, који није $ДФФФ, поред $Е000. Ограничење је било испод $ДФФФ и то ограничење се зове „Врх меморије“. Дакле, врх меморије се не односи на локацију $ФФФФ.

Цоммодоре-64 бафери за РС-232 комуникацију
Бафер за пренос
Бафер за РС-232 пренос (излаз) заузима 256 бајтова од врха меморије наниже. Показивач за овај бафер за пренос је означен као РОБУФ. Овај показивач је на нултој страници са $00Ф9 адресама праћеним $00ФА. РОБУФ заправо идентификује $00Ф9. Дакле, ако је адреса за почетак бафера $БЕ00, нижи бајт $БЕ00, што је $00, је на локацији $00Ф9, а виши бајт $БЕ00, што је $БЕ, је у $00ФА локација.

Рецеивинг Буффер
Бафер за пријем РС-232 бајтова (улаз) узима 256 бајтова од дна бафера за пренос. Показивач за овај пријемни бафер је означен као РИБУФ. Овај показивач је на нултој страници са адресама $00Ф7 иза којих следи $00Ф8. РИБУФ заправо идентификује $00Ф7. Дакле, ако је адреса за почетак бафера $БФ00, нижи бајт $БФ00, што је $00, је на локацији $00Ф7, а виши бајт $БФ00, што је $БФ, је у $00Ф8 локација. Дакле, 512 бајтова из врха меморије се користи као укупан РС-232 РАМ бафер.

РС-232 канал
Када је модем повезан на (екстерни) кориснички порт, комуникација са модемом је само РС-232 комуникација. Процедура за комплетан РС-232 канал је скоро иста као у претходној дискусији, али са једном важном разликом: име датотеке је код, а не стринг у меморији. Шифра $0610 је добар избор. То значи брзину преноса од 300 бита/сец и неке друге техничке параметре. Такође, не постоји секундарна адреса. Имајте на уму да је број уређаја 2. Процедура за подешавање комплетног РС-232 канала је:

  • Подешавање канала коришћењем СЕТЛФС рутине.
  • Постављање имена логичке датотеке, $0610.
  • Отварање логичке датотеке помоћу ОПЕН рутине.
  • Прављење датотеке за излаз користећи ЦХКОУТ или датотеке за унос користећи ЦХКИН.
  • Слање појединачних бајтова помоћу ЦХРОУТ или примање појединачних бајтова помоћу ГЕТИН.
  • Затварање логичке датотеке помоћу ЦЛОСЕ рутине.

ОС ГЕТИН рутини се приступа скакањем (ЈСР) на табелу скока ОС РОМ-а на $ФФЕ4. Ова рутина, када се позове, узима бајт који се шаље у бафер пријемника и ставља (враћа) га у µП акумулатор.

Следећи програм шаље бајт “Е” (АСЦИИ) модему који је повезан на кориснички РС-232 компатибилни порт:

; Подешавање канала
ЛДА #$40; логички број датотеке
ЛДКС #$02 ; број уређаја за РС-232
ЛДИ #$ФФ ; нема секундарне адресе
ЈСР СЕТЛФС ; подешавање исправног канала
;
; Назив за РС-232 је код, нпр. $0610
ЛДА #$02 ; дужина кода је 2 бајта
ЛДКС #10$
ЛДИ#$06
ЈСР СЕТНАМ
;
; Отворите логичку датотеку
ЈСР ОПЕН
; Подесите канал за излаз
ЛДКС #$40; логички број датотеке
ЈСР ЦХКОУТ
;
; Излазни знак на РС-232 нпр. модем
ЛДА #45 долара
ЈСР ЦХРОУТ
; Затвори логичку датотеку
ЛДА #40$
ЈСР ЦЛОСЕ

Да бисте примили бајт, код је веома сличан, осим што је „ЈСР ЦХКОУТ“ замењено „ЈСР ЦХКИН“ и:

ЛДА #45 долара
ЈСР ЦХРОУТ

се замењује са „ЈСР ГЕТИН“ са резултатом који се смешта у А регистар.

Континуирано слање или пријем бајтова се врши помоћу петље за слање односно пријем сегмента кода.

Имајте на уму да су улаз и излаз код Цоммодоре-а слични у већини случајева осим за тастатуру где неке од рутина не позива програмер, али их позива оперативни систем.

5.11 Бројање и мерење времена

Размотрите секвенцу одбројавања која је:

2, 1, 0

Ово је одбројавање од 2 до 0. Сада размислите о понављању секвенце одбројавања:

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

Ово је понављање одбројавања исте секвенце. Секвенца се понавља четири пута. Четири пута значи да је тајминг 4. У оквиру једне секвенце се рачуна. Понављање истог низа је тајминг.

У системској јединици Цоммодоре-64 постоје два Цомплек Интерфаце Адаптера. Свака ЦИА има два бројача/тајмер кола под називом Тајмер А (ТА) и Тајмер Б (ТБ). Коло за бројање се не разликује од временског кола. Бројач или тајмер у Цоммодоре-64 се односи на исту ствар. У ствари, било који од њих се у суштини односи на један 16-битни регистар који увек одбројава до 0 на импулсима системског такта. У 16-битни регистар се могу поставити различите вредности. Што је већа вредност, дуже је потребно за одбројавање до нуле. Сваки пут када један од тајмера пређе нулу, ИРК сигнал прекида се шаље микропроцесору. Када одбројавање падне изнад нуле, то се назива доњи проток.

У зависности од тога како је програмирано коло тајмера, тајмер може да ради у једнократном или континуираном режиму. Са претходном илустрацијом, једнократни режим значи „уради 2, 1, 0“ и заустави се док се импулси такта настављају. Континуирани режим је као „2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, итд.“ који се наставља са тактним импулсима. То значи да када пређе нулу, ако се не да инструкција, секвенца одбројавања се понавља. Највећи број је обично много већи од 2.

Тајмер А (ТА) ЦИА #1 генерише ИРК у редовним интервалима (трајања) за сервисирање тастатуре. У ствари, ово је подразумевано свака 1/60 секунде. ИРК се шаље микропроцесору сваке 1/60 секунде. Тек када ИРК се шаље да програм може да прочита вредност кључа из реда чекања на тастатури (бафера). Запамтите да микропроцесор има само један пин за ИРК сигнал. Микропроцесор такође има само један пин за НМИ сигнал. ¯НМИ сигнал микропроцесору увек долази од ЦИА #2.

16-битни тајмер регистар има две меморијске адресе: једну за нижи бајт и једну за виши бајт. Свака ЦИА има два круга тајмера. Две ЦИА су идентичне. За ЦИА #1, адресе за два тајмера су: ДЦ04 и ДЦ05 за ТА и ДЦ06 и ДЦ07 за ТБ. За ЦИА #2, адресе за два тајмера су: ДД04 и ДД05 за ТА и ДД06 и ДД07 за ТБ.

Претпоставимо да се број 25510 шаље на ТА тајмер ЦИА-е #2 ради одбројавања. 25510 = 00000000111111112 је у шеснаест битова. 00000000111111112 = $000ФФФ је хексадецимално. У овом случају, $ФФ се шаље регистру на адреси $ДД04, а $00 се шаље у регистар на адреси $ДД05 – мали ендианнесс. Следећи сегмент кода шаље број у регистар:

ЛДА #$ФФ
СТАТЕ $ДД04
ЛДА #00$
СТАТЕ $ДД05

Иако регистри у ЦИА-и имају РАМ адресе, они су физички у ЦИА-и и ЦИА је одвојена ИЦ од РАМ-а или РОМ-а.

То није све! Када се тајмеру додели број за одбројавање, као на пример са претходним кодом, одбројавање не почиње. Одбројавање почиње када се осмобитни бајт пошаље у одговарајући контролни регистар за тајмер. Први бит овог бајта за контролни регистар показује да ли одбројавање треба да почне или не. Вредност 0 за овај први бит значи престанак одбројавања, док вредност 1 значи да почиње одбројавање. Такође, бајт мора да назначи да ли је одбројавање у режиму једног ударца (једнократни) или у режиму слободног рада (континуирани режим). Једнократни режим одбројава и зауставља се када вредност регистра тајмера постане нула. У режиму слободног рада, одбројавање се понавља након достизања 0. Четврти (индекс 3) бит бајта који се шаље контролном регистру указује на режим: 0 означава режим слободног рада, а 1 означава једнократни режим.

Погодан број за почетак бројања у режиму једног ударца је 000010012 = 09 долара у хексадецималном. Погодан број за почетак бројања у режиму слободног рада је 000000012 = $01 у хексадецималном. Сваки регистар тајмера има свој контролни регистар. У ЦИА #1, контролни регистар за тајмер А има РАМ адресу ДЦ0Е16, а контролни регистар за тајмер Б има РАМ адресу ДЦ0Ф16. У ЦИА #2, контролни регистар за тајмер А има РАМ адресу ДД0Е16, а контролни регистар за тајмер Б има РАМ адресу ДД0Ф16. Да бисте започели одбројавање шеснаесто-битног броја у ТА ЦИА-е #2, у режиму једног ударца, користите следећи код:

ЛДА #09$
СТА $ДД0Е

Да бисте започели одбројавање шеснаест-битног броја у ТА ЦИА-е #2, у режиму слободног рада, користите следећи код:

ЛДА #$01
СТА $ДД0Е

5.12 Тхе ИРК и НМИ Захтеви

6502 микропроцесор има ИРК и НМИ линије (игле). И ЦИА #1 и ЦИА #2 имају ИРК пин за микропроцесор. Тхе ИРК пин ЦИА #2 је повезан са НМИ пин на µП. Тхе ИРК пин ЦИА #1 је повезан са ИРК пин на µП. То су једине две прекидне линије које повезују микропроцесор. Дакле, ИРК пин ЦИА #2 је НМИ извор и такође се може видети као ¯НМИ линија.

ЦИА број 1 има пет могућих непосредних извора генерисања ИРК сигнал за µП. ЦИА #2 је по структури иста као ЦИА #1. Дакле, ЦИА #2 има истих пет могућих непосредних извора за генерисање сигнала прекида овог пута који је НМИ сигнал. Запамтите да када µП прими НМИ сигнал, ако рукује са ИРК захтев, суспендује то и обрађује НМИ захтев. Када заврши са руковањем НМИ захтева, затим наставља са руковањем ИРК захтев.

ЦИА #1 се обично повезује споља са тастатуром и уређајем за игру као што је џојстик. Тастатура користи више порта А ЦИА #1 него порта Б. Уређај за игру користи више ЦИА #1 порта Б од свог порта А. ЦИА #2 је обично екстерно повезан са диск јединицом (повезан са штампачем) и модем. Диск користи више порта А ЦИА #2 (иако преко екстерног серијског порта) него свог порта Б. Модем (РС-232) користи више ЦИА #2 порта Б него његов порт А.

Уз све то, како системска јединица зна шта узрокује ИРК или НМИ прекидати? ЦИА #1 и ЦИА #2 имају пет непосредних извора прекида. Ако је сигнал прекида за µП НМИ , извор је један од непосредних пет извора из ЦИА #2. Ако је сигнал прекида за µП ИРК , извор је један од непосредних пет извора из ЦИА #1.

Следеће питање је: „Како системска јединица разликује пет непосредних извора сваке ЦИА-е?“ Свака ЦИА има осам-битни регистар који се назива контролни регистар прекида (ИЦР). ИЦР служи обема лукама ЦИА. Следећа табела показује значења осам битова регистра контроле прекида, почевши од бита 0:

Табела 5.13
Регистар контроле прекида
Бит Индек Значење
0 Подешено (направљено 1) помоћу доњег тока тајмера А
1 Подешено од стране тајмера Б
2 Подесите када је време у дану једнако аларму
3 Подесите када је серијски порт пун
4 Подешава спољни уређај
5 Не користи се (направљено 0)
6 Не користи се (направљено 0)
7 Поставите када је постављен било који од првих пет битова

Као што се може видети из табеле, сваки од непосредних извора је представљен једним од првих пет битова. Дакле, када се сигнал прекида прими на µП, код мора да се изврши да би се прочитао садржај регистра контроле прекида да би се знао тачан извор прекида. РАМ адреса за ИЦР ЦИА-е #1 је ДЦ0Д16. РАМ адреса за ИЦР ЦИА #2 је ДД0Д16. Да бисте прочитали (вратили) садржај ИЦР-а ЦИА #1 у µП акумулатор, откуцајте следеће упутство:

ЛДА$ДЦ0Д

Да бисте прочитали (вратили) садржај ИЦР-а ЦИА #2 у µП акумулатор, откуцајте следеће инструкције:

ЛДА $ДД0Д

5.13 Позадински програм вођен прекидом

Тастатура обично прекида микропроцесор сваких 1/60 секунде. Замислите да је програм покренут и да достигне позицију да сачека тастер са тастатуре пре него што настави са сегментима кода испод. Претпоставимо да ако се не притисне ниједан тастер са тастатуре, програм ради само малу петљу, чекајући тастер. Замислите да је програм покренут и да је управо очекивао тастер са тастатуре одмах након што је тастатура прекинута. У том тренутку, цео рачунар се индиректно зауставља и не ради ништа осим за петљу чекања. Замислите да се тастер на тастатури притисне непосредно пре следећег издања следећег прекида тастатуре. То значи да компјутер није урадио ништа око шездесетог дела секунде! То је доста времена да компјутер ништа не уради, чак ни у време Цоммодоре-64. Рачунар је за то време (трајање) могао да ради нешто друго. Постоји много таквих трајања у програму.

Други програм се може написати тако да ради у таквим временима „неактивности“. За такав програм се каже да ради у позадини главног (или првог) програма. Једноставан начин да се ово уради је само да се форсира модификовано руковање БРК прекида када се очекује тастер са тастатуре.

Показивач за БРК инструкцију
На РАМ узастопним локацијама адреса $0316 и $0317 је показивач (вектор) за стварну рутину БРК инструкција. Подразумевани показивач се ставља тамо када је рачунар укључен оперативним системом у РОМ-у. Овај подразумевани показивач је адреса која још увек указује на подразумевани БРК обрађивач инструкција у ОС РОМ-у. Показивач је 16-битна адреса. Нижи бајт показивача се поставља на локацију бајта адресе $0306, а виши бајт показивача на локацију $0317 бајта.

Други програм се може написати тако да када је систем „у мировању“, неки кодови другог програма се извршавају од стране система. То значи да други програм мора бити састављен од потпрограма. Када је систем „у мировању“ и чека тастер са тастатуре, извршава се следећа потпрограма за други програм. Људска интеракција са рачунаром је спора у поређењу са радом системске јединице.

Лако је решити овај проблем: сваки пут када рачунар мора да сачека тастер са тастатуре, убаците БРК инструкцију у код и замените показивач на $0316 (и $0317) са показивачем следећег потпрограма другог ( прилагођени) програм. На тај начин би оба програма радила у трајању које није много дуже од главног програма који ради сам.

5.14 Састављање и компилација

Асемблер замењује све ознаке адресама. Програм на асемблерском језику се обично пише тако да почиње на одређеној адреси. Резултат асемблера (након склапања) назива се „објектни код“ са свиме у бинарном систему. Тај резултат је извршна датотека ако је датотека програм, а не документ. Документ није извршан.

Апликација се састоји од више од једног програма (језик асемблера). Обично постоји главни програм. Ову ситуацију не треба мешати са ситуацијом за позадинске програме вођене прекидима. Сви програми овде су програми у првом плану, али постоји први или главни програм.

Компајлер је потребан уместо асемблера када постоји више од једног програма у првом плану. Компајлер саставља сваки од програма у објектни код. Међутим, постојао би проблем: неки сегменти кода ће се преклапати јер програме вероватно пишу различити људи. Решење компајлера је да помери све програме који се преклапају осим првог у меморијском простору, тако да се програми не преклапају. Сада, када је у питању складиштење променљивих, неке адресе променљивих би се и даље преклапале. Решење је да се адресе које се преклапају замене новим адресама (осим за први програм) тако да се више не преклапају. На овај начин ће се различити програми уклопити у различите делове (области) меморије.

Уз све то, могуће је да једна рутина у једном програму позове рутину у другом програму. Дакле, компајлер врши повезивање. Повезивање се односи на то да имате почетну адресу потпрограма у једном програму, а затим да је позовете у другом програму; оба су део апликације. Оба програма морају да користе исту адресу за ово. Крајњи резултат је један велики објектни код са свим бинарним (битовима).

5.15 Чување, учитавање и покретање програма

Асемблерски језик се обично пише у неком уређивачком програму (који може бити обезбеђен уз асемблерски програм). Програм за уређивање означава где програм почиње и где се завршава у меморији (РАМ). Кернал САВЕ рутина ОС РОМ-а Цоммодоре-64 може сачувати програм у меморији на диск. Он само избацује део (блок) меморије који може да садржи позив инструкције на диск. Препоручљиво је имати инструкцију за позивање САВЕ, одвојену од програма који се чува, тако да када се програм учита у меморију са диска, не би се поново сачувао када се покрене. Учитавање програма асемблерског језика са диска је друга врста изазова јер програм не може да се учита сам.

Програм се не може учитати са диска до места где почиње и завршава се у РАМ-у. Цоммодоре-64 је у то време обично био испоручен са БАСИЦ преводиоцем за покретање програма БАСИЦ језика. Када се машина (рачунар) укључи, поставља се са командном линијом: РЕАДИ. Одатле, БАСИЦ команде или упутства се могу укуцати притиском на тастер „Ентер“ након куцања. БАСИЦ команда (инструкција) за учитавање датотеке је:

ЛОАД “филенаме”,8,1

Команда почиње резервисаном речју БАСИЦ која је ЛОАД. Након тога следи размак, а затим назив датотеке у двоструким наводницима. Следи број уређаја 8 коме претходи зарез. После секундарне адресе диска која је 1, претходи зарез. Код такве датотеке, почетна адреса програма на асемблерском језику налази се у заглављу датотеке на диску. Када БАСИЦ заврши са учитавањем програма, враћа се последња РАМ адреса плус 1 програма. Реч „враћено“ овде значи да се нижи бајт последње адресе плус 1 ставља у регистар µП Кс, а виши бајт последње адресе плус 1 у регистар µП И.

Након учитавања програма, он се мора покренути (извршити). Корисник програма мора да зна почетну адресу за извршење у меморији. Опет, овде је неопходан још један БАСИЦ програм. То је СИС команда. Након извршења СИС команде, програм на асемблеру ће се покренути (и зауставити). Док је покренут, ако је потребан било какав унос са тастатуре, програм на асемблеру би то требало да укаже кориснику. Након што корисник унесе податке на тастатури и притисне тастер „Ентер“, програм на асемблерском језику ће наставити да ради користећи унос са тастатуре без сметњи од стране БАСИЦ тумача.

Под претпоставком да је почетак извршавања (покреће) РАМ адресе за програм асемблерског језика Ц12316, Ц123 се конвертује у базу десет пре него што је употреби са командом СИС. Претварање Ц12316 у базу десет је следеће:

Дакле, команда БАСИЦ СИС је:

СИС 49443

5.16 Покретање за Цоммодоре-64

Покретање за Цоммодоре-64 се састоји од две фазе: фазе ресетовања хардвера и фазе иницијализације оперативног система. Оперативни систем је Кернал у РОМ-у (а не на диску). Постоји линија за ресетовање (у ствари РЕС ) који се повезује на пин на 6502 µП и на исто име пина на свим специјалним бродовима као што су ЦИА 1, ЦИА 2 и ВИЦ ИИ. У фази ресетовања, због ове линије, сви регистри у µП и у специјалним чиповима се ресетују на 0 (направљена нула за сваки бит). Затим, хардвером микропроцесора, показивач стека и регистар статуса процесора су дати са својим почетним вредностима у микропроцесору. Програмски бројач се затим даје са вредношћу (адресом) на локацијама $ФФФЦ и $ФФФД. Подсетимо се да програмски бројач садржи адресу следеће инструкције. Садржај (адреса) који се овде чува је за потпрограм који започиње иницијализацију софтвера. Све до сада ради хардвер микропроцесора. Цело памћење се не дира у овој фази. Затим почиње следећа фаза иницијализације.

Иницијализацију обављају неке рутине у РОМ ОС-у. Иницијализација значи давање почетних или подразумеваних вредности неким регистрима у специјалним чиповима. Иницијализација почиње давањем почетних или подразумеваних вредности неким регистрима у специјалним чиповима. ИРК , на пример, мора да почне да се издаје сваке 1/60 секунде. Дакле, његов одговарајући тајмер у ЦИА #1 мора бити подешен на своју подразумевану вредност.

Затим, Кернал врши РАМ тест. Он тестира сваку локацију тако што шаље бајт на локацију и чита га назад. Ако постоји разлика, бар је та локација лоша. Кернал такође идентификује врх меморије и дно меморије и поставља одговарајуће показиваче на страници 2. Ако је врх меморије $ДФФФ, $ФФ се ставља на локацију $0283, а $ДФ се ставља на локацију $0284 бајтова. И $0283 и $0284 имају ознаку ХИРАМ. Ако је дно меморије $0800, $00 се ставља на локацију $0281, а $08 се ставља на локацију $0282. И $0281 и $0282 имају ознаку ЛОРАМ. Тест РАМ-а заправо почиње од 0300 долара до врха меморије (РАМ).

Коначно, улазни/излазни вектори (показивачи) су постављени на своје подразумеване вредности. Тест РАМ-а заправо почиње од 0300 долара до врха меморије (РАМ). То значи да су страница 0, страница 1 и страница 2 иницијализоване. Страница 0, посебно, има много ОС РОМ показивача, а страница 2 има много БАСИЦ показивача. Ови показивачи се називају променљивим. Запамтите да је страница 1 стек. Показивачи се називају променљивим јер имају имена (ознаке). У овој фази, меморија екрана се брише за екран (монитор). То значи слање кода од 20 УСД за простор (што је исто као АСЦИИ 20 УСД) на локације екрана од 1000 РАМ-а. На крају, Кернал покреће БАСИЦ интерпретер да прикаже БАСИЦ командну линију која је РЕАДИ на врху монитора (екрана).

5.17 Проблеми

Читаоцу се саветује да реши све проблеме у једном поглављу пре него што пређе на следеће поглавље.

  1. Напишите код на асемблерском језику који чини све битове ЦИА #2 порта А као излаз и ЦИА #2 порта Б као улаз.
  2. Напишите код језика са 6502 склопа који чека тастер на тастатури док се не притисне.
  3. Напишите програм на језику 6502 који шаље знак „Е“ на екран Цоммодоре-64.
  4. Напишите програм на језику 6502 који узима знак са тастатуре и шаље га на екран Цоммодоре-64, игноришући шифру тастера и тајминг.
  5. Напишите програм на језику 6502 који прима бајт са Цоммодоре-64 дискете.
  6. Напишите програм на језику 6502 који чува датотеку на Цоммодоре-64 дискети.
  7. Напишите програм на језику 6502 који учитава програмску датотеку са Цоммодоре-64 дискете и покреће је.
  8. Напишите програм на језику 6502 који шаље бајт „Е“ (АСЦИИ) модему који је повезан са корисничким РС-232 компатибилним портом Цоммодоре-64.
  9. Објасните како се рачунање и мерење времена обављају у рачунару Цоммодоре-64.
  10. Објасните како системска јединица Цоммодоре-64 може да идентификује 10 различитих извора захтева за тренутне прекиде, укључујући непрекидне захтеве који се не могу маскирати.
  11. Објасните како програм у позадини може да ради са програмом у првом плану на рачунару Цоммодоре-64.
  12. Укратко објасните како се програми асемблерског језика могу саставити у једну апликацију за рачунар Цоммодоре-64.
  13. Укратко објасните процес покретања рачунара Цоммодоре-64.