Gebruikers handboek Machinetaal Monitor VICMON

download Gebruikers handboek Machinetaal Monitor VICMON

of 28

Transcript of Gebruikers handboek Machinetaal Monitor VICMON

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    1/28

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    2/28

    Deze manual is geheel herzien en ormag van verwacht worden, dat dat-gene van wat er in staat klopt.Wij kunnen eehter geen verantwoor-delijkheid dragen veer eventuele te-kortkomingen.De gegevens die kunnen worden ont-leend aan dit manual, zijn aileen be-doeld als naslagwerk en mogen wor-den veranderd zonder voorafgaandemededeling.C opyright c 1981 handic Benelux B.V.A ile reehten voerbehouden. N iets ult dezeuitg8ve mag worden verveelvoudigd. on/ofopenbaar gemaakt. zonder yoorafgaandeschriftelijke toestemmlng van handic BeneluxB.V.handle Benelux B.V.Westerweg 198, 1852 AP Heileo,tel. 072-337644Postbus 213, 1850 AE Heiloo.Telex: 57065

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    3/28

    GEBRUIKERSHANDBOEKMACH INETAAL M ONITOR VICM ON

    Hoofdstuk 1 - Introduktie VICMON1.1 lntroduktie , . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 31.2 Hat VICMON Handboek . . . . . . . . . . . .. 31.3 VICMON-funkties ",.~.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 31.4 Opstarten van hat VICMON-systeem . . . . . . . . . . . . . . . . . . . . . . . . . . .. 31.5 Komrnendo-Iorrnaat . . . . .. . . . . . . . . . . . . . . . . . . . ... . . . .. . . . . . . . .. 41.6 Kommando-invoering . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . .. 41.7 Foutmeldingen '. . . . . . . . . . . . . . . 4Hoofdstuk 2 - DeVICMON-kommando's2.12.22 . 32.3.12 . 3 . 22.3.32 . 3 . 42.3.52.3.62.3.72 . 3 . 82.3.92.3.102.3.112.3.122.3.132.3.142.3.152.3.162.3.172.3.182.3.19

    lntroduktie .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 5Conventies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 5De kommando's. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 5A - Assemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5B - Breakpoint. . . . . . . . . . . .. . . . . . . . . . . . .. .. . . .. . .. .. 6D .- Disassemble. .. .. .. 7E - Enable virtual zero page.. . . . . . . .. . . . .. . .. . . . . . .. . . .. 8F - Fill memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 8G - Go ................................................ 9H - Hunt. ,........................... 9I - Interpret 10J - Jump 10l - load 11M - Memory display . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 11N - Number ........................................... 12Q - Quick trace ....................................... , 13R - Registers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 13RB - Remove Breakpoint , 14S - Save ................................................ 14T - Transfer '" 15W - Walk .............................................. 15X - Exit to BASIC .................................. 16

    Hoofdstuk 3 - Het gebruik van VICMON als Debugging.gereedschap3.1 Introduktie ......................... 173.2 Het voorbeeld programma .. , ...... , 173.3 Her proqrarnrna f " , l f f , flit If" , r J f t I ., " ., , , t l 183.3.1 lnvoeren van het programma . " ....... f.', .... 183.3.2 Het lokaliseren van de fout ... , .. "....... 193.4 Samenvatting , . f ~ t " t , , , , , w t '" 21Index lit , l i t . l i t " " 1 .. ' 1 f '''., , t t t ' 23

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    4/28

    INHOUDSOPGAVEVAN DE AFBEEL.DINGENAfbeelding Titel1.1 Eerste VICMON Display (voorbeerdl . . . . . . .. . . .. . . . . . . . . . . . . .. 42.1 Register Display " . . . . . . . . . . . .. 72.2 Character String Display (voorbee!d) , 102.3 Display van drukbare karakters (voorbeeld) 102.4 Register Display (voorbeeld) 143.1 Stroomdiagram van voorbeeld-programma 173.2 Resultaat van de eerste uitvoerinq van het voorbeeld-programma 193.3 Scherm gevuJd met A's ....................................... 20

    2

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    5/28

    HOOFDSTUK1INTRODUKTIE VICMON

    1.1 Introduktie Hoofdstuk 2 - De VICMON kommando'sVICMON is de bijnaam van de hexa-. In dit hoofdsruk wordt elk kommandodecimate machinetaalmonircr welkeA. uitgelegd, hat tormaat besproken enontworpen is om een rnachinetaal- 'een voorbeeld gegeven. De komrnan-programma aanwezig in het geheugen do's worden in alfabetiscne volgordevan een VIC-20 cornputersvsteem een- behandeld.voudig van fouten te kunnen ontdoen(debugging) .Dit handboek heeft niet de pretentie umachinetaal te leren programmeren opdeVIC.Voordat een poging tot machinetaalprogrammeren waagt, dient u de vel-gende handleidingen te lezen:MOS 6502 programming manualsVIC programmers reference guideVIC zero page memory mapOok nuttig om te lezen is:6502 Assembly Language Programming(door Leventhal).Deze boeken zijn verkrijgbaar bij derneeste COMMODORE Computer-handelaars.VICMON en deze handleiding zijn be-stemd voor diegenen met enige pro-grammeerervaring en enige kennis van6502 CBM machinetaalprogrammering,maar grate vaardigheid is niet vereist.

    1.2 Het VICMON HandboekDeze handleiding is in drie delen opge-splitst en wei als volqt:Hoofdstuk 1 -lntroduktieDit hoofdstuk geeft in grate lijnen aanwat VICMON is. Het geoft aan weikeconventies gebruikt worden bij hot be-schrijven van de kornmando-formaten.Oak wordt beschreven hoe men deVICMON moet opstarten.

    Hoofdstuk 3 -Het gebruik van VICMONals Oebugging-gereedschapDit hoofdstuk maakt gebruik van eenmachinetaalprogramma am aan tegaven hoe VICMON gebruikt kan wor-den am fouten in het programma telokaliseren.1.3 VICMON funktiesVICMON biedt u de volgende funkties:.. Het tonen van gekozen geheugen-gebieden... Het veranderen van de inhoud vangeheugen-lokaties... Het verhuizen van de geheugen-blokken,.. Het vullen van geselekteerde ga-heugenblokken... Het zoeken in het geheugen naareen bepaald patroon.... Het onderzoeken en veranderenvan registers... Het bepalen van breekpunten.'"' Het uitvoeren van programma's metbreekpunt-kontrole ... Het opslaan en terughalen van dataen programma's." Het uitvoeren van programma's opdrie verschillend instelbare snel-heden.1.4 Het opstarten van hetVICMON-systeemDe VICMON-cassette moet altijd ver-wijderd of aangebracht worden met destroom uit. De cassette dient altijd met

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    6/28

    label omhoog in de expansiepoort vandeVIC aangebracht teworden.Indien u een VIC-1010 Memory Expan-sion Board gebruikt, dient u ook hier-voor de stroomtoevoer te onderbreksn.VICMON kan gebruikt worden sarnenmet de VIC-1212 Programmers Aiden/of de VIC-,211A Super Expandercassette's.NOTA: Sommige handelingen kunnenelkaar tegenwerken als 1I van de enenear de andere cassette wisselt. Ditkan tot gevolg hebben dat de VIC uit-geschakeld dient te worden om dewisseling te maken.VICMON kan ook gebruikt wordenmet de expansie RAM op het MemoryExpansion Board.Om de VICMON te starten tvpt uSYS24576 of SYSS"4096, daarnadrukt Uop de RETURN-toets.Het VIC-scherm za t nu de waardentonen welke opgeslagen zijn in deregisters van de 6502. Een voorbeeldhiervan ziet u in afbeelding 1.1VICMON is nu klaar om uw komman-do's te accepteren.

    Figuur 1-1. Eerste VICMON Display1.5 Kommando-formaatDe meeste VICMON-kommando's be-staan uit een enkel alfabetisch karak-ter gevolgd, indien nodig, door dekommando-parameters. De kornrnan-do's worden gedetaiHeerd uitgelegd in

    4 hoofdstuk 2.

    De parameters omvatten start adres ofstart en eind-adressen, op-kodes, ope-rands, hex-waardes enz. De conven-ties an beperkingen voor de para-meters worden gedefinieerd in sektie2.2.Kommando's lbehalve J) worden be-eindigd door hat indrukken van deRETURN-toets. Ook hun uitvoeringwordt hierdoor ge'initialiseerd.Een korte samenvatting van de kom-mando's, hun formaat en waar ze be-schreven worden vindt U op de achter-kant van deze handleiding.1.6 Het invoeren vankommando'sTerwijl de VIC onder VICMON werktziet u het prornpt-teken ":", Om eenkommando in te voeren tvpt u de korn-mandoletter(s) en de oarameterts). In-dien meer dan een parameter nodig is,dient u deze te scheiden met spaties,kornrna's, dubbele punten of enigander svrnbool. Het kommando wordtbeeindiqd en qemitialiseerd door hetindrukken van de RETURN-toets (be-halve J).1.7 Fout-indikatiesAile door u gemaakte fouten tijdenshet invoeren van een kornrnando-ver-klaring worden aangegeven door eenvraagteken na de gemaakte fout. Ukunt de fout herstellen door deze overte tvnen of door gebruik te maken vande standaard VIC editing faciliteiten.Om het gecorrigeerde kommando teinitialiseren drukt U op de RETURN-toets,

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    7/28

    HOOFDSTUK 2DE V ICM ON KOMMANDO 's

    2.1 IntroduktieIn hoofdstuk 2 wordt elke VICMON-kommando in alfabetische vofgordegegeven.Het vereiste formam wordt getoond enhet doel en de funktie van het kom-rnando wordt verklaard. Een simpelvoorbeeld is bijgevoegd, inhoudendehet kornrnando, een typisch antwoordop het kommando en een verklaringvan de resultaten na de uitvoering.In hoofdstuk 3wordt eenmachinetaal-programma gebruikt als een meer ge-detailleerd voorbeeld van het toutenzoeken met behulp van VICMON.

    2.2 ConventiesDe parameters van het komrnando-formaat zijn als voigt:(addr) een twee byte hex-ad resb.v.0400(dev) een enkel byte hex-numrner b.v. 08(apk~de) een geldige 6502 assern-bleer mnemonic b.v. LOA(operand) een geldige operand voorde voorgaande instruktieb.v. #$01(value) een enkele byte hex-

    waarde b.v. FF(data) een string letterlljke data,om geven door aanhalings-tekens of hex-waarden,Opeenvolgende delen wor-den door komma's ge-scheiden.(ref een twee byte hex-adresb.v.2000(offset) een twee byte hex-offset-waarde b.v. 3000

    2.3. Dekommando's2.3.1 A - ASSEMBLEFormaat: A{addr) (opkode)(operand)Doel: Het assembleren van ko-de startende bij een be-p aa !d s dre s.Oit kornrnando geeft u de mogelijkheidassernbleerkode regel voar regel in tevoeren en het op te bergen alsmachinetaal. Als het kornrnando wordtingebracht, wordt de bijbehorendekode in het geheugen geschreven aanher begin van het opgegeven adres.Het adres van de volgende aanwezigegeheugenplaats volgend op die aan-gegeven door de gespecificeerde op-kode en operand, word! geprompt inafwachting van de input van nieuwekode.Om het A-kommando te beeindiqendient u op RETURN te drukken zodrahet nieuwe adres wordt geprompt.Als u een iIIegale opkode ot operandinbrengt, zal VICMON een vraagtekenachter de iIIagale grootheid plaatsen enu daarna terugbrengen in de monitormet een prornptteken (.) OP eennieuwe regel.Als u vergeet de opkode en/of deoperand to specificeren, zal VICMON uterugbrengen in de monitor met aenprornptteken (.) op een nieuwe regel.N.8.: Aile operands moeten als hexa-decimate getal/en worden gegeven,voorafgegaan door een dollartekenb.v. snn.Voorbeeld: Om de volgende machinetaal kode in te brengen beginnende opadres $1000.

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    8/28

    'Kommando: A 1000lDA #$19{return}.A 1000 LDA #$19.A 1002JSR$FFD2 (return).A 1000 LOA #$19.A l002JSR $FFD2,A 1005RTS (return).A 1000 LDA #$19.A 1002 JSR $ FFD2.A 1005 RTS.A 1006

    display:Intypen:display:

    Intypen:display:

    Resultaat: Hat machinataal equiva-lent van de gespecificeerde assernbleer-kode is in het geheugen opgesJagenvan lokatie 1000 tot en met 1005.2.3.2 B - BreakpointFormaat:of: B(addr)B(addr),nwaarbij n een viercijferighex-nummer is welk aan-geeft hoeveel keer dit

    adres bezocht wordtvoordat het breekpunt inwerking treed,Het instellen van eenbreekpunt, zodat eenprogramma niet volledigwordt uitgevoerd, maardaarentegen stopt op hetvooraf ingestelde breek-punt.

    Doe!:

    6

    Een breekpunt geaft u de mogelijkheidom uw programma uit te voeren toteen bepaald adres.Indien u G gebruikt om de uitvoering teinitiafiseren (sie sektie 2,3.6), wordt delnhoud van de registers autornatischgetoond, waardoor u de mogelijkheidheeft om te zien of de inhoud overeenkomt met uw verwachtingen.Bij het gebruik van de Q-mode van

    uitvoering Izie 2,3.131 zal het program-ma ook op het breekpunt stoppen,maar de inhoud van de registers wordtniet getoond. U wordt dan overgezetnaar de W-mode (zie 2_3.18). Om deregisters te tonen dient u op de STOP-toets te drukken en daarna hat R-kommando ta gebruiken (zie 2.3.141.let wei, de uitvoering eindigt voordatde instruktie op het gespecificeerdeadres is uitgevoerd .U dlenr er goed op te letten dat u geenbreekpunt invoegd tussen een opkodeen zijn operand of in het midden vandata. Door dit te doen wordt hetbreekpunt overgaslagen en de uitvoe-ring van het programma wordt onvoor-spelbaar.Het is mogelijk een adres een gespeci-ficeerd aantal malen uit te voeren en testoppen bij de daarop volgende keer,Dit wordt gedaan door het specificerenvan het aantal herhalingen (de n in hetbovenstaande formaatl, Indien geenaantal wordt gegeven na het adres, zalhet programma stoppen na de eerstekeer dat het adres uitgevoerd is.Tik het breekpunt kommando in endruk op RETURN. Voer nu het pro-gramma uit met het G- of het Q-kom-mando. Het programma zal nu uitge-voerd worden tot het breekpunt endaarna stoppen. tenzij het programmalogische Iouten bevat welke voor-komen dat het gespecificeerde adresbereikt wordt.Men kan slechts een breekpunt instel-len voor het programma uitgevoerdwordt. Indian een breekpunt is bereikt.kan aen nieuw breekpunt ingesteldworden. U kunt de programma-uitvoe-ring opnieuw starten na een breekpuntdoor rniddel van onverschillig welk uit-voerings-kommando (G,Q,W,J), ubent dus niet beperkt in de keuze vanhet uitvoerings-kommando.lndien een breekpunt nlet wordt be-reikt, kan de uitvoering stop gezetworden d.m.v, het indrukken van de

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    9/28

    Het D-kommando stelt u in sraat demachinetaal-kode welke in het geheu-qen van de computer is opgeslagenweer om te zetten in assembleertaal-Voorbee,ld: Neem san d8t,U een pro-... notatie. U kunt een beginadres specifi-gramma 10 geheugen tokatie 1000 tot \ ceren, in welk geval de kode op dat1200 heett. Om het programma te ad res gedisassembleert an op hetstoppen voor 1050: scherm gatoond zal worden.Kommando: B 1050 (return) De VIC zsl in de disassembleer-modeKommando: Q 1000 (return) blijven en u kunt de cursor gebruikenResultaat: Het programma zal lang- om meerdere regels machinetaal tezaam uitgevoerd worden, terwijl het disassembleren. De cursor-down-toetsstopt voordat regel 1050 uitgevoerd is. zal zodoende de regel volgende het op-U blijft in de WALK-mode. gegeven adres disassembleren en decursor-up-toets zal de voorgaanderegels disassembleren. De disassem-blage begint echter niet voordat decursor de bodern (of de top) van hetscherm bereikt en het scrollen begint.

    STOP-toets en de RESTOREtoets,Hierdoor keen u terug in BASIC, Udient dan VICMON weer op te startenen het breekpunt vroeger te zetten amuw probleem te isoleren Izie hoofdstukdrie).

    Voorbeeld: Het instellen van eenbreekpunt, zodanig dat het programmastopt bij de derde maal dat lokatie 1100bereikt wordt:Kommando: B 1100, 0003 (return)Kommando: G 1050 (return)Resultaat: Het programma zal uitqe-voerd worden, terwijl het stopt voordatloka tie 1100 voor de derde maal wordtuitqevoerd. De inhoud van de registersop dit punt zullen worden getoond inhet torrnaar zeals in atbeelding 2.1

    Figuur 2-1 . Register Display2.3.3 0 - DISASSEMBLEFormaat: D(addr)of: Dtaddn.taddr]Doel: het disassembleren vanmachinetaal op een bepaald punt oftussen bepaalde punten.

    N. B.: Voorw8arts of ecbterwesnsscrollen met de cursor bewegings-toetsen zet bet dissssembleren voort.

    Waarschuwing: Bij het terugwaartswerken met de cursor-toetsen kan hetvoorkomen dat er geen juiste vertalingvan de rnachine tae l- kode p laa tsv ind,A!s tweede optie heeft u de mogelijk-heid om een bepaalde groep vanadressen te disassembleren. De qe-specificeerde regels worden op hetscherrn getoond. Indian u een qroep :adressen specificeerd welke te groot isom in een keer op het scherm getoondte worden, zal het scherm gaan scrol-len. De STOP-toets onderbreekt hetscrollen terwijl u in de disassembleer-mode blijft. U kunt volgende regelsdisassembleren met de cursor-down-toets.U kunt, terwijl u in de disassembleer-mode bent, een op het scherm getoon-de rege!-kode veranderen door deregel overnieuw te typen of te corri-geren en daarna RETURN in te druk-ken. Het A-kornmando wordt hierdoorautomatisch geaktiveerd. Nadat u deverandering heett aangebracht, blijft uin de A-mode, terwijl de cursor ga-

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    10/28

    positioneerd blijft na bet adres op deregel welke voIgt op de gckorrigeerderegeLOm de assembleer-mode te verlaten,schoont u het scherm en drukt u opRETURN.Voorbeeld: Het disassembleren vande machinetaat-kode welke u in netassembteer-kommando voorbeeld heeftingevoerd en dsarna het adres in detweede regel veranderen naar FFDO:Kommando: D 1000, 1005 (return)Display: .1000LDA #$19. 1 002 JSR$FFD2.1005 RTSAKTIE: Positioneer de cursor opde2 in FFD2o (return).1000 LOA #$19.A 1002 JSR$FFDO.A 1005RTSResultaat: De kode in lokatie 1000tot 1005 is gedisassembleerd. De ver-andering is gemaakt en opgeslagend.m.v. de RETURN-toets. U bent nunog steeds in de assembleer-mode.

    Intypen:Display:

    2.3.4 E - ENABLE VIRTUALZERO PAGEFcrmaat: E(aadr)Doel: Hat wegzetten van eenvirtuele zero page zodat VICMONniet uw variabelen verwart.V1CMON gebruikt lokatie $00 tot loka-tie $11 van de zero page. De Kernal ge-brulkt de rest van de zero page ensommige van de $200 tot $800pagina's. Sinds uw programma varia-belen kan toewijzen welke op de zeropage worden opgeslagen, kan de uit-voering van het programma sornrniqevan de daar reeds opgeslagen ge-gevens verwarren. Om dit te voor-komsn geeft het E-kommando u demogerijkheid am een virtuele zero pagevan 255 bytes op een andere lokatie to8

    ptaatsen. Afs u een virtuele pagina be-noemt heeft en u uw programma uit-voerd, zal VICMON automatisch de in-houd van de zero page wisselen metinhoud van de virtue!e zero page, hier-door de informatie van VICMON enKernal beschermende. Op het momentdat de programma-uitvoering wordtgestopt, worden deze pagina's op-nieuw gewisseld.Om de virtuete zero page uit te schake-len als het programma korrekt loopt, ishet voldoende am het E-kommando tegebruiken met het zero page adres b. v .E O O O OVoorbeeld: Her instellen van zercpage beginnende op lokatie $1000:Kommando: E 1000 (return)Resultaat: De lokaties $1000 to'$10FF worden als virtuele zero pageopzij gezet .2.3.5. F- FILL MEMORYFormaat: Fladdrl, (addr), Iwaarde)Ooel: Het vullen van het geheugen met een bepaalds

    waarde tussen twee gegeven adressen.Het F-kommando stelt u in staat eerbepaalde waarde in een gegeven qe-heugenblok te plaatsen. Dit is bruik-baar voor hat initialiseren van data-strukturen of voor het leegmaken vande inhoud van enig RAM-gebied.U dient aan te geven in welk geheu-genblok u wenst ta schrijven en melwelk patroon dit dient te geschieden.Natuurlijk moet u geen adres specifi-ceren van $0000 tot $01FF (page zeroen een). Oak als er een virtuele zeropage gebruikt wordt (zie het E-kom-mando, sektie 2.3.4). dient u hetschrijven in dit gebjed te vermijden.Voorbeeld: Het vullen van lokatie$1000 tot en met lokatie $2000 met deno-on instruktie $EAKommando: F 1000,2000.EA (return)

    b $UtI . s 21JUC!UIlQ,l=='

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    11/28

    Resultaat: de no-eo insrruktie t$EAl terug in BASIC en zult VICMON weerwordt in alte adressen tussen $1000en op mceten starren.$2000 qeschreven. N. B.: A's uw programma bet scbetmG GO entot de tetterkieuren vemnderd heeit,~~;"!aat: - G is bet moge/ijk dst de register displayof: G(addr) of READY niet zichtba.ar lifn.Doel: Het uitvoeren van een.. Voor een andere marrier van program-programma beginnende op de lokatie:". ma-uitvoering zie de kommando's J,in de pr.ogrammateHer of beginnende . Wen a, resp. sektie 2.3.9, 18 en 131.opeen gegeven adres. N.B.: Het frek.went gebruiken vanHet G-kommando kan alleenstaand of breekpunten ken voorkomen det eensamenmet eenadres gebruikt worden. programma "op hoI slset",Indien G alleenstaand wordt gebruikt, Voorbeeld: Neem aan dat er eenzat VICMON het in het geheugen aan- programma in het geheugen is en uwezige programma uitvoeren begin- wilt de uitvoering starten beginnendenende op de lokatie welke op dat rno- op lokarie $2000.ment in do programmateller aanwezigis. (Om de inhoud van de programma- Kommand: G 2000 (return)teller te tonen gebruikt u het R-kom- Resultaat: De registers worden her-rnando, zie 2.3.141. Indien een adres steld, De programmateJler wordt opwordt gespecificeerd door het Gvkorn- $2000 gezet. Indien een virtuele zeromando, begint de uitvoering op het ge page aanwezig was, is deze nu gewis-geven adres. seld met V1CMON's zero page. DeHet G-kommando hersteld de registers programma-uitvoering begint op $2000in hun laatst bekende staat en, indien 2.3.7 H _ HUNTer een virtuele zero page aanwezig is Forrnaat: Hladdr). Iaddr), (data)(zie het E-kommandol. wisseld VIC-MON's zero page met de virtuele zero Doel: Het zoeken in een ge-page. De programma-uitvoering gaat specificeerd geheugenblok en het 10-door tot een van te voren bepaald kaliseren van bepaa!de data- of karak-breekpunt wordt bereikt (zie het B. terstrings.kommando) of tot het programma- Het H-kommando is in stsat am op eeneinde wordt bereikt, tenzij het pro- gemakkelijke manier enig gespecifj~gramma logische fouten bevat. ceerd karakterpatroon in het compu-Ats de uitvoering door lenbreekpunt tergeheugen op te sporen en op hetwordt onderbroken, wordt de inhoud scherm te tonen. U kunt dit kornrnan-van de registers op dat moment ge- do gebruiken am data, opgegeven intoond. A!s de programma-uitvoering hex, te zoeken, of am tekststrings nietwordt beeindiqd door RTS, wit u bij langer dan 88 karakters (1 regel) tehet bereiken van dlt kommando teruq- zoeken. Deze tekststrings moeten let-vallen in BASIC. Indien het laatste tadijk worden gespecificeerd en voorafkommando BBK is, wit u bij het be- gegaan worden door een enkel aan-reiken van dit kommando terugvallen haiingsteken(').in VICMON. Indian geen terminator Aile lokaties binnen het opgegeven(beeindiqer) wordt bereikt door pro- blok welke de gezochte karakters be-gramrnafouten, wit u de uitvoering vatten, zullen getoond worden. Indianmoeten stoppen d.rn.v. de STOP- en er meer karakters zijn dan er op hatRESTORE-toetsen. U bent dan weer scherm passen, zal het scherm gaan

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    12/28

    'scr611en. Het gebruik van de STOP-toets beeindiqd lowe! hat serollen alshat Hunt-kornmando en geeft u terugaan VICMON. De CTRL-toets kan hetscroll en langzaam doen venopen. Alsalle in her geheugenblok voorkomendegewenste karakters gelokaliseerd liin,wordt u terug gezet in VICMON.Voorbeeld: Wij gaan er van uit dat dedatastring $A92F3C erqens tussen defokaties $ C O O D en SCOFF in hat ge-haugen is. Om deze string te lokali-seren:Kommando: H COOO,COFF,A9,2F,3C(return)Resultast: Het geheugen wordt door-zocht tussen $C1000 en SCOFFen delokatie waar $A92F3C zich bevindwordt getoond.Voorbeeld: Neem nandat het woordCOMMODORE opgeslagen is in hatgaheugen op drie ptaatsen tussen$2000 en $3000Kommando: H 2000,3000,'COMMO-DORE (return) .Display: zie afbeelding 2.2

    Figuur 22. KS fskte r S tring Disp lay

    10

    2.3.S I - INTERPRETFormaat: Haddr}, (addr)of: HaddrlDoel: Het lokalisaren en tonenvan printbare tekstkarakters binneneen gegeven geheugenblok.

    Hot l-kommando za t aile binnen netgespecificeerde ueheugenblok voor-komende 96 printbare CBM ASCII ka-rakters in omgekeerd (inverse) videoop het scherm tonen. AUe anderekarakters binnen dit blok worden dooreen punt {.I aangegeven. Als hat blokgrater dan het scherm is, zal dit gaanscrollen. U kunt het scro!len langzamerlaten verlopen d.m.v. de CTRL-toetsen stoppen d.m.v. de STOP-toets. Alsde gespecifieeerde INTERPRET be-eindigd is, blijft u in de I-mode. Doorop de cursor-down-toets te drukkenzullen de op de volgende regets voor-Komenda CBM ASCII karakters qe-toond worden als het seherm scrollt.Voorbeeld: Neem aan dat de hex-kodes voor C, carriage return, linefeod, CB, carriage return, line feed enCBM, carriaqe return, line feed opqe-slagen zijn beginnende op lokatie 1000:Kommando: 11000 (return)Display: zie afbeelding 2.3

    Figuur 2-3. Display vall drukberekarakters

    2.3.9 J - JUMPFormaat: JDoel: Hat uitvoeren van eensubroutine aanrcep en het terugkomenzonder single-stepping tijdens het uit-voeren van een programma in de W-kornmando-rnode.Het W-kommando voert uw program-ma's regel voor regel uit, het waeht opeon input van u alvorens verder te

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    13/28

    gaan. Het kan voorkomen, dat terwijl uin deze mode bent, u plotseling eensubroutine wenst uit te voeren, indienu deze b.v. reeds door middel vansingle-stepping heeft gekontroleerd. Uwilt dan sne! door de subroutine heengaan slke keer dat deze wordt uitge-voerd. Dit is mogelijk met het Jkom- .mando. Als de regel welke de sub-."routine bevat getoond wordt, drukt uop de Jtoets. Het is nlet nodig oak deRETURN-toets in te drukken. Let op,de J zal niet op het scherm getoondworden ITijdens het uitvoeren van het .l-kom-mando wordt het juiste retum-adresop de stack gezet en de subroutinewordt uitgevoerd. Als de laatste RTS-instruktie wordt tegengekomen, wordtde p rogrammate lle r -we rod- -geladenme thet return-ad res welke op de stack wasgezet. U bent dan weer terug in deWALK-mode.Voorbeeld: U bent in de WALK-mode en de votgende kode is op hetscherm te zien:147F LOA #$001481 JSR$A2C7Kommando: JResultaat: $1484 wordt op de stackgezet. De subroutine beginnende op$A2C7 wordt uitgevoerd. Als RTSwordt bereikt, wordt de stack in deprogrammateller gepopt (geladen). Ubent weer terug in de W-mode.2.3.10 L- LOADFormaat: L "FILE NAAM", (dev)Doel: Het laden van een pro-gramma-file in het geheugen van eengespeclficeerde randspparatuur.Het L-kommando stelt u in staat eenprogramma-file van cassette of schijfte laden en in het RAM-gebied van deVIC te schrliven. Veor op schijf op-geslagen files moet het adres van deeerste lokatie waar het file in RAMwordt geschreven bestaan uit de

    eerste twee bytes van het file. Op bandopges!agen files hebben hat start-adres opgeslagen als dee! van heteerste aanloopblok (initial headerblock).N.B.: AIleen files wetke eenqemesktzijn met bet VICMON S-kommandotzie 2.3 . 16 ) of welke ssnqemsskt zijnmet bet SAVE-kommando uit VICBASIC, kunnen met deze optie qe-laden worden.Het kommando bestaat uit L, de naamvan het file en het nummer van hetdevice Iapparaatl van welke wordt ge-lezen. De filenaam moet door aan-halingstekens worden omgeven enmag bestaan uit elke legale VtC-naam.Het apparaatnummer van de cassette-eenheid is 01. Het apparaatnummervan de schijfeenheid is 08.Bij gebruik' van het t-kornrnandowordt het gespecificeerde tile in hetgeheugen ingetezen tot er een EOFontmoet wordt. Indien er geen EOFontrnoet wordt, gaat het laden door enzult u moeten stoppen met de STOP-en RESTORE-toetsen.Als het file of het apparaat niet bekendis krijgt u een fout-boodschap enwordt u teruggezet in BASIC.Voorbeeld: U heeft een programmagenaamd TEST op schijf staan, welk258 bytes lang is en waarvan de eerstetwee bytes OOCAzijn. Om dit file in hetgeheugenin telezen:Kommando: L "TEST",Oa (return)Resultaat: Het programma genaamdTEST wordt van de schijf gehaatd en inhet geheugen ingelezen van lokatieCAOOtot en met CBOO2.3.11 M - MEMORYForrnaat: Mladdr), (addr)of: M(addr)Doel: Het tonen van de hex-kode I n een gegeven geheugenblok.Het Mkommande zal de inhoud van

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    14/28

    het geheugen tonen vanaf hat opqe-geven beqinadres tot en met het op-gegeven eindadres. Het adres en vijfhex-bytes zullen op een regel getoondworden. Indien slechts een adres in hetkommando gespecificeerd is, lOlienviif bytes getoond worden, beginnen-de met de inhoud van het gespecifieer-deadres.Opeenvolgende groepen van vijf byteskunnen getoond worden door hetscherm te laten serolten, dus door hetgebruik van de cursor-kontrole-toetsen.Let weI, indlen u een tweede adres op-geeft welke kleiner is dan het eerste,zult u merken dat het geheugen vaneinde naar begin springt.De inhoud van het geheugen kan ver-snderd worden door over de getoondewaarden heen te tvpen en daarna opRETURN te drukken. Indien er eenslechte RAM-Iokatie is of u probeerteen ROM te modifieeren, wordt er een? gezet op de plaats van de onmoge-lijke verandering.Voorbeeld: Het tonen van vijf bytesgeheugen beginnende op lokatie $1000en het veranderen van de inhoud vanOOnaar FF:Kommando: M 1000 (return)Display: .1000 AD 00 EA EA FFAktie: Plaats de cursor op deeerste 0 van 00. Type FFen druk op RETURN.Resultaat: De vijf bytes beginnendeop lokatie $1000 geven nu AO FF EAEA FF weer.2.3.12 N - NUMBERForrnaat: N(addr), (addrl. (offset),lIowlim), (uptirnl.Wwaarbij offset een hex-waarde is welkeaanqeeft hoeveel er bij het bestaandeadres moet worden opgeteld. lowlimen Uplim geven de afstand aan overwelke de operands moeten worden qe-offset en W is een optioneel-komman-do welke aangeeft dat de afstand senwoord tabel is.

    Doel: Het toewijzen van ab-solute geheugenadressen over een ge-speciftceerde afstand nadat een pro-gramma is verplaatst met behulp vanhet T-kommando.Met het T-kommando (zie 2.3.17) kuntu een programma verplaatsen naar eendeel van het geheugen. Als uw pro-gramma absolute adressen bevat zijndeze natuurlijk niet meer gerdig. Het N-kommando stelt u in staat deze adres-sen autornatisch te veranderen. Eerstmoet u de afstand waarover u het pro-gramma heeft verpfaatst berekenen.Let weI, a ls u het programma naar eenlagere geheugen!okatie heeft verplaatstdient u rekening te houden met dewrap-around-waarde, b.v. als uw pro-b.amma eerst stond op $AOOO en uheeft het verplaatst naar $0400, heeft u$6400 verplaatst, aangezien $AOOO+$6400 =$10400. De waarde $6400 is deoffset-waarde.Met het N-kommando heeft u dekeuze aile absolute adressen te ver-anderen of aileen die binnen een ge-geven afstand. De afstand wordt vast-gesteld door het instellen van boven enonder Iimiten (uplim en lowlirnl. Udient ook het geheugenblok in welkede verandering plaatsvind te specifi-ceren. VICMON zal elke operand bin-nen het blok nemen en hierbij deoffset-waarde optellen, het slaat dusdrie bytes over en telt de offset-waardebij de volgende twee bytes. Indien ueen woord tabel wilt verandaren zoudit natuurlijk katastrofa!e gevolgenhebben, maar VICMON heeft hiervoorde optionele W aan het einde van hetN-kornmando. Wanneer de W in hetkomrnando is inbegrepen wordt elkwoord, elke rwee bytes dus, ge-offsetin plaats van de boven beschrevenprocedure.Waarschuwing: Gebruik nooit het N-kornrnando in uw data-lokaties. daardeze anders onbruikbaar worden.

    .- - - - - - . ' I J " . J iZ i I idJ:aX===;JClitrr--'"

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    15/28

    S,'+0"""_,"',"'/6G/,>~""""",,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,""'>'"'''''''''''''''''''''' """"""""""""""""""" """'"''''',,'',,''''' """"""""",,~,""

    orbeeld: U heeft het TRANSFER-mando gebruikt om uw program-ate verplaatsen. Het was in lokatie0 tot $2000 en is nu in lokatie00 tot $2500. Om ane absoluteessen over deze afstand juist te ver-mando: N 1500,2500,0500,1000, ' . J .2000 (return) "

    sultaat: In de kode in lokatiesot $2500 worden aile absoluteessen welke valten tussen $1000 enmet $500 verhoogt.Q - QUICK TRACEmaat: QQ(addr)

    el: Het l angzaam uitvoerenhet programma beginnende op hetegeven adres terwijl er gekekenrdt naar een breekpunt of naar hetbruik van de STOP- en X-toets na-t elke instruktie is uitgevoerd.t Q-kammando mag, net als het G-

    (zie 2.3.6) alleenstaand oft een adres gebruikt worden. Indient aileen gebruikt wordt, zal VICMONprogramma in geheugen uitvoerenginnende met het adres welke opmoment in de programmatellerwezig is (om de inhoud van degrammateller zichtbaar te makenbruikt u het R-kommando, zieHet Q-kommando werkt gro-deels zoals het G-kommando, metn belangrijke uitzondering. Terwijlt G-kommando de uitvoering geheetde CPU (centrale verwerkings een-idI overlaat, voert Q slechts een in-uktie per keer uit, terwijl het na elkep kontroleerd of er danwel eenekpunt is bereikt danwel door u omt stoppen van de uitvoering wordtze breekpunt-kontrole veroorloofd ubreekpunten zowel in RAM als inM te zetten. Op het moment datn breekpunt is bereikt, wordt de uit-

    voering stopgezet en bevind u zich inde WALK,mode tzie 2.3.18). Om de in-houd van de registers te ton en drukt uop de STOP-, de R- en de RETURN-toets.De gebruikers interrupt kan op elk ge-wenst moment vanaf het toetsenbordworden gegenereerd. Druk eenvoudiq-weg op de STOP- en de X-toets en deuitvoering zal worden stopgezet, ter-wijl de inhoud van de registers op ditmoment getoond zal worden.Voorbeeld: Het uitvoeren van eenprogramma in Quick-trace-mode be-ginnende op $1000:Kommando: Q 1000 (return)Resultaat: De programmatellerwordt op 1000 gezet. De registers wor-den geinitialiseerd. Indien er een virtu-ele zero page aanwezig is (zie 2.3.4)wordt deze gewisseld met de zeropage. De programma-uitvoering is be-gonnen op regel 1000.2.3.14 R - REGISTERSFormaat: RDoel: De inhoud van de regis-ters te tonen.Het R-kommando geeft u de mogelijk-heid om de stand van zaken in de vol-gende registers van de VIC-20 6502processor te bekijken:

    programmateller PCstatus register SRaccumulator ACindex register x XRindex register y VRstack pointer SP

    Dit kan nuttig zijn tijdens het debuggenvan een programma omdat het B-kom-mando u in staat stelt om te zien of deinhoud van de registers overeenkomtmet uw verwachtingen. Terwijl u in deR-mode bent, kunt u de inhoud vanregisters veranderen door de nieuwewaarde over de oude heen te typen endaarna op RETURN te drukken. Het 13

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    16/28

    register-display wordt automatisch ge-genereerd a ls VICMON wordt opqe-start, sts een te voren bepaald break-punt wordt bereikt (zie 2.3,2) in de G-mode (zie 2.3.6), en wanneer een q-uitvoering Izie 2 .3.131 wordt beeindigdd.m.v. de STOP- en x-toers kornblna-tie.Voorbeeld: Het tonen van de inhoudvan de registers.Kommando: R (return)Resultaat: afb. 2.4. bijvoorbeeld

    Figuur 2-4. Register Display

    2.3.15 RB - REMOVE BREAK-POINTFormaat:Doel:

    RSHet verwijderen van eenbreekpunt.

    Sreekpunten worden door het B-kom-mando ingesteld Iz ie 2 .3 .2 J en kunnenverwijderd worden door het RB-kom-mando.Indien u RS als kommando geeft,wordt het tevoren vastgestelde breek-punt verwijderd. Indien er geen be-staande breekpunten zijn wanneer RBwordt uitgevoerd, za l VICMON ditkommando interpreteren alsware heteen R, en de registers tonen.Voorbeeld: Neem aan dat er eenbreekpunt op Jokatta $1050 was gazet.Om dit breekpunt te verwijderen:Kommando: RS 1050 (return)Results8t: Er bestaat niet langer eenbreekpunt op lokatie $105014

    2.3.16 S - SAVEFormant: S "FILE NAAM", Idev),Iaddr), (addr)Doel: De inhoud van een ge-specificeerd RAM-gebled naar een be-paald apparaat te schrijven.Hat S-kommando stelt u in staat eenprogramma op schijf of cassette te be-waren voor gebruik op een later tijd-stip. Het kommando bestaat uit denaam van het file, hat nummer van hetapparaat waarnaar geschraven wordten het start- en eind-adres van hetRAM-gabied. De filenaam moet om-geven worden door aanhalingstekensen meet voldoen aan de syntax-rege!svoor VIC-files, het moet dus beginnenmet een a!fabetisch karakter en nietmeer dan 16 karakters lang zijn.Het apparaatnummer van de cassette-eenheid is 01 en van de schijf-eenheid0 8 . /Het !aatste adres moet minimaal eengroter zijn dan de lokatie van de laatstebyte die u wilt wegschrijven.Waarschuwing: Indien het laatsteadres niet Mn groter is dan de lokatievan de laatst weg te schrijven byte, za!de laatste byte verloren gaan.Indien het gespecificeerde apparaatniet aanwezig is, krijgt u een four-boodschap en keert u terug in BASIC.N.B.: VICMON ken geen geheugenwegschrijven boven $7FFF, dit houdtin dat bet stert-edres $0000 of hagermoet zijr), maar niet grater dan $7FFF.Het eind-edres moet groter zijn dan$0000, maar niet groter dan $8000.Indien u poogt om geheugen weg teschriiven buiten de aangegeven af-stand, za! aileen de file-header wordenweggeschreven, programma of dataworden in dit geval dus niet wegge-schreven.Voorbeeld; Neem aan dat u een pro-gramma in het geheugen heeft vanlokatle $1000 tot $10FF. Om dit pro-

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    17/28

    gramma op schijf wag te schrijven metde naam TEST 1:Kommando: S "TEST1",08,1000,11oo(return)Resultaat: Een fite met de naamTEST 1 zal op schijf worden wegge-schreven. Het zal de kode bevattenwelke in R AM lokatie $1000 tot en met$10FF aanwezig was.

    2.3.17 T - TRANSFERFormaat: T (addr), (addrl, (addr)Doel: Het verplaatsen van deinhoud van een geheugenblok van hetene RAM-gebied naar het andere.Het T-kommando stelt u in staat uwprogramma of data near een ander ge-heugengebied te verhuizen. Dit is nut-tig als u een programma groter wenstta maken of een gedeelte van een pro-gramma elders wenst te gebruikenzonder het over te typen.Het kommando bestaat uit drie adres-sen. Oe eerste twee geven het te dupli-eeren geheugengebied aan, het derdeadres is het start-adres voor de kopie.Indien een programma verplaatstwordt en dit programma absolute-adressen of woord-tabellen bevat zul-len deze specifikaties in de ni~u~elokatie niet meer nauwkeurig zijn. HetN-kommando (zie 2.3.11) geeft u demogelijkheid om deze waarden de ge-wenste hoeveelheid op te schuiven(offset) zodat het verplaatste program-ma [uist uitgevoerd kan worden.Voorbeeld: Neem aan dat u een blokdata In geheugen heaft van lokatie$3000 tot $3500. Om dit to verplaatsennaar een nieuwe lokatie beginnende op$4000:Kommando: T 3000,3500,4000 (return)Resultaat: De data is nu zowel inblok $3000 tot $3500 als in blok $4000tot $4500.

    2.3.18 W - WALKFormaat: Wof: Wtaddr)Doel: Het regel voor rege! uit-voeren van een programma.Het W-kommando voert de reqels-kode uit aangegeven door de adressen~. in de programmteller. als W aileen-, staand wordt gebruikt. In het andereqeval kunt u het adres specificerenwaar de uitvoerinq dient te beginnen.Als W wordt gebruikt, wordt de eersteinstruktie uitgevoetd en de tweedeinstruktie zal op het scherm getoondworden.VICMON wacht tot u op de spatlebalkheeft gedrukt voordat het de tweedeinstruktie zal uitvoeren. Zodra despatiebalk wordt ingedrukt, wordt deregel uitgevoerd en de volgendo regelOJ) het scherm gezet. Op deze manterkunt u door het programma wandelen(WALK), u kunt dus stap voor stap hetprogramma uitvoeren. Om weer uit deW-mode terug in VICMON te geraken,drukt u op de STOP-toets.U kunt het R-kommando (zie 2.3.14)gebruiken om op elk gewenst momentde inhoud van de registers te kontro-leren. Oruk op STOP. R en daarna opRETURN om dit te bereiken.Elke subroutine zult u ook stap voorstap door moeten gaan, tenzij u het J-kommando (zie 2.3.9) gebruikt om desubroutine als een stap te behandelen.Voorbeeld: Om stap voor stap dooreen programma te gaan beginnendeop lokatie $1000:Kommando: W 1000 (return)Resultaat: De instruktie opgeslagenop adres $1000 wordt uitgevoerd en devolgende instruktie wordt op hetscherm getoond.Aktie: Oruk op de spatiebalkResultaat: De tweede instruktiewordt uitgevoerd en de derde instruk-tie wordt op het scherrn getoond.

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    18/28

    2.3.19 X - EXIT to BASICFormaat: XDoel: Het beeindigen van VIC-MON en het terugkeren in BASIC.Het gebruik van het X-kommandobrengt u terug naar BASIC. Uw pro-gramma blijft in het geheugen, maarbreekpunten en virtuele zero pageblij\len niet behouden.Voorbeeld: Om VICMON te verlaten:Kommando: X (return)Resultaat: U keert teruq in BASICen u ziet de READY prompt.

    (:' I c-o o )1!C 0' ~:~" ; ! . f :r:r.{~t ..~' \ . ./ i f :; : t~6 i~.; I{ "i" 1~)(. 1 t : ' " f!"'~ iF " '~r3: '.0 1/,'" 1 : . _ . ' ! .

    t s jI : ; ~ ? ~! (';,

    16

    -------------"!I!!'Il__i l l l . l ! S ' ! S W ! l '! ll. II I . ! I ! , f J . ! n N " " ; ; . " " h = . . . . . " " ' . . . . . ~ " " '- - ' . , . . " " ' . . ._

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    19/28

    HOODSTUK 3HET GEBRUIK VAN VICMON ALSDEBUGGING-GEREEDSCHAP

    3.1 IntroduktieHet nu volgende is een voorbeeldwaarin enkele van de editing en tout-zoek faciliteiten van VICMON bespro-ken zullen worden.Hierbij wordt een 6502 assembleertaalen VICMON gebruikt om te laten zienhoe een fout in een programma wordtgelokaliseerd en verholpen.Meer details over de gebruikte kom-mando's vind u in hoofdstuk twee.Indien u het voorbee!d wilt gebruiken,dient u de instrukties in sectie 3.3 tevolgan. Zo niet, dan is hat mlnstensraadzaam het voorbeeJd door te lezen.

    . " .

    3.2 HET VOORBEELD-PROGRAMMAHet in dit hoofdstuk gebruikte pro-gramma schrijft het scherm vol metachtereenvolgens aile printbare karak-ters. Twee scherm posities bliiven leegom scrollen te voorkomen. Eenstroomdiagram van het programmaziet u in afbeelding 3.1.Het programma gebruikt de ROM-routine $FF02 om een karakter te prin-ten. Eerst wordt het scherm schoon-gemaakt door de volgende opdracht:LOA #$93JSR$FFD2Hierna vult een Ius aile karakter-positiesop het scherm met spa ties, behalve delaatste twee. Aangezien er 506 rnoqe-lijke karakter-posities op hat schermzijrt, moeten wij nog 504 opvullen. Ditkomt overeen met twee groepen van252 ($FCI.Zodra dit gedaan is, wordt er een in-direkte pointer gezet op de zero page,gebruikmakend van de inhoud van Figuur 3-1. Stroomdiagram vanvoorbeeld-programma's

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    20/28

    18

    $0288 om naar het begin van hetscherm te wijzen. Hierbij wordt tweeopgeteld om een test-reterentie te heb-ben bij het einde van het scherm. Ge-bruikmakend van een loop. wordt nuhet scherm (gevuld met seatiesl ge -vuld met het eerste karakter (waarde 0),dan het tweede karakter enz. enz., totdar alfe 256 karakters op eike plaats ophet scherm Iiin geweest waar eersteen spatie was. Het is noodzakelijk omnaar het scherm te printen, om te be-werkstelligen dat karakters verschijnenzodra zij in het schermgebied 1STA($01),Y) worden opgeslagen.Het is mogelijk om waardes in de kleu-ren RAM op te slaan i.p.v. het hoven-staande, maar dit vraagt om een bij-komende indirekte pointer.Het paginanummer van hat scherm isopgeslagen in lokatie $0288 hetgeeninhoud, dat het scherm begint op$($0288)00.Deze methode is vereist, aangezien delokatie van de scherm RAM veranderdals een geheugenuitbreiding gebruiktwordt.3.3 DE PROCEDURE3.3.1 Het Invoeren van hetprogrammaDe volgende stappen zijn nodig om hetprogramma zeals boven omschrevenin te voeren en er een fout in te lokali-serenoPlaats de VICMON-cassette in de VICof het VIC Expansion Board.Schakel de computer (en het Expan-sion Board indien aanwezig) in. Typ nuSYS(6*4096) om ViCMON op te star-ten. Typ dan het hierna volgende inmet gebruikmaking van het A-kom-mando (zie 2.3.1):

    l 000 lOA#$9310 02 JS R $ FF 0210 05 lO Y #$0 0l0 07LDX #$0 0lO O 9LDA# $2010 06 JS R $ FfD 21001: IN X

    lOOF CPX #$FC1011 BNE $100910131NY1014 CP Y# $0 2HH6BMI$IOO9HHSLDX#$00101ASTX$0110K LDA$0288101FSTA$021021ClC1022 A DC # $021024 STA $001026 lOY #$001028TXA1029 STA ($01 j,Y10281NYHl2C BN E $1029102EINC$021030lOAW21032CMP$OO1034 BN E $102910361NX1037 BN E $19lC1039 BR K103A8RK

    Nadat u het programma heeft irvoerd, schrijf het dan weg op cass(zle 2.3.16) met het volgende k.mando: S"PROGRAM" ,01,10103A (return)(om op schijf te schrijven vervangt Idoor 08 in het bovenstaande komrrdo).Dit is een veiligheidsmaatregel onvoorkomen dat het programma 'loren raakt als b.v, de stroomvrziening uitvalt,Aannemende dat het programmaeerste keer prima werkt (een zeldzsiets bij machinetaalprogrammas)bruikt u nu het GO-kommando2.3.6) en u typt in:

    .G 1000 (return)Als u het programma exakt heeftgetypt voigens de bovenstaande listzult u het de bovenste helft vanscherm zeer snel met karakters ,vuUen. De onderste helft vanscherm blijft leeg. Na een erg kortehoudt het programma op en zietscherm er uit zeals in afbeelding 3.~

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    21/28

    iguur 3-2. Resultaat eerste uitvoeringvan het voorbeeld-programmaDe fout lokellseran

    r is nu duidelijk iets mis, en u moet deout lokaliseren. Hier voIgt een ge-uikelijke techniek.en eerste, deel het programma in tweeelen, de eerste wist her scherm, devult het met spaties, Dit deel$1018, dus op $1018 zet u(zie 2.3.2) door te

    B 1018 (return)O pdat u kunt zien wat er gebeurd, ver-ander het te printen karakter van eenspatie ($20) naar een A ($41). Doe ditalsvolgt:

    A 1009 lOA #$41(return) (return)Om het geheel wat langzamer te latenverlopen kiest u de Quick trace optie(zie 2.3.13); Q 1000 (return)Hierdoor wordt het programma tang-zamer dan normaal uitgevoerd.Indien u zero page lokaties gebruikt inprogramma, is het aan te raden (envaak zelfs noodzakeJijk) am gebruik temaken van de virtuele zero page mo-gelijkheid (zie 2.3.4) daar VICMON dezero page gebrvikt en uw programmaen VICMON elkaar enders kunnenoverschrijven.

    De optie is niet noodzakelijk in hoteerste deel, maar wordt gebruikt in hattweede deel.Aangezien het insteflen van een vir-tuele zero page voordat Quick tracewordtingevoerd resulteert in ongeveer\. 2 min'ten wachttijd am het scherm'schoon te rnaken en minstens twee-rnaal zofang om het daarna met karak-ters te vullen, moet u nog geen virtuelezero page instellen. Ais het stuk kode($1000-$1018) uitgevoerd wordt, zult ubemerken dat i.p.v. drie regels voorhet einde van het scherm te stoppen,de karakters van het scherm aflopen.Het scherm scrollt omhoog (4 reqels),daarna worden twee ekstra karaktersgeprint. Dit betekend dat er in totaal 4ongewenste karakters worden geprint.De meest waarschijnlijke oorzaak hier-van is, dat de test op het aantal ge-printe karakters niet korrekt wordt uit-gevoerd. De waarde in het X-registermoet liggen tussen $100 en $FC, ter-wijl Y is 0 en Y i9 1. Als u nauwkeurigoplet, zult u meKen dat zodra X dewaarde $FC bereikt, de waarde van Ywordt vermeerderd. Als deze minder isdan 2, wordt er een spatie (" AliI in deakkumulator geladen en geprint.Dit betekend dat X tussen $00 en $FFloopt, waarbij $00 tot $FC de vierekstra karakters geeft. Om dit te ver-helpen meet de splitsing op $1016 zo-danig veranderd worden dat hij wijstnaar$1007i.p.v. $1009.Aangezien Quick trace u in de Walkmode laat, moet u op STOP drukkenom terug te keren naar VICMON. Typedan:

    A 1016 BMI $1007(return) (return)Als u nu rvpt:

    Q 1000 (return)zal de routine op het juiste punt stop-pen en er uit zien als in afbeelding 3.3 19

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    22/28

    Figuur 3 -3 . Scherm gevuld met A'sOp dit punt kunt u zien dat de eerstehelft van de routine prima werkt. Nu isdan ook de tijd daar om de virtuelezero page in te stellen. Oruk op STOPen type:

    E 1800 (return)Oit wijst een stuk geheugen beginnen-de op lokatie $1800 toe aan de virtuelezero page.Voer nu de kode uit in een langzaamtempo, beginnend waar u hiervoorwas opgehouden, op $1018 dus , zea lsaangegeven door de programmateller(PC). De Quick trace mode stelt u instaat om langzaam door te gaan, in-dien gewenst stoppende voor de uit-voering, dys type in:o (return)De A's op het scherrn zullen ongeveerhalverwege (257e ka rakte rl v eranderenin @'s. De overblijvende A's wordenvervangen door links-wijzende pijlen.Hiema zullen de @ 's weer ta rug ver-anderen in A's.Wanneer de laatste @ veranderd, ge-beurd er een korte tijd niets op hetscherm, daarna veranderen de A's inB's. Bemerk dat het schermkaraktervoor 0 is @. 1 is At 2 is Benz.Druk STOP en X tezamen in am hetprogramma te onderbreken, daar er,zoals u ziet, nog steeds een probleemis.

    Gebruik het Walkkommando2.3.18) om stap voor stap doorprogramma te lopen om te zien (kunt uitzoeken waar hat verkeekarakter vandaan komt. Typ in:W 1018 (return)

    Na een zekere tijd (de interval hanvan het feit of u de spatiebalk telkindrukt of ingedrukt houdt) ziet uvolgende. op het scherm:t02E INC 021030 lOA 021032CMPOO1034 BNE 10291029 STA t o n . vOp dit punt bevat de akkumulatorhoge byte van de schermpointer ("de 2e hetft van het scherm). Oit zilals een linkse pijl op het scherrn, lruu nu de Walk mode beeindiqd dooiSTOP te drukken, kunt u d.m.v. R2.3.13) de inhoud van de regiszien:. RPC SR AC XA YA1028 AO 1F 00 00

    De waardes van PC, SR en YA kunverschillen, afhankelijk wanneer (de STOP-toets heeft ingedrukt,hankelijk dus welke volgende instrumoet worden uitgevoerd.In deze fase van het programmahoard de akkumulator dezelfde inhats net X-register te hebben. Zodr:hoge byte van de schermpointer irakkumulator wordt geladen, isnoodzakelijk de waarde van hetregis te r in de akkumulator te laden.lnstruktie hiervoor is TXA, welkeop $1028 bevind, dus moet de split:naar $1029 worden veranderd. Typ

    A 1034 BNE $1028(return) (return)let wei, de splitsing op $102C hniet te worden veranderd, aangede waarde van de akkumulator nitdeze genestelde Ius veranderd.

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    23/28

    erwijder her breekpunt, breng deties weer aan in de originale stap enchriif het programma wag met de vol-de kommando's:AS (return)A 1009 LDA #$20(return) (return)S "PROGRAM" ,01,1000, "'.103A (return)G 1000 (return)Het behoort nu te werken. Indien ditniet het geval is, vergelijk het dan methet onderstaande programma m.b.v.het D-kommando om de opgeslagenkode te tonen. Let op het verschil enbreng, waar nodig, veranderingen aan

    m.b.v. het A-kommando. Vergeetechter niet dat als u eigen program-ma's of routines schrijft, u geen kor-rekte verzie van het programma heeftom mee te vergelijken. Dezelfde prin-cipes van het instellen van breek-punten, langzaam uitvoeren en na-kijken van registers zijn eehter bij aileprogramma's bruikbaar.,,1000 LO A#$93. , 1002 JSR $FF D2,,1005 LO Y #$00, , 1007 lOX # $00,,1009 LOA #$20, , 1006 JSR $FF 02" W 0E INX, , 100F CPX If $FC, ,1011 BNE $1009,,1013INY,.1014 Cpy #$02.,1016 8M I $1007. ,1018LDX#$OO., lO lA STX $01" 10lC LOA $0288 r 10 1F STA $02.,1021 CLC.,1022 AOC #$02. , 1 0 24 S TA $00'. l026LDY #$00'. H 128TX A" HJ29STA ($01),Y" 102B INY'. H l2C BN E $H129, , HJ2E INC $02, 103 0 LOA $02'. 1032 eMP $00, , H J34 BN U 1 028

    , ,10361NX. , 1037 BNE $101C" Hl398RK, r HJ3A 2? ?

    3.4. SAMENVATTINGHier voigt een samenvatting van de 1e. volgen stappen om VICMON te ge-bruiken om uw eigen programma tedebuggen.1. Initialiseer VICMON2. Lead uw programma met L oftyp het in en schrijf het weg metSAVE,3. Probeer het programma vanaf hetbegin uit te voeren met G.4. Stel breekpunten in am het fout-gebied te bepalen.5. Disassernbleer de foute sektor ofhet hele programma als het kort ismet D. Het is aan te raden de qe-disassembleerde listing op uwprinter te listen.6. Ga door de foute sektie met Quicktrace, vooral als het scherrn-display's betreft.7. Ga door de foute sektie met Walk.S. ~aat regelmatig, indien nodig, deinhoud van de registers op ver-schillende punten tonen.Gebruik M en Iom data-gebiedenof werkende varia belen te tonen.9a. Gebruik A om foutieve kode taverbeteren .9b. Gebruik M om foutieve data teverbeteren .10. Maak aantekeningen van de ver-anderingen. Schrijf het program-ma regelmatig weg .11. Denk er aan dat u soms de vir-tuele zero page (E) moet qebrui-ken, terwijl u de Quick trace enWalk opties gebruikt.

    12. Indien u het ptobleem niet kuntvinden, ga dan terug naar uwstroomdiagram(men) en gebruikuw loqica. 21

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    24/28

    22

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    25/28

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    26/28

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    27/28

    INDEXAbsolute adressen . . . 12Addr. . 5Adores conventie. . . . . . . . . . . . 5ASCII, CBM . . . . . . . . . . . . . . . 10ASSEMBLE................ . 5Assembleer taal " 5/'17BASIC, terug naar . . . . . . . . . . . 16BREAKPOINT. . . . . . . . . . . . . . 6Breakpoint verwijderen . . . . . . 14BRK......... 9CBM ASCII. . . . . . . . . . . . . . . . . 10CTRL toets . . .. . .. . ... .. . . .. 10Conventies, formaat . . . . . . .. . 5. Data. '" . '" . 5, 9Device nummer ...... 11, 14DISASSEMBLE. . . . . . . . . . . . 7Display, eerste . . . . . . . . . . . . 4Display, geheugen.. .. . . .... 11Display registers. . . . . . . . . . . . . 7Doltar-teken . . . . . . . . . . . . . . . . 5Eerste display . . . . . . . . . . . . . . . 4ENABLE Virtual Zero Page. . . . 8Enkel aanhalingsteken 9EOF .. !l'f'i;). ,;):'.. O f 11Exit naar BASIC. . . . . . . . . . . . 16FILL geheugen . . . . . . . . . . .. 8Fouten herstellen . . . . . . . . . . 4Fouten in programma ... . . . . 19Fouten zoeken . . . . . . . . 19Foutmelding . . . . . . . . . . . . 4Geheugen, FILL. . . . . . . . . . 8Geheugen veranderen . . 11GO........................ 9Hex-kode, display 11HUNT., f t . 9INTERPRET . . . 10JUMP t f , r , , , , , , 10Kerna l , ... " .. f , , , , t 8Kommando's, Invoeren . 4Kommando rorrnaat. . . . . . . . 4Kommando beeindigen . . . . 4LOAD.... 11Load fife. , ... , . . . . , . . . . . 1 1Machine-kode. . . . ... . . . 3MEMORY.................. 11NUMBER.................. 12Offset. . . . . . . . . . . . . 5, 12OpKode......... 5, 7Operand ...... :;........ 5, 12

    Patroon...... .. .. .. .. .. .. .. 8Programma file. . . . . . . . . . . . . . 11Programma-teller. . . . . . . . . .. 9. 13Programma uitvoering. . . . . . .. 5, 1~,Programmeer's AID, VICMON met I; .Prom pt .. ~ .. ~.. ... ~ ._" . . . ~ . . . . . .. . IIQUICK TRACE. . . . . . . . . . . . . . 13RAM, slechte lokatie .. .. .. .. . 1;!Ref- . '" ~.. ~ ...... 0 ,. ...... f .. .. .. .. .. .. r: :Registerdisplay ............ 7, 13REGISTERS. . .. . . . .. .. . . . . . 1Re lokat1e ................. 12REMOVE BREAKPOINT. . . . . . 1"RETURN, a fsluite n m et .. ,. .. . . . .. .. l1 -ROM...................... 12RTS I t . . . . . . . . E }SAVE...................... 1/jScrollen , . . .. . . .. 7, 12Stack , . . . . 1'1Stap voor stap .. . . . . . . . . . . . . 1fStart VICMON ......... ,...... . . . .... : 3STOP toets . . . . . . . . . . . . . . . .. 6, 14Strings. . . . . . . . . . . . . . . . . . . . ~)Subroutine. . . . . . . . . . . . . . . . 10Super Expander, VICMON met 4SYS.. ..... LTape files ................. 11, 11 \Terug naar BASIC. . . . . . . . . 16TRANSFER. . . . . . .. . . . . . . . . E,Uitvoeren van programma.... 5, 1Verander absolute adressen . 1:';'Verander geheugen . . . . . . . . . 1 '7Verander register waarden . 13Virtua l Ze ro Page ... , . . .. , . . .. 817oorbeeld programma ..Vraagteken ... , , WALK", ... , ..... " ., .. , ..Wootd tabe l . f f t f , , , , t ... , W rapa roun d." , .." , .X en STOPtoets .. , , , XEXIT naar BASIC Zero page .....

    tl1 F ,1 ,v,"1214Hi8, 19

  • 7/23/2019 Gebruikers handboek Machinetaal Monitor VICMON

    28/28

    OVERZICHT VAN DE KOMMANDO'sKommandoAssembleBreakpointDisassembleEnable Virtuollero PageFitiMemoryGoHuntInterpretJump to subroutineloadMemoryNumberQuick TraceRegistersRemove BreakpointsSaveTransferWalkE xit to BASiC

    FormaatA (oddrj.lopcodej.toperond] "".,., .B (oddr) .. , , '... ., , , .of B [oddr].nD (oddr) ,,'of D (oddrl,laddr)E loddr) ,... ..,.. . .. , , .F - \addr),(addr),{volue) ' , .G : " .of G (oddr)H (oddr).(oddrl.{dolo) ,......... 9I (oddr).(oddr) ..... . .. . . ...... 10of i (oddr)J .l "[ilenome't.ldev] .M (addr).(addr) , .of M (addr)N (oddr),{addr).(QHset),(lowlim),(upltm),W . . . . . . . . . . . . . . .. 12Q , 13of Q (oddr)R 13RB 14S "Iilenomc",{devl.(addr),(oddr) 14T (oddr).{addr),(oddr) 15W 15of W (oddr)

    567889

    101111

    x ....................... 16(:

    Aile kommando's behalve J worden afgesloten door op de RETURN-toets tedrukken.De parameters van hat kommando-formaat zijn als voigt:(addr) een twee byte hex-adres b.v. 0400(dev) een enkel byte hex-nurnmer b.v. 08topkede) een geldige 6502 assembleer mnemonic b.v. LDA(operand) een geldige operand voor de voorqaande instruktie b.v. $01(value) een enkele byte hex-waarde b.v. FF(data) een string letterlijke data. amgeven door aanhalingstekens of hex-waarden. Opeenvolgende delen worden door komma's gescheiden.(ref) een twee byte hex-ad res b.v. 2000(offset) een twee byte hex-offset-waarde b.v. 3000Start monitor door SYS24576 of SYS6*4096