• No results found

Beschrijving Mon68K

N/A
N/A
Protected

Academic year: 2021

Share "Beschrijving Mon68K"

Copied!
59
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Beschrijving Mon68K

Citation for published version (APA):

Tiesinga, J. (1987). Beschrijving Mon68K. (IPO-Rapport; Vol. 617). Instituut voor Perceptie Onderzoek (IPO).

Document status and date:

Gepubliceerd: 18/11/1987

Document Version:

Uitgevers PDF, ook bekend als Version of Record

Please check the document version of this publication:

• A submitted manuscript is the version of the article upon submission and before peer-review. There can be

important differences between the submitted version and the official published version of record. People

interested in the research are advised to contact the author for the final version of the publication, or visit the

DOI to the publisher's website.

• The final author version and the galley proof are versions of the publication after peer review.

• The final published version features the final layout of the paper including the volume, issue and page

numbers.

Link to publication

General rights

Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain

• You may freely distribute the URL identifying the publication in the public portal.

If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement:

www.tue.nl/taverne

Take down policy

If you believe that this document breaches copyright please contact us at:

openaccess@tue.nl

providing details and we will investigate your claim.

(2)

Instituut voor Perceptie Onderzoek

Postbus 513, 5600 MB

EINDHOVEN

Rapport no. 617

Beschrijving Mon68K

J. Tiesinga

JT/jt 87/05

18.11.1987

(3)

Contents

1 Inleiding

2 Gebruikte afkortingen en wetenswaardigheden

2.1 Afkortingen . . .

2.2 Wetenswaardigheden

3 Initialisatie

3.1

Aanmaak van de monitor

3.2

Programmaexecutie

4 Conunando's

4.1 Alternate prompt .

4.2 Enable interrupts .

4.3

Findram

4.4 Go . . . .

4.5 Help . . . .

4.6

Initialize memory

4.7 Load 82 records .

4.8 Modify . . . .

4.8.1

Data .. .

4.8.2

Commando's

4.9 Print . . . .

2

3

3

3

4

4

4

5

5

6

6

6

7

7

7

8

8

9

9

4.10 Reset vectoren 0-5 en 7

9

4.11 reset vectoren 0-7 . .

10

4.12 Stackpointer waarde

10

4.13

Trace functie . . . .

10

4.14 Vector defin.tie . . .

11

4.15 Zoek de onbekende: X

12

5 Systeemfoutenafhandeling

13

5.1 adres_error at or near $adres . . . .

13

5.2 bus_error /memory _privilege ... error at or near $adres

13

5.3

instruction_privilege_ violation_error at or $adres

13

5.4 illegal_instruction_error at or near $adres .

14

6 Praktijkervaringen

15

7 Literatuur

16

(4)
(5)

1

Inleiding

De mon68k is een assemblerprogramma voor 68000-georiënteerde

applika-ties op basis van de LABBUS-CP U /MMU-68k kaart. Het programma is

een stuk gereedschap, waarmee interactief hardware en software getest kan

worden. De monitor zelf maakt voor de communicatie met de buitenwereld

gebruik van een aciapoort: als daarop een terminal aangesloten wordt

kun-nen de commando's met het toetsenbord ingegeven worden, verzonden data

verschijnt dan op het beeldscherm.

(6)

2

Gebruikte afkortingen en wetenswaardigheden

2.1 Afkortingen

De volgende tabel bevat een aantal gebruikte afkortingen en hun betekenis:

Afkorting Betekenis

adres

hexadecimaal getal in de range $000000 - $FFFFFF

adresl

hexadecimaal getal in de range $000000 - $FFFFFF

adres2

hexadecimaal getal in de range $000000 - $FFFFFF

byte

hexadecimaal getal in de range $00 - $FF

word

hexadecimaal getal in de range $0000 - $FFFF

longword

hexadecimaal getal in de range $00000000 - $FFFFFFFF

CR

carriage return (wagenterugloop, ascii 'char' $0D}

CRLF

carriage return linefeed sequence ascii $0DOA}

spatie

spatie (ascii 'char' $20)

MMU

memory management unit : geheugenverdeler

2.2

Wetenswaardigheden

In te geven adressen zijn beperkt tot 3 bytes omdat de 68000 maar 24

adres-lijnen naar buiten brengt. Dit geldt ook binnen de commandoroutines. Het

commando 'Print $FFFFFF $000000' geeft dus van twee geheugenplaatsen

de inhoud.

Binnen het tracecommando is het mogelijk de registers volledig te vullen,

echter de PC-waarde wordt roodulo $1000000 genomen.

(7)

3

Initialisatie

3.1 Aanmaak van de monitor

Het assemblerfile

1

dat de monitor beschrijft kan met op de PMDS-11

aan-wezige assembler gemaakt worden. De inhoud van het outputfile van de

assembler dient dan nog in twee prommen van het type 2732A geladen te

worden, een prom voor de even adressen en de ander voor de de oneven

adressen. (Wordt aangegeven metHen L).

3.2 Programmaexecutie

Wat gebeurt er nu wanneer een prom met de de monitor geïnstaleerd is en

de spanning staat aan e.d.?

Nou, het volgende: Aannemende dat alle hardware correct functioneert en

de acia

inderd~·ad

op het gegeven adres geselecteerd wordt beginnen we

bij powerup ('PWRUP') met het plaatsen van ram op de ondertse bank

geheugen (schrijfactie naar de prom). Vervolgens wordt de MMU

geïnitiali-seerd en wel zodanig dat al het geheugen toegewezen wordt aan de

super-visor. Na wat gerommel in de marge verschijnt de mededeling 'type H for

help' en de prompt' mon68k: '. De gebruiker kan nu commando's intoetsen.

Welke dat kunnen zijn staat in het volgende hoofdstuk.

1PMDS: mon68k.s

(8)

4

Commando's

Het programma kent een aantal commando's. Het zijn:

Commando

I

Betekenis / Naam

A

Alternate prompt

E

Enable interrupts voor niveau x

F

Find ram in system

G

Go: start programma op adres

H

Help functie

I

Initialize memory

L

Load motorola

S2

records

M

Modify memory.

P

Print geheugeninhoud in hexadecimale en ascii

notatie

R

Reset vectoren 0-5 en 7 naar in de

moni-tor gedefiniëerde interruptroutines: 6 wordt

ge-bruikt voor 'system-time'

r

Reset vectoren 0-7 naar in de monitor

gedefiniëerde interruptroutines

S

Stackpointer waarde

T

Trace functie

V

Vector definitie voor interrupt routines

X

Zoek

byte

X

in geheugen

De commando's en parameters dienen in hoofdletters achter de prompt

inge-toetst te worden. Wanneer een fout gemaakt wordt in het commando of

een van de parameters verschijnt de foutmelding

'?' achter de fout op het

scherm. De gegeven karakters worden genegeerd en de prompt verschijnt

weer. Het commando moet nu opnieuw in zijn geheel gegeven worden. Er is

geen herstelmogelijkheid van eenmaal gegeven commando's, niet anders dan

opzettelijk een fout veroorzaken in een van de parameters, zo het gegeven

commando deze heeft. Na het correct uitvoeren van een commando wordt

weer een prompt gegeven.

4.1 Alternate prompt

Het commando 'Alterna te prompt' geeft de gebruiker de keuze uit twee

prompts. De ene is ' mon68k: ', de andere de tijd die verlopen is na

(9)

de laatste reset van het systeem in uren, minuten en seconden. (formaat:

' hh:mm:ss

> ')

De laatste wijzigt dus steeds. Het is een aardigheidje dat

gebruikt kan worden om de duur van bepaalde routines meten.

2

Voorwaarde

is dat interruptniveau 6 de interrupts van de 50Hz ticker afhandelt (Wat ook

inhoud dat een bepaalde jumper goed moet staan). Houdt in gedachten dat

de klok zelf ook iets van de 'gemeten' tijd gebruikt.

4.2 Enable interrupts

Na het intoetsen van de 'E' wordt het huidige interruptmaskeringsniveau

getoond, waarna het nieuwe niveau gegeven kan worden.

lnterruptmasker-ingsniveau x betekent dat alle interrupts op een niveau lager dan of gelijk

aan x gemaskeerd worden. Interrupts op niveau 7 kunnen niet gemaskeerd

worden: dit is de z.g. non rnaskabie interrupt. Bij opstarten is de waarde

gelijk aan 5: de klok is op interrupt niveau 6 aangesloten.

4.3 Findram

De routine 'Find ram' zoekt ram-geheugen in het systeem in de

adres-range $0-$1FFFFF. Van een gevonden gebied worden de eerste en de laatste

geheugenplaats afgedrukt. Soms kan het wezen dat deze routine ram

ont-dekt op plaatsten waar men dit niet zou verwachten. Dit is dan meestal te

danken aan een hardwarefout, waardoor ram geselecteerd wordt op plaatsen

waar dat niet zou moeten. Ook kan het voorkomen dat de routine in een

lus geraakt. De enige redding is dan nog de resetknop. De ramtest is niet

destructief voor de informatie, welke in het geheugen staat.

4.4 Go

Het commando Go start de executie van een routine door deze als subroutine

aan te roepen. Daartoe wordt eerst het adres gevraagd waarop de uitvoering

moet beginnen. Is het ingegevene correct dan wordt een

CRLF verzonden

ten teken dan de executie begonnen is. Wanneer het programma afgesloten

wordt met de instructie RTS ($4E75) komt men na executie van de routine

automatisch weer terug in de monitor. Loopt een programma echt 'vast'

dan helpt alleen de resetknop.

2Bijv.: hoe lang duurt een memory printout etc.

(10)

4.5 Help

Het Helpcommando geeft een lijstje van de commando's die gekend worden.

Intcesten van de eerste letter van het commando activeert deze. Het

com-mando vraagt daarna zelf wel om de waarden van benodigde parameters (als

die er zijn).

4.6 Initialize memory

De routine welke het geheugen kan initialiseren met een een bepaalde waarde

start met de vraag op welk adres moet worden begonnen. Daarna dient het

laatste adres gegeven te worden en het byte data dat weggeschreven moet

worden. Alle geheugenplaatsen worden nu met het byte als data beschreven.

Wanneer dit commando los gelaten wordt op het geheugengebied $0-$500

worden vectoren, stack en andere door het programma gebruikte data

over-schreven.

4. 7

Load 82 records

Dit commando geeft de mogelijkheid een programma of data 'down te loaden'

(om maar eens een goede Nederlandse uitdrukking te gebruiken) in het

geheugen van het systeem. De te laden data dient het volgende formaat

te hebben:

data-record format: S2bcaaaaaaddddddddcc<crlf>

end-of-file-record: S9bcaaaaaacc<crlf>

S2/S9

bc

aaaaaa

dd

cc

<crlf>

he ader

bytecount

address

data

(address inclusive

I

(6

hex)

(2 hex)

2

hex)

checksurn over bytecount, data and address

ascii carriage return, linefeed sequence

Voor 'per ongeluk' activeren van het commando wordt de argeloze gebruiker

hulp geboden: Een 89-record, dat het laden zonder gevaar afsluit wordt

direct na aanroep van het commando getoond. Het laden van data stopt

(11)

wanneer een fout in een record ontdekt wordt, dit record wordt dan niet

verder verwerkt. Het programma wacht daarna op een record va.n het juiste

formaat om nieuwe data te laden danwel het laden te beeindigen. Wanneer

het adres uit het S9-record niet gelijk is aan 0 wordt het geladen programma

direct gestart op dit adres. Tydens het laden wordt geen

'?'

verzonden bij

een foutdetectie. Alle ontvangen karakters worden ge-echo'd.

4.8

Modify

Het Modifycommando handelt als volgt: Na aanroep wordt een adres van

een geheugenplaats gevraagd, daarna wordt de gevraagde geheugenplaats

afgedrukt met daarachter de waarde, welke gelezen is uit die geheugenplaats

(in HEX formaat). De lengte van de data is afhankelijk van de gegeven

adreswaarde: bij een even waarde is dit 2 bytes, een oneven adreswaarde 1

byte. Achter de afgedrukte waarde heeft de gebruiker nu de mogelijkheid

nieuwe data of een commando in te voeren.

4.8.1 Data

Data dient het formaat van een byte, een word of een longword te hebben,

afhankelijk van de datalengte, welke weer afhankelijk is van de huidige

adreswaarde. Is de data correct dan wordt deze naar de geheugenplaats

geschreven. Vervolgens wordt dezelfde geheugenplaats weer gelezen, om

te controleren of de inhoud overeenkomt met de opgegeven data. Is dit

het geval, dan wordt een spatie geschreven en op het volgende commando

gewacht. Komen gelezen en geschreven data niet overeen, dan wordt achter

de gegeven data een

'?'

geschreven waarna op een volgende regel het adres

van de geheugenplaats en de gelezen data getoond worden.

(12)

4.8.2

Commando's

De volgende commando's worden binnen Modify herkend:

Commando

I

Betekenis

"

gebruik de ascii waarde van het volgende karakter als

data, van deze data is het msb gelijk aan 1

gebruik de ascii waarde van het volgende karakter als

data, van deze data is het msb gelijk aan 0

lees volgende geheugenplaats

lees vorige geheugenplaats

lees deze geheugenplaats nogmaals

B

zet datalengte op byteformaat, lees deze

geheugen-plaats nogmaals

G

start een programma

L

zet datalengte op longwordformaat als het huidige

adres even is en lees deze geheugenplaats nogmaals

W

zet datalengte op wordformaat als het huidige adres

even is en lees deze geheugenplaats nogmaals

spatie

adres lees geheugeninhoud van adres

CR

verlaat modify commando

De commando's ' en " zijn alleen geldig bij een datalengte gelijk aan 'byte'.

4.9 Print

Het printcommando vraagt een start en een stopadres. De inhoud van de

geheugenadressen wordt in een tabel getoond: een kolom met een

adres-waarde, daarnaast de inhoud van een aantal adressen (in byte formaat),

waarachter de inhoud van dezelfde adressen, maar nu als ascii-karakter

afge-drukt, als de data een afdrukbaar karakter oplevert. Het commando kan

afgebroken worden door control-C. Control- W stopt alleen de uitvoer. Een

andere toetsaanslag laat deze weer verder gaan.

4.10 Reset vectoren 0-5 en

'T

De 68000 processor heeft acht interruptniveau's waarop interrupts kunnen

binnenkomen. Niveau 6 wordt nu door de klok gebruikt. De andere

inter-ruptvectoren worden door de deze routine geïnitialiseerd met een vector naar

(13)

een routine, welke een boodschap afdrukt met het interruptniveau van de

ontvangen interrupt. Tevens worden, als een neveneffect, alle vectoren welke

voor het afhandelen van adres-errors e.d. gebruikt worden ook opnieuw van

hun waarde voorzien. Op deze manier is het mogelijk 'per ongeluk

over-schrijven' van deze vectoren te herstellen als dit nog niet tot een crash heeft

geleid.

4.11

reset vectoren 0-7

Alle interruptvectoren worden door de deze routine geïnitialiseerd met een

vector naar een routine, welke een boodschap afdrukt met het

interrupt-niveau van de ontvangen interrupt. Tevens worden, als een neveneffect, alle

vectoren welke voor het afhandelen van adres-errors e.d. gebruikt worden

ook opnieuw van hun waarde voorzien. Op deze manier is het mogelijk 'per

ongeluk overschrijven' van deze vectoren te herstellen als dit nog niet tot

een crash heeft geleid.

4.12

Stackpointer waarde

De huidige waarde van de stackpointer wordt afgedrukt. Dit kan handig zijn

als men wil controleren of een geschreven routine de stack wel in goede orde

achter laat. (De waarde moet dan voor en na de routineaanroep hetzelfde

zijn.)

4.13

Trace functie

Met de tracefunctie kan een programma instructie voor instructie

door-lopen worden. Men kan per instructiesimulatie alle registers van de

pro-cessor bekijken en wijzigen. Wanneer een instructie uitgevoerd is wordt ook

aangegeven wat de eerstvolgende operatiecode zal zijn die uitgevoerd zal

worden. Dit maakt het mogelijk programma's op hun code te traceren,

zon-der dat direct voor iezon-dere veranzon-dering een nieuwe assemblerlisting gemaakt

hoeft te worden. Wanneer het commando trace gegeven wordt verschijnt:

'Trace function, type 'H' for help', met daarna de prompt' trace

> '.

Achter

de laatste kunnen de commando's uit de volgende tabel gegeven worden:

(14)

COMMANDO BETEKENIS

AO

Verander inhoud van adresregister AO

Al

Verander inhoud van adresregister Al

A2

Verander inhoud van adresregister A2

A3

Verander inhoud van adresregister A3

A4

Verander inhoud van adresregister A4

A5

Verander inhoud van adresregister A5

A6

Verander inhoud van adresregister A6

A7

Verander inhoud van adresregister A7

DO

Verander inhoud van dataregister DO

Dl

Verander inhoud van dataregister Dl

D2

Verander inhoud van dataregister D2

D3

Verander inhoud van dataregister D3

D4

Verander inhoud van dataregister D4

D5

Verander inhoud van dataregister D5

D6

Verander inhoud van dataregister D6

D7

Verander inhoud van dataregister D7

SP

Verander inhoud van de stackpoiner

SR

Verander inhoud van het statusregister

cc

Verander inhoud van het conditioncoderegister

PC

Verander inhoud van de programcounter

US

Verander inhoud van de userstackpointer

G

Go: voer de intructie waar de PC naar wijst uit

H

Help: geef een lijstje met beschikbare tracecommando's

M

Modifycommando aanroep

R

Display alle registers

Volgende PC waarde (geeft alleen even adressen)

'

Vorige PC waarde (geeft alleen even adressen)

CR

verlaat tracecommando

Wanneer binnen de tracefunctie een instructie uitgevoerd moet worden dient

de processor in suprvisor mode te staan, anders volgt er een foutmelding,

waarna de monitor opnieuw opstart.

4.14

Vector definitie

In de Vectordefinitieroutine kan de gebruiker vectoren naar eigen

interrupt-routines definiëren. Deze dienen vooralsnog afgesloten de worden met de

instructie RTS($4E75) om correct te werken. Wanneer interruptniveau 6

gebruikt moet worden wordt apart de vraag gesteld of men zeker is van zijn

(15)

zaak, daar op deze interrupt 50 keer per seconde een interrupt komt van de

systeemklok. Is men dit niet, dan wordt interruptniveau 6 voor systeemtijd

geïnitialiseerd en het interruptmaskeerniveau op 5 gezet wanneer dit een

grotere waarde dan 5 had.

4.15

Zoek de onbekende: X

De grote onbekende laat zich vinden met dit commando (hopelijk). Er

worden een begin en eindadres en een bytewaarde gevraagd. Alle

geheugen-plaatsen tussen begin en eind (grenzen inclusief) waar het byte als data

gevonden wordt, worden afgedrukt. De routine is gebruikt om uit te vinden

waar de 'gaten' in de selectiehardware zaten: sommige plekken waar volgens

de adresmap geen geheugen zou mogen zitten hadden dat in de praktijk daar

wél. Wanneer je dan eerst het geheugen initialiseert met een bekende waarde

en vervolgens op zo'n rare plek een byte verandert, dan kun je dit

veran-derde byte nu ook weer vinden op de plek waar die werkelijk thuishoort.

Ook dubbele verwijzingen van de MMU zijn op deze manier te vinden.

(16)

5

Systeemfoutenafhandeling

Een aantal fouten die in het systeem op kunnen treden worden door de

monitor met een foutboodschap gemeld. De monitor komt daarna weer met

de prompt ' mon68k: '. Deze functies zijn toegevoegd om te voorkomen dat

het systeem in de 'halt-mode' terecht komt: de processor doet dan helemaal

niets meer en daar wordt je als gebruiker ook niet wijzer van.

5.1 adres_error at or near

$adres

Wanneer een adresfout ontdekt wordt, verschijnt de boodschap

'address-error at or near $adres' op het scherm. De getoonde adreswaarde is het

adres waar de fout gevonden is. Omstandigheden waaronder deze op kan

treden zijn o.a.: starten van een programma op een oneven adres; een

sub-routineaanroep op het moment dat de stack oneven is; een 'word of

longword

adressering op een oneven adres.

5.2 bus_error/memory_privilege ... error at or near

$adres

De gehele titel luidt: 'bus_error/memory __ privilege_violation _error at or near

address $adres'. Hij wordt gegenereerd onder de omstandigheden die de

foutmelding aangeeft: indien een busfout of privilegefout ontdekt wordt. De

adreswaarde is het adres waar de fout ontdekt is. De busfout komt binnen

de labbushardware niet voor: alle timing van de componenten gebeurt 'op

tijd'. Vandaar dat de ontwerpers van de hardware deze interrupt 'over'

had-den. Ze hebben hem gebruikt om privilegefouten aan te geven. Voor meer

informatie zie het manual van de CPU /MMU kaart. Wanneer binnen het

tracecommando het gocommando gebruikt wordt en het statusregister niet

in supervisermode staat wordt deze foutmelding gegeven. Onder normale

omstandigheden mag deze fout niet optreden.

5.3

instruction_privilege_ violation_error at or

$adres

Deze fout verschijnt als men oner user-mode een instructie wenst uit te

voe-ren welke alleen onder supervisor-mode uitgevoerd mag wovoe-ren. Aangezien

de monitor continu in superviser mode staat zal dit onder normale

om-standigheden niet voorkomen.

(17)

5.4 illegaljnstruction_error at or near $ adres

Wanneer een niet gekende instructie wordt gevonden verschijnt deze melding

op het beeld. Verbeter de fout en probeer het opnieuw zou ik zo zeggen.

(18)

6

Praktijkervaringen

Het is natuurlijk niet te verwachten dan de maker over zijn produkt een

objectief oordeel zal geven dus de lezer is gewaarschuwd! Ik heb de

mo-nitor bij een applikatie (de eerste met een 68000!, jawel) toegepast. Het

volgende vond ik handig: Omdat de monitor standaard messages afdrukt

bij ontvangst van een interrupt kun je makkelijk ontdekken of een interrupt

aankomt en of een bron op de juiste interrupt aangesloten is (commando's

Een r). Ook aparte hardware is makkelijk te testen.

Daar staat tegenover dat deze epu-kaart niet met de PMDS-debugger bedr0ven

kan worden. Dit houdt in de praktijk in dat de te testen routines naast de

monitor in de prom geplaatst moeten worden om daarna onder controle van

de monitor de werking van de routines te kunnen testen. Dit gaat nog als

de routines niet al te groot zijn. Daarna moeten stukken monitor ingeruild

worden tegen applikatieruimte. Komt men nu in de problemen dan is een

logic-analyzer een onmisbaar hulpmiddel. Het is al met al een lange weg:

even vlot iets veranderen is er niet bij.

(19)

7

Literatuur

Het volgende boek is erg handig bij het programmeren in 68000 assembler:

'SC 68000 MICROPROCESSOR USERS MANUAL', fourth edition,

uit-gegeven door de firma PHILIPS,

met twaalfcijferig codenummer: 9499 060 22911.

(20)
(21)

tinas de routine echonan schoont > "· van het mogelijkheid ie:

.define rx8hx, rx8hx, rx4hx, eot, txatr, txep, error, pcrlf, prtime .define crlf, txnwl, tx2hx

I

teatmonitor voor 68000 applikatie• eer a te versie.

copyright IPD 1986 auteur : J.Tiesinga mon68k_old:

Binnen de monitor worden de registers dO,d1,aO,a1 en a7 gebruikt voor het doorgeven van data van en naar de verschillende routinee. De data wordt etaede doorgegeven in de volgende registers:

dO karakt ere ; d1 div.; aO pointer naar a1 pointer naar a7 syateematack een string een uit te (= ap) van karakters;

lezen I te beschrijven geheugenplaats;

De gabruiker dient ervoor te zorgen dat bij gabruik van de rou-juiste data bij aanroep van de routines in de regietera staat. Zie de betreffende routinas voor nadere specificatie.

6,12 november 1986. mon68k:

binnen de monitor wordan alle gegevene via de etack doorgegeven. Het meehenieme ia ale volgt:

Invoer : de aanroepende routine dient op etack ruimte te creeeren waar de data geplaatst kan worden. De aanroepanda heeft de verantwoordelijkheid de etack ook weer te voordat daze definitief varlaten wordt.

Uitvoer: De data wordt op de atack gezet, waarna de uitvoerende routine aangaroepan wordt. De aanroepende routine de stack.

18 november 1986.

De monitor heeft twee prompts: 'mon68k: ' en "'eyateem_up_time' De laatste maakt gebruik van interrupt level 6. Bij opatarten systeem wordt de aarsta prompt gebruikt. De gabruiker heeft de middels een commando (A) van prompt te veranderen.

2 decamber 1986.

(22)

m1111ory map : nparviur mode: UIU mode:

$000000- $1f:ff:ff ev mappad ram uaar mappad ram

$200000-$3fffff futura axt. r1111 future axt. ram

$400000-$6fffff w: MNU fault

$600000-$7fffff w: future axt. IIDIIU fault

$800000-$gfffff (future axt ram) fault

$aOOOOO-$bfffff FFP 32081 fault

$cOOOOO-$c007ff VMA fault

$c00800-$c00fff VPA fault

$c01000-$dfffff do not uaall fault

(23)

OOFFEOOO 00000400 OOCOOA09 OOCOOA09 OOCOOAOB 00000003 00000002 00000020 00000040 00000010 00000001 00000001 00000040 00000001 00000000 00000001 00000003 00000004 OOOOOOOA OOOOOOOD 00000017 00000020 00000022 00000027 0000002C 0000002E 00000032 00000038 0000003A 00000030 00000042 00000043 00000045 00000047 0000004C 00000060 00000052 00000063 00000067 00000069 OOOOODOA

r: raad, w: write, av: auperviser mode, uaer: uaer mode

aantal algemene equatee: r - = OxffeOOO

ram = Ox000400

I

rom base addren ram ban addreaa acia = Oxc00a09 I I acia : type 6860

'

aciac aciad I acia acia + 2 aciar = 0x03 tdra

= Ob00000010

ovrn Ob00100000 pa

=

Ob01000000 fa Ob00010000 rdrf

=

Ob00000001 ckc Ob00000001 rteb

=

Ob01000000 tdre_bitno 1 rdrf_bitno

=

0 I general equates: I as ei i: I cntrlc eot lf er cntrlw epch dquote aquote c -period two eight 3 4 Oxa "" Oxd Ox17 Ox20 Ox22

= Ox27

Ox2c Ox2e Ox32 Ox38 emcolon= Ox3a equate Ox3d chrb

=

Ox42 chrc Ox43 chre Ox46 chrg Ox47 chrl Ox4c chrp Ox60 chrr Ox52 chra Ox63 chrw = Ox57 chry Ox69 crlf= OxOdOa

I acia baae addraas

lacia reset command

ltranamit data ragiatar empty bit loverrun bit

lparity error bit !framing error bit

lreceive data register full bit

feloek div 16, 7bit data, even par, 2stopbita lrts bit

lvalue for booleans

Icontrol C (abort function) land of text 'char' llinefeed

lcarriaga return

Icontrol W (auapend output)

lapace 'char' lchar """ lchar lchar

...

• n

.

lchar • • lchar "2" lchar "8" lchar •·• lchar "=" lchar "B" lchar

•c•

lchar "E" lchar "G" I char "L" lchar "P" I char "R" lchar

•s•

I char

•w•

lchar "Y"

(24)

00000400 00000404 00000408 0000040C 00000410 00000414 • 00000418 0000041C 00000420 00000424 00000428 00000420 00000430 00000434 00000438 0000043C 00000440 00000444 00000448 0000044A 0000044E 00000460 00000464 00000468 0000046C 00000480 00000464 00000468 0000046C 00000470 00000472 00000474 00000400 OOFFEOOO 00000400 OOFFE004 OOFFE008 OOFFE008 .18ct .bn .base rem

l 1oma •pace for regiater_contanta for trace_function

I aav_dO: Bav_dl: aav_d2: Bav_d3: nv_d4: nv_d6: nv_d6: Bav_d7: Bav_aO: aav_a1: Bav_a2: Bav_a3:

.apace 4 ltraca memory .apace 4 .apace 4 .Bpaca 4 .apace 4 .apace 4 .apace 4 .space 4 .space 4 .Bpace 4 .apace 4 .apace 4 . a pace 4 .apace 4 .Bpace 4 .apace 4 .apace 4 .Bpace 2 .apace 4 .apace 4 Bav_a4: aav_a6: aav_a6: aav_a7: aav_uep: aav_er aav_pc IIBV_Bp

aavar: .apace 2 !Bava atatue_regiater during trace mode

vect1: .Bpace 4 vect2: .apace 4 vact3: .Bpace 4 vect4: .apace 4 vect6: .apace 4 vect6: .apace 4 vect7: .Bpace 4

timarcnt: .apace 4 l counter for timerh: I prompt:

timerprompt: .apace 2 lboclean for prompt:

tcnt1: .apace 2 ! hulpcounter for time

Bavpc: .Bpace 4 laave pc_value for exeptionhandlera

68000 definitiona: av_atackpointer OX0400 I .aect . text .base rom ! vectoren: .data4 av_atackpointar . data4 pvrup I

! start van programma

I

pwrup

I

!initiale waarde

clear interrupt from timer:

(25)

OOFFE008 4~3DOOE00001 00001000 00400000 0040000~ 00400004 00400006 clr.b timer_dev.l initialiu BIIIU pagaize = 40D6 I ldo 10. lpagae of 4k bytes base of firat map register:

sv_base Ox400000 up_base Ox400002 udrbaae

=

Ox400004 udwbase

=

Ox400006 I tauperviaar !uaer program luaer data raad luaer data write

OOFFEOOE ~07C00400000 mapnorm: move.l #sv_baaa,aO !aO points to map registers

OOFFE014 4~40 clr.w dO leetup to ~66 registers

OOFFE016 3080 OOFFE018 DlFCOOOOlOOO OOFFEOlE 6~00 OOFFE020 66F4 OOFFE0~2 610006BA OOFFE0~8 4~B8046C OOFFEO~A 4~380470 OOFFEO~E 61000DE6 OOFFE032 4E66FFFC

do _map: move. w dO, (ao)

add.l #pagaize,aO add.b #l,dO bne do_map

laat page number in register !point to next map register ladvance page number

!do all ~66 registers

all memory mappad to aupervieer.

initialize indirect and direct--interrupt-veetora

bar mrBBvq laat veetora

clr.l timerent !clear timer_counter

clr.b timerprompt !time not as prompt

bar intcp linitialize COBII!unication port

print 'type H for help'

link a6,#-4 lcreate soma room

OOFFE036 2D7COOFFF4CBFFFC \ OOFFE03E 61000CF8 OOFFE042 61000CE2 OOFFE046 4E6E OOFFE048 46FC2600 OOFFE04C 61000C28 OOFFEo6o 4E66FFFE OOFFE064 61000096 OOFFE068 10~EFFFF OOFFE06C 4E6E OOFFE06E ~o7CooFFE080 OOFFE064 4A10 move.l #mamhelp,-4(a6)

bar txatr !eend text

bar pcrlf unlk a6 init_ar:

notrace, auperviser mode interrupt level maak

= 6

(eyatam time enabled), all flaga claarad. init_ar: move.w #Ob0010010100000000,sr

re-enter point for commanda:

mrntr: bar prompt !print monitor prompt

link a6,#-2 !create room for eh ar

bar rxchr !get char

move.b -1(a6),do lget char in do unlk a6

move.l #cmtbl,aO lget base of command_table in aO

(26)

OOFFE066 6606 OOFFE068 61000006 OOFFE06C 60DE OOFFE06E 80280001 OOFFE072 6704 OOFFE074 6C88 OOFFE076 60EC mrntr1: mrntr2: bne mrntr1 bar arror bra mrntr cmp ob 1 (aO) , dO beq mrntr2 addol 16,a0 bra mrntrO moveol 2(aO).aO lne => no !print

'?'

I and try again ldid command match? leq => match : execute lnext pointer in tabla !try the othera ! gat addren of routine

routine

OOFFE078 20680002 OOFFE07C 4E90 OOFFE07E 60CC

jar (aO) lexacute routine, aftar rta back in monitor

• OOFFE080 OOFFE080 2041 OOFFE082 OOFFEODC OOFFE086 2046 OOFFE088 OOFFEOF6 OOFFE08C 2046 OOFFE08E OOFFE16E OOFFE092 2047 OOFFE094 OOFFE1FO OOFFE098 2048 OOFFE09A OOFFE226 OOFFE09E 2049 OOFFEOAO OOFFE23A OOFFEOA4 204C OOFFEOA6 OOFFE29E OOFFEOAA 204D OOFFEOAC OOFFE364 OOFFEOBO 2060 OOFFEOB2 OOFFE4F6 OOFFEOB6 2062 OOFFEOB8 OOFFE6CC OOFFEOBC 2072 ayatem time) OOFFEOBE OOFFE678 OOFFEOC2 2063 OOFFEOC4 OOFFE696 OOFFEOC8 2064 OOFFEOCA OOFFE6B2 OOFFEOCE 2066 OOFFEODO OOFFEADA OOFFEOD4 2068 OOFFEOD6 OOFFEBBC OOFFEODA 0000 bra mrntr cmtbl oaacii

.

,

..

odata4 malter oucii • E" odllta4 men a oucii • F" odata4 mfind oaacii

• a••

odata4 mgo oa&cii

• H"

odata4 mhelp oucii • l" odata4 minit oaacii • L" odata4 mlo ad oa&cii

• N••

odata4 JIIIIOd oucii

" P"

odata4 mprint o&scii • R" odata4 mresv oaacii • r" odata4 mresva oa&cii • S" odata4 matack oaacii " T" odata4 mtrace o aacii

• v•

odata4 mvect oaacii n

x••

odata4 mx odata2 0 oalign 2 I I mal ter: toggle prompt

!gat other command

I command table

lalter prompt

lenable interrupt• for level x lfind ram in the ayatam

I 'go' : a tart at uaer defined

I help routine

linit memory with a pattarn lload a program

lmodify memory

!print memory contenta lreaet veetora for normal u se Iraset all veetors for monitor

!stackpointer value ltrace function

laat veetora for uaer routines lfind pattarn x in sy1tem land of tabla marker

OOFFEODC 4E66FFFC malter: link a6,t-4

OOFFEOEO 2D7COOFFF213FFFC \ OOFFEOEB 61000C4E OOFFEOEC 4E6E OOFFEOEE OA3800010470 OOFFEOF4 4E76 moveol lmaalter,-4(a6) bar txatr unlk at!

eorob 11,timerprompt ltoggle bit rts

place

(27)

OOFFEOF6 48E78080 OOFFEOFA 4E66FFFC

mana:

enable interrupts at level x in : none

out: none u1ee: dO,aO,ar,a7

calla: txchr,cx1hx,txstr,rx1hx

mena: movem.l d0/a0,-(a7) !save

link a6,1-4 lget

regietera aome spaca OOFFEOFE 2D7COOFFF223FFFC \ OOFFE106 61000C30 OOFFE10A 40CO OOFFE10C E048 OOFFE10E 02000007 OOFFE112 1D40FFFF OOFFE116 61000010 OOFFE11A 61000CE6 OOFFE11E 2D7COOFFF249FFFC \ menaO: menal:

move.l lmeena,-4(a6)laet up pointer

bar txatr !aend string

mova.w ar,dO !gat current level

lsr.w IB,dO

and.b 17,d0 !maak out interrupt

move.b d0,-1(a6) !

bar cxlhx lconvert to aacii

bar txchr laend level

move.l lmaena1,-4(a6) la1k new level

bar txatr I bar rxlhx bcc manal bar error bra mena2 cmp.b 17,-1(a6) bhi menaO move.b -1(a6),d0 lal. w 18, dO move. w ar, -2 (a6)

!gat anawer tea => error I leave

!check upper bound lhi => error I get value in dO

I

and.w 10xf0ff,-2(a6)1remove old level

or. w dO, -2 (a6) I calculate new ar

level OOFFE126 61000C10 OOFFE12A 61000DEO OOFFE12E 11406 OOFFE130 111000C3E OOFFE134 11020 OOFFE136 OC2E0007FFFF OOFFE13C 62F2 OOFFE13E 102EFFFF OOFFE142 E148 OOFFE144 40EEFFFE OOFFE148 026EFOFFFFFE OOFFE14E 816EFFFE OOFFE162 46EEFFFE OOFFE166 4E6E OOFFE168 4CDF0101 OOFFE16C 4E76

move.w -2(a6),ar lput it in it'• place

001FFFFF

mena2:

mfind: unlk a6

movem.l (a7)+,d0/a0 Irastore regieters rta

find ram in area $0-$1fffff

ramend

=

Ox'.fffff

'

OOFFE16E 48E7C080 mfind: movem.l d0-d1/a0,-(a7) !save registers

link a6,1-4 OOFFE162 4E66FFFC OOFFE166 2D7COOFFF263FFFC \ OOFFE16E 61000BC8 OOFFE172 207COOOOOOOO OOFFE178 B1FC001FFFFF OOFFE17E 62000068 OOFFE182 1210 OOFFE184 4601 OOFFE186 4610 OOFFE188 B218 OOFFE18A 66EC OOFFE18C 41101 OOFFE18E 1141FFFF

move.l lmafind,-4(a6) laat up pointer bar txatr move.l IO,aO mfind1: cmp.l tramend,aO bhi mfind6 move.b (aO),d1 not. b dl not.b (aO) cmp.b (aO)+,dl bne mfindl not.b d1 move. b dl, -l(aO) ! start at bottom !all done? !eq => leave I get content a !na => no ram

(28)

OOFFE1D2 B228FFFF OOFFE1D6 68C6 OOFFE11J8 6388 cmp.b -1(a0) ,dl bne mfind begin found aub.l 1!1,a0

!na => reatora failed

!adjuat pointer value OOFFE11JA 2D7COOFFF27AFFFC \ OOFFE1A2 61000894 OOFFE1A6 2D48FFFC OOFFE1AA 61000CE4 OOFFEUE 6288 mova.l l!mefb,-4(a6) bar txstr move.l a0,-4(a8) bar tx8hx add.l U,ao !~end valua tnext byte pleasa OOFFE1BO 2D7COOFFF289FFFC \ OOFFE1B8 61000B7E OOFFE1BC B1FC00200000 OOFFE1C2 6224 OOFFE1C4 1210 OOFFE1C6 4801 OOFFE1C8 4810 OOFFElCA B218 OOFFElCC 880C OOFFE1CE 4801 OOFFE1DO 4828FFFF OOFFE1D4 B228FFFF OOFFE1D8 67E2 OOFFE1DA 6688 OOFFE1DC 2D48FFFC OOFFE1EO 61000CAE OOFFE1E4 6288 OOFFE1E6 8090 OOFFE1E8 4E6E OOFFE1EA 4CDF0103 OOFFE1EE 4E76 mova.l l!mafa,-4(a6) bar txstr find end mfind2: cmp.l l!ramand+l,aO bhi mfind6 move. b (aO) ,dl not.b dl not.b (aO) cmp.b (aO)+,dl bne mfind3 not.b dl not.b -1(a0) cmp.b -1(aO) ,dl beq mfind2 end found

mfind3: aub.l 1!2,a0 move.l a0,-4(a8) bar tx8hx add.l 1!1,a0 bra mfindl mfind6: unlk a8 ldone? leq => y88

tne c> end found lrBitore data

lt81t if fail

ladjust end pointer lnnd value !try the othera

movem..l (a7)+,d0-d1/a0 Irastore registers rta

~~~go:

f

aak the user for an addreas, if he (or aha) entars ons, jump to that location. in : none

out: none uaea: dO,aO,a7 calle: rx8hx

OOFFE1FO 48E70080 mgo: movem.l aO, -(a7)

link a6,11-4 leava registers OOFFE1F4 4E68FFFC OOFFE1F8 2D7COOFFF26FFFFC \ OOFFE200 61000838 OOFFE204 61000BBE OOFFE208 61000D74 move.l tmego,-4(a6) bar txatr bar t:xmaatad bar rx8hx

lcreate room for pointer data !put pointer on stack !print string

!eend 'enter atartaddreaa' !gat atartaddrass on atack

(29)

OOFFE20C 6406 OOFFE20E 61000860 OOFFE212 600A OOFFE214 206EFFFC OOFFE218 6100080C OOFFE21C 4Ego OOFFE21E 4E6E OOFFE220 4CDF0100 OOFFE224 4E76 mgo2: mgo1: mhelp: bcc mgo2 bar error bra mgo1 move.l -4(a6),a0 bar pcrlf j ar (aO) unlk a6 movam.l (a7)+,a0 rta in: none out:none uaea: none calla: txatr

OOFFE226 4E56FFFC mhelp: link a6,#-4

OOFFE22A 2D7COOFFF2g7FFFC \ OOFFE232 61000804 OOFFE236 4E6E OOFFE238 4E76 move.l #mahalp,-4(a6) bar txatr unlk a6 rta minit: initialize mamory in : none out: none ueea: dO,d1,aO,ar,a7 calla: rx6hx,rx2hx,txatr

Ion error return

!print '?' land leava lget addraea in aO !print crlf u ackn. lexacute routine I

minit: movem.l d0-d1/a0,-(a7) leave regietera OOFFE2SA 48E7C080

OOFFE2SE 4E66FFFC link a6,#-4 lcreate room tor pointer

OOFFE242 2D7COOFFFSE6FFFC \

move.l #mein1,-4(a6) !put pointer on etack

OOFFE24A 61000AEC bar txetr lnnd string

OOFFE24E 61000874 bsr txmaatad I

OOFFE262 61000D2A bar rx6hx !gat etartaddreea

OOFFE266 6406 bcc minit2 I ca => arro·

OOFFE258 61000B16 minitO: bar error !print

'?'

OOFFE26C 6038 bra minit1 land leave

OOFFE26E 2F2EFFFC minit2: move.l -4(a6),-(a7) la ave atartadrr.

OOFFE262 61000AC2 bsr pcrlf

OOFFE266 61000870 bar txmaenad

OOFFE26A 61000D12 bar rx6hx I get end addreaa

OOFFE26E 66E8 bca minitO les => error

OOFFE270 2F2EFFFC move.l -4(a6),-(a7) laave aecond addreaa on

OOFFE274 2D7COOFFFSFSFFFC \

move.l lmainS,-4(a6) !pointer to data text

OOFFE27C 61000ABA bar txstr laend text

OOFFE280 61ooocg2 bar rx2hx !gat anawar

OOFFE284 66D2 bce minitO !ca => wrong anawer

OOFFE286 102EFFFF move.b -1(a6),d0 !gat answer in dO

OOFFE28A 221F move.l (a7)+,d1 lget endaddress

OOFFE28C 206F move.l (a7)+,a0 lget startaddrass

(30)

OOFFE28E 1080 OOFFE290 8288 OOFFE292 6288 OOFFE294 86F8 OOFFE298 4E6E OOFFE298 4CDF0103 OOFFE29C 4E76 OOFFE29E 48E7E080 OOFFE2A2 4E66FFFC

lllinit4: move.b dO,(aO) cmp.l aO,d1 add.l 11,a0 bne lllinit4 mini t1 : unlk a6 I in i t ram !end reached! I next m1111ory location lne => continue movem.l (a7)+,d0-d1/a0 Irastore regi•tera rta

mload:

load s2 records

data_record format: S2bcaaaaaaddddddddcc<crlf> end_of_file_racord: S8bcaaaaaacc<crlf>

S2/S8 headar

bc bytacount (addraas incluaiva/ 2 hex)

aaaaaa addreaa (6 hex)

cc checkaum over bytacount, data and addraas

if addreaa in and_of_fila_record ia unequal to 0 tha routine will autostart at the given addrees

mload: movem.l d0-d2/a0,-(a7) link a6,1-4

!save registers lget aome room on •tack OOFFE2A6 2D7COOFFF416FFFC \ OOFFE2AE 81000A88 OOFFE282 81000838 OOFFE286 OC2E0063FFFF OOFFE2BC 66F4 OOFFE2BE 81000B2C OOFFE2C2 OC2E0032FFFF OOFFE2C8 8726 OOFFE2CA OC2E0038FFFF OOFFE2DO 66E4 OOFFE2D2 OOFFE2D2 614C OOFFE2D4 6612 OOFFE2D6 8122 OOFFE2D8 660E OOFFE2DA 61000B10 OOFFE2DE B1FCOOOOOOOO OOFFE2E4 6702 OOFFE2E6 4E90 in monitor OOFFE2E8 4E6E OOFFE2EA 4CDF0107 OOFFE2EE 4E76 OOFFE2FO 612E OOFFE2F2 86F4 OOFFE2F4 6104 OOFFE2F6 66FO OOFFE2F8 6088 OOFFE2FA 61000C18 OOFFE2FE 6641

move.l lmaload,-4(a6) !eend text bar txstr mlod1: bar rxchr mlod2: cmp.b lchra,-1(a6) bne mlod1 mlodaB bar rxchr cmp.b ltwo,-1(a6) beq mloda2 cmp.b leight,-1(a6) bne mlod2 bar load21 bes load33 bar load11 bes load33 bar rxchr cmp.l IO,aO beq load33 jar (aO) !gat char lis it an 'S'! !no => wait for it I gat aecond eh ar lis it an '2'! !eq => load S2-record

!ia it an '8'!

!no => wait for right aequence

I get run address

!es => error

I

abort load

!es => checksum error

!receive l echo

·z

for lildos file tranaport

!eq => no auto_execute

lexacute routine, aftar 'rta' back

load33:unlk a6 !(do not change a7)

movam.l (a7)+,d0-d2/a0 Irastore registers

rta mloda2:bar load21 bes load33 bar load11 bes load33 bra mlod1 load11:bsr rx2hx bes load31 !gat data !ca => not hax

(31)

OOFFE304 102EFFFF OOFFE308 6301 OOFFE30A 670A OOFFE30C 1080 OOFFE30E 8010 OOFFE310 6638 OOFFE312 6288 OOFFE314 60E4 OOFFE316 6202 OOFFE318 6630 OOFFE31A 023COOFE OOFFE31E 4E76 OOFFE320 61000BF2 OOFFE324 6624 OOFFE326 122EFFFF OOFFE32A 1401 OOFFE32C 6701 OOFFE32E 61000C4E OOFFE332 6616 OOFFE334 D42EFFFF OOFFE338 D42EFFFE OOFFE33C D42EFFFD OOFFE340 206EFFFC OOFFE344 023COOFE niet!) move.b -1(a6),d0 eub.b 11,d1 beq load16 move. b dO, (aO) c:mp. b (aO), dO bne load31 add.l tl,ao bra load11 load16:add.b 11,d2 bne load31 and IOxfe, eer rta load21:bar rx2hx bca load31 move.b -1(a6),d1 move.b d1,d2 aub.b 13,d1 bar rx6hx bca load31 add.b -1(a6) ,d2 add.b -2(a6),d2 add.b -3(a6),d2 move.l ~4(a6),a0 ud IOxf •, eer !gat data Ideerement bytecount leq => done l1tore data ldid data store? !na = no => leava I next addreaa

!na => wrong check1um I clear carry

!gat numbar of bytes to receive !ca => not hax

I gat value in d1 lchackaum in d2

lnumber of bytes in record I gat addren

I ca => not hex

ladjuat chackaum

!in aO : pointer to addreaa

lelaar carry (move -> ax doet dit

OOFFE348 4E76 rta

OOFFE34A 61000!24 OOFFE34E 003C0001 OOFFE362 4E76 OOFFE364 OOFFE364 48E7COCO OOFFE368 4E66FFFC error : exit load31: bar error

~d:

or 11,ccr laat carry rta

110dify routine

anablaa uaar to change the contante of a memory location

in : none out: none

uaaa: dO,d1,aO,a1,ar,a7 (het hela zootje)

calla: rx6hx,rx4hx,rx2hx,rx1hx,tx6hx,tx4hx,tx2hx,txap,rxchr,txatr,pcrlf

aaod

=

movam.l d0-d1/a0-a1,-(a7) !save regietera

link a6,1-4 lcraate room

OOFFE36C 2D7COOFFF44AFFFC \

mova.l lmamod,-4(a6) linit pointer

OOFFE364 61000902 bsr txatr !print taxt

OOFFE368 61000C14 ~0: bar rx6hx !gat atartaddraaa

OOFFE36C 66000178 bel Dlllod8 !ca => error : exit

OOFFE370 226EFFFC mova.l -4(a6),a1 lal : pointer to memory

OOFFE374 2D49FFFC ~Oa: move.l a1,-4(a6) I

OOFFE378 7201 move.l 11,d1 Jinerament for naxt addreaa

OOFFE37A 082EOOOOFFFF btat I0,-1(a6) !tast if memory addraaa ia odd or

even

OOFFE380 6602 bna 111111odl lne => odd : in eremant ia

(32)

OOFFE384 D3C1 OOFFE386 D3C1 OOFFE388 61000DDC OOFFE38C 2D49FFFC OOFFE3DO 61000AFE OOFFE394 610009C8 OOFFE398 OC8100000001 OOFFE39E 671C OOFFE3AO OC8100000002 OOFFE3A6 670A • OOFFE3A8 2D61FFFC OOFFE3AC 61000806 OOFFE3BO 6012 OOFFE3B2 3D61FFFE OOFFE3B6 61000AB4 OOFFE3BA 6008 OOFFE3BC 1D61FFFF OOFFE3CO 61000A7A OOFFE3C4 610001198 OOFFE3C8 61000A22 OOFFE3CC 102EFFFF OOFFE3DO OCOOOOOD OOFFE3D4 67000114 OOFFE3D8 OC00002E OOFFE3DC 67 A8 OOFFE3DE OC00002C OOFFE3E2 6604 OOFFE3E4 93C1 OOFFE3E6 609C OOFFE3E8 OC00003D OOFFE3EC 6796 OOFFE3EE OC000020 OOFFE3F2 6700FF74 OOFFE3F6 OC8100000001 OOFFE3FC 6622 OOFFE3FE OC000022 OOFFE402 660E OOFFE404 610009E6 OOFFE408 002E0080FFFF OOFFE40E 6000007C OOFFE412 OC000027 OOFFE416 6608 OOFFE418 610009D2 OOFFE41C 6000006E OOFFE420 OC000047 OOFFE424 6608 OOFFE426 6100FDC8 OOFFE42A 6000FF68

mmod1: eub.l d1,a1

mmod2: add.l d1,a1

bar pcrlf

move .1 a1, -4 (a6)

bar tx6hx bar txap cmp.l 11,d1 beq mmod2b cmp.l 12,d1 beq Dlllod2a Idaeramant addreaa finerement addreaa !print crl:f

!gat addraas at -4(a6) I print addreu fund spaca I of:faet ia 1? leq => print it

! of:faet is 21

!eq => print data

gat me111ory contente I offset ia 4

move.l (a1),-4(a6) bar tx8hx

bra Dlllod3

!gat memory contente fund it

gat me111ory contente I offset is 2

mmod2a: move.w (a1),-2(a6) bar tx4hx

bra Jlllllod3

!gat memory content• laand it

gat mamory contant& I offset ia 1

mmod2b: move.b (a1),-1(a6) bar tx2hx

mmod3: bar txap

bar rxchr move.b -1(a6),d0 cmp. b Ier, dO baq Dlllod9 cmp.b lperiod,dO baq Dlllod2 cmp. b lcoDII!a, dO bne mmod4 IUb.l d1,a1 bra Dlllodl Jlllllod4: cmp.b lequate,dO beq Dlllodl cmp. b ,.pch, dO baq 1111110dO

!gat memory contant• !print it

fund •pace

lwait for cammand or data !gat char in dO I end of coDII!and 1 laq => quit lnaxt location1 I !previoua location1 I Idaeramant addreaa land open thia location lopen same location again1 lopen anothar location? !enter new addreaa • and ' CODIIIand only valid for byte_acceaa

cmp.l U,dl bna Dlllod6a cmp.b ldquota,dO bne Dlllod6 bar rxchr or.b 10x80,-1(a6) bra Dlllod7a mmod6: cmp.b laquote,dO bne Dlllod6a bar rxchr bra Jlllllod7a mmod6a: cmp.b lchrg,dO bna DDilod6c bar mgo bra 111111od1 lofaaet =1 1 I byta_acceaa1 lne => no

lanter ascii valua? lget char

Int msb

!save data

!enter ascii valua? !gat char

!save data I 'go' co!IIIIIAnd? faxacute coDIIIand. land return

(33)

OOFFE42E OC000057 OOFFE432 8700FF40 OOFFE436 OC000042 OOFFE431 6606 OOFFE43C 7201 OOFFE43E 6000FF44 OOFFE442 OC00004C OOFFE446 6614 OOFFE448 2D49FFFC OOFFE44C 082EOOOOFFFF OOFFE452 6600FF30 OOFFE466 7204 OOFFE468 8000FF2A OOFFE46C 1D40FFFF. OOFFE460 61000A78 OOFFE464 6408 OOFFE466 61000908 OOFFE461 6000FF18 OOFFE46E 102EFFFF OOFFE472 E908 OOFFE474 810001116 OOFFE478 66EC OOFFE47A 022EOOOFFFFF OOFFE480 812EFFFF OOFFE484 OC8100000001 OOFFE481 6610 OOFFE48C 12AEFFFF OOFFE490 102EFFFF OOFFE494 8011 OOFFE496 66CE OOFFE498 6000FF2A OOFFE49C OC8100000002 OOFFE4A2 6624 OOFFE4A4 102EFFFF OOFFE4A8 61000A6A OOFFE4AC 65B8 OOFFE4AE E148 OOFFE4BO 48178000 OOFFE4B4 102EFFFF OOFFE4B8 024000FF OOFFE4BC 806F OOFFE4BE 3280 OOFFE4CO B061 OOFFE4C2 66A2 OOFFE4C4 6000FEFE OOFFE4C8 102EFFFF OOFFE4CC 61000ABO OOFFE4DO 6694 OOFFE4D2 E188 OOFFE4D4 E188 OOFFE4D6 E188 OOFFE4D8 80AEFFFC OOFFE4DC 2280 OOFFE4DE B091 OOFFE4EO 6684 OOFFE4E2 6000FEEO IIDDd6c: cmp. b lchrw, dO ldata_word ?

beq IIDOd0a !t .. t if addre88 ia even, ut offaet

to wordaize if ID.

cmp . b lchrb , dO !data_ byte?

bna DDod6b

move.l 11,d1 Int ofhat to 1

bra DDOd1 I

IIDOd6b: cmp.b lchrl,dO I data_1ongword?

bne DDOd6 I

move.l a1,-4(a6) leava current addreaa

btat 10,-1 (a6) !teat bit 0 (addreaa muet be even!)

bne DDOdl lodd => open thie 1oeation again

move.1 l4,d1 leven => set offset to 4

bra IIDOdl land open thiB loeation again

lno valid eODDand; input cou1d be data.

I mmod6; mmod6a: mmod7: move.b d0,-1(a6) bar exchr bec DDod7 bar error bra DDodl move.b -1(a6),d0 lal. b 14,d0 bsr rx1hx bea DDod6a and.b 10xf,-1(a6) or.b d0,-1(a6) cmp.1 11,d1 bna 11Dod7b DDod7a: move.b -1(a6), (al)

move.b -1(a6),d0 cmp. b (al) , dO bne DDod6a bra DDod3 mmod7b: cmp.l 12,d1 bne mmod7e move.b -1(a6),d0 bar rx2hx bes DDod6a lal.w 18,d0 movem.w d0,-(a7) move.b -1(a6),d0 and. w IOxff ,dO or.w (a7)+,d0 mova.w dO, (a1) cmp.w (a1),d0 bne 11Dod6a bra DDod3 mmod7c: move.b -1(a6),d0

bar rx6hx bes DDod6a 111.1 #8,d0 111.1 #8,d0 la1.1 #8,d0 or.1 -4(a6),d0 move .1 dO, (al) cmp.l (al) ,dO bne DDIIOd6a bra DDod3 I c1ear carry lconvert input lee => no error ! report error land re_open loeation lget reault in dO

I

lget the other half !ca •> not hex !maak out reault lget va1ue at -1(a6)

lofhet =1 ?

lne => jump I atore value I gat data in dO

!check if va1ua did store I report error

lwait for other command

I offset is 2?

!na => muat ba 4 lget value in dO land gat tha other two !ca => error I re_open laave va1ue on atack !gat byte

!gat mabita zero !gat reau1t in dO !save new va1ue

!check if va1ue did etore

!report error I re_open

lwait for other command lget value in dO land gat the other aix !ca => error

I

re_open

!shift mabyte to right poaition lca1culate raau1t in dO !store reault

!check if data did store !report error lre_open !wait for other command

(34)

OOFFE4E6 61000888 OOFFE4EA 023COOFE OOFFE4EE 4E6E OOFFE4FO 4CDF0303 OOFFE4F4 4E76 OOFFE4F6 48E7C080 OOFFE4FA 4E66FFFC 11111od8: JllllOd9: ber error and IOxfa, eer unlk a6

!wrong input I clear carry

movam.l (a7)+,d0-d1/a0-a1 Irastore ragietara

rta !exit

mprint:

print memory content& in : none

out: none

uaaa: dO,d1,aO,a1,a7,ar

calla: rx6hx,tx6hx,tx2hx,txep,txnwl,txetr mprint: movam.l d0-d1/a0,-(a7) I aava ragiatara

link a6,1-4 I OOFFE4FE 2D7COOFFF47BFFFC \ OOFFE606 61000830 OOFFE60A 610008B8 OOFFE60E 61000A6E OOFFE612 660000B2 OOFFE616 2F2EFFFC OOFFE61A 6100080A OOFFE61E 610008B8 OOFFE622 61000A6A OOFFE626 6600009E OOFFE62A 221F OOFFE62C 2F2EFFFC OOFFE630 2F01 OOFFE632 61000862 OOFFE636 66000082 OOFFE63A 2D67FFFC OOFFE63E 61000960 OOFFE642 6100081A OOFFE646 2067 OOFFE648 123COOOO OOFFE64C 1D60FFFF OOFFE660 610008EA OOFFES64 61000808 OOFFES68 5201 OOFFE6SA B1EF0004 OOFFES6E 6712 OOFFES60 6288 OOFFE662 2008 OOFFE664 028000FFFFFF OOFFE66A 2040 OOFFE66C OC010010 OOFFES70 66DA OOFFES72 2067 OOFFES74 1018 OOFFES76 0200007F OOFFES7A OC000020 OOFFES7E 6D06

move.l lmaprint1,-4(a6) lload pointer to taxt

bar txatr laand text

bar txmaatad I bar rx6hx bc• mprint9 move.l -4(a6),-(a7) bar pcrlf bar txmaanad bar rx6hx bca mprint9a mova.l (a7)+,d1 mova.l -4(a6),-(a7) move.l d1,-(a7) mprntO: ber txnwl !gat atartaddraea lee => error : laava leava etartaddraaa

I gat andaddreea lee &) error : laava

!gat atartaddraaa I a ave andaddran

laava currant line_addraee llay_out

bes mprnt7 les => abort wantad : exit

mova.l (a7),-4(a6) lget currant_lina addraea

bar tx6hx laand it to comm. port.

bar txap llayout

mova.l (a7),a0 !gat addraaa_pointar in aO

mova.b IO,d1 !addraae count par lina

mprnt1: mova.b (aO) ,-1(a6) I gat data

mprnta: mprnt2:

bar tx2hx !print data

bar txap !print apace

add.b 11,d1 tineremant counter

cmp.l 4(a7),a0 !eompare with andaddraaa

baq mprnta !aq => dona

add.l 11,a0 Jineramant pointer

move. 1 aO, dO I

and.l IOxOOffffff,dO !maak addraaa mova.l dO,aO

cmp. b 116, d1 bna mprnt1

!max. numbar of bytaa par lina lna => go for more

mova.l (a7),a0 lraload addraaapointar

mova.b (aO)+,dO !gat data again

and.b IOx7t,dO lelaar bit 7 I aaeii data

emp.b lapeh,dO

(35)

OOFFE680 OC00007F OOFFE684 6D04 OOFFE686 103C002E OOFFE68A 1D40FFFF OOFFE68E 61000872 OOFFE692 6301 OOFFE694 66DE OOFFE696 6388 OOFFE698 2008 OOFFE69A 028000FFFFFF OOFFE6AO 2040 OOFFE6A2 B1EF0004 OOFFE6A6 6712 OOFFE6A8 6288 OOFFE6AA 2008 OOFFE6AC 028000FFFFFF OOFFE682 2040 OOFFE684 2E88 OOFFE686 6000FF7A mprnt3: mprnt4: cmp.b tOx7f,dO blt mprnt4 llt o:> readable !print I

' '

move.b tperiod,dO move. b dO, -1(a6) bar txchr aub.b tl,d1

I print character Ideerament counter

bne mprnt2 lne => go for more

sub.l 11,a0 Ideerement pointer

move . 1 aO, dO I

and.l IOxOOffffff,dO !maak address

move.l dO,aO I

cmp.l 4(a7),a0 !all done?

beq mprnt7 leq => exit

add.l t1,a0 lincrament pointer

move .1 aO ,dO !

and.l tOxOOffffff,dO !maak address

move . 1 dO, aO I

move.l a0,(a7) !save new lina_addreaa

bra mprntO !gat the rest

OOFFE6BA 4E6E OOFFE6BC 4CDF0103 OOFFE6CO 023COOFE OOFFE6C4 4E75

mprnt7: unlk a6 ladd.l 116,a7 lelaar atack

OOFFE6C6

OOFFE6C6 610007A8 OOFFE6CA 60EE

movem.l (a7)+,d0-d1/a0 Irastore regieters

and tOxfe,ccr lelaar carry

rts mprir..tll11 ,. . I add.l t8,a7 mprint9:bar error bra mprnt7 mresv: lmove.l (a7)+,d0 !print "?" I rts

reset the direct and indirect interrupt veetors

lclear atack

let them point to the monitor routines and syst-._time handler

OOFFE6CC 4E56FFFC mresv:

OOFFE6DO 2D7COOFFF489FFFC \ OOFFE6D8 6100076E OOFFE6DC 4E6E OOFFE6DE 21FCOOFFF19A0464 \ link aB,t-4 move.l tmsresv,-4(a6) bar txatr unlk a6

mresvq: move.l ttimerh,vact6

!

! initialize direct interrupt veetors

OOFFE6E6 mresv1

OOFFE6E6 21FCOOFFF1340008 \

move.l tbuserr, Ox8 lbus_error vector

OOFFE6EE 21FCOOFFF102000C \

move.l taddresserr, Oxc !addresa_error vector

OOFFE6F6 21FCOOFFF16C0010 \

mova.l tillinstrerr,Ox10 !illagal_instruction_error

vector

OOFFE6FE 21FCOOFFF1620020 \

move.l tprivvarr, Ox20 lprivilege_violation_arror

vector

OOFFE606 21FCOOFFEA6C0024 \

mova.l ltraceh, Ox24 !trace vector

(36)

~

move.l linterrO_~,Ox064 !vector ~6

OOFFEe16 21FCOOFFF03A0068 \

move.l linterr3, Ox068 !vector ~6

OOFFE81E 21FCOOFFF044006C \

move.l Unterr4, Ox06c: !vector ~7

OOFFE826 21FCOOFFF04E0070 \

move.l lintprr6, Ox070 !vector 28

OOFFE82E 21FCOOFFF0680074 \

move.l linterr6, Ox074 !vector ~9

OOFFE836 21FCOOFFF0620078 \

move.l linterr7, Ox078 !vector 30

OOFFE63E 21FCOOFFF06C007C \

move.l lnmi, Ox07c: !vector 31

initialize indirect vac:tora:

~OFFE846 21FCOOFFF0760460 \

mova.l lintarrl1h, vact1

OOFFE64E 21FCOOFFF08A0464 \

mova.l linterrl2h, vec:t2

OOFFE666 21FCOOFFF09E0468 \

move.l linterrl3h, vect3 OOFFE66E 21FCOOFFFOB2046C \

mova.l Untarrl4h, vact4

OOFFE666 21FCOOFFFOC60460 \

aove.l linterrl5h, vec:t6

OOFFE66E 21FCOOFFFOEE0468 \

aova.l linterrl7h, vec:t7

OOFFE676 4E76 rts

mreava:

reaet all interrupt veetora to monitor routines

OOFFE878 4E66FFFC mreava: link a6,1-4

OOFFE67C 2D7COOFFF49DFFFC \ OOFFE684 61000682 OOFFE888 4E6E OOFFE68A 21FCOOFFFODA0464 \ OOFFE692 6000FF62 move.l lmlraava,-4(a6) ber txstr unlk a6

mova.l lintarrl6h, vect6 bra mr1Bv1

JDBtac:k:

print value of etac:kpointar

OOFFE696 4E66FFFC matac:k:link a6,1-4

OOFFE69A 2D7COOFFF4ADFFFC \ OOFFE6A2 61000694 OOFFE6A6 2D4FFFFC OOFFE6AA 610007E4 OOFFE6AE 4E6E OOFFE6BO 4E76 mova.l IJDBatac:k,-4(a6) bar txatr mova.l a7,-4(a6) bar tx6hx unlk a6 rts mtrac:a:

(37)

OOFFE6B2 48E78080 OOFFE6B6 40F8044E OOFFE6BA 4E66FFFC trace a progrillil in : none out: none uaes: dO,aO,atc calla: rxchr,rx6hx,txstr

mtraca: movem.l d0/a0,-(a7) !save registers

move.w ar,aavar laave etatuaragiatar content&

link a6,t-4 lcraata eome room

OOFFE6BE 2D7COOFFF4BDFFFC \ OOFFE6C6 61000670 OOFFE6CA 6100022E OOFFE6CE 610003F6 OOFFE6D2 61000718 OOFFE6D6 102EFFFF OOFFE6DA OCOOOOOD OOFFE6DE 6722 OOFFE6EO 207COOFFE70E OOFFE6E6 4A10 OOFFE6E8 6606 OOFFE6EA 61000684 OOFFE6EE 60DE OOFFE6FO B0280001 OOFFE6F4 6704 OOFFE6F6 6C88 OOFFE6F8 60EC OOFFE6FA 20680002 OOFFE6FE 4E90 ooFFE7ob 6occ OOFFE702 4E6E OOFFE704 46F8044E OOFFE708 4CDF0101 OOFFE70C 4E76 OOFFE70E OOFFE70E 2041 OOFFE710 OOFFE768 OOFFE714 2044 OOFFE716 OOFFE7AC OOFFE71A 2063 OOFFE71C OOFFE7CA OOFFE720 2066 OOFFE722 OOFFE834 OOFFE726 2060 OOFFE728 OOFFE86A OOFFE72C 2043 OOFFE72E OOFFE878 OOFFE732 2047 OOFFE734 OOFFE8C8 OOFFE738 2048 OOFFE73A OOFFEA28 OOFFE73E 2062 OOFFE740 OOFFEBFA OOFFE744 204D OOFFE746 OOFFE364 OOFFE74A 202E OOFFE74C OOFFEA3C move.l tm&trace1,-4(a6) bar txatr bar trdr mtrac1: bar trprompt

bar rxchr move.b -1(a6),d0 cmp.b tcr,dO beq mtrac6 move.l ttracmd,aO mtrac2: tat.b (aO)

bne mtrac3 bar error bra mtrac1 mtrac3: cmp.b 1i(aO),d0 beq mtrac4 add.l t6,a0 bra mtrac2 mtrac4: mova.l 2(aO),aO

j er (aO) bra mtrac1 mtrac6: unlk a6 ! tracmd move. w aavsr, ar movem.l (a7)+,d0/a0 rta .aacii

'

A' .data4 trad .aacii , D' .data4 trda .aacii

' s•

.data4 traap .aacii ' U' .data4 truep .aacii ' P' .data4 trpc .aacii

'

C' .data4 tree .aacii ' G' .data4 trat .aacii ' H' .data4 trhlp .aacii , R' .data4 trdr .aacii , M' .data4 mmod .aacii

'

.data4 trnxtpc laand text

!show register contenta !aend prompt

lget anawar !in dO

labort collllll&nd? laq => leave

!gat baae of trace commanda in aO land of tabla?

!na => go ahaad !print '?'

land gat other collllll&nd ldid collillAnd match? leq => executa lnaxt poa. in tabla

I

!gat atartaddreaa in aO

lexacute routine: aftar rta back hare. !gat other cammand

Irastore atatuaregiatar. IAddraaa register !Data regiltar IStackPointer/Statua Regieter IUaar-atackpointar lprogrlllll_countar lcond. code register !Stap ona inatruction !help tunetion !display all registers lmodify memory

(38)

OOFFE760 :Z02C OOFFE76:Z OOFFEA66 OOFFE766 0000 OOFFE768 48E78080 OOFFE76C 4E66FFFC OOFFE780 610007AA OOFFE764 6406 OOFFE788 61000608 OOFFE76A 6038 OOFFE78C OC2E0007FFFF OOFFE772 62F2 OOFFE774 :Z07C00000420 OOFFE77A 610006E2 OOFFE77E 10:ZEFFFF OOFFE78:Z 028000000007 OOFFE788 E688 OOFFE78A :ZD700000FFFC OOFFE790 61000722 OOFFE794 610006C8 OOFFE798 61000822 OOFFE79C 66C8 OOFFE79E 21AEFFFCOOOO OOFFE7l4 4E6E OOFFE7l6 4CDF0101 OOFFE7AA 4E76 OOFFE7AC 48E78080 OOFFE7BO 4E66FFFC OOFFE7B4 61000766 OOFFE7B8 66AC OOFFE7BA OC2E0007FFFF OOFFE7CO 62A4 OOFFE7C:Z :Z07C00000400 OOFFE7C8 6080 OOFFE7CA 48E78080 OOFFE7CE 4E66FFFC OOFFE7D2 61000618 OOFFE7D6 OC2E0060FFFF OOFFE7DC 6622 OOFFE7DE 207C0000043C OOFFE7E4 :ZD60FFFC OOFFE7E8 61000671 OOFFE7EC 610006C6 OOFFE7FO 6100066C OOFFE7F4 610007C6 OOFFE7F8 662E OOFFE7FA :ZOAEFFFC OOFFE7FE 602C OOFFE800 OC2E0062FFFF OOFFE806 6620 OOFFE808 61000664 OOFFE80C 3D780444FFFE OOFFE812 61000668 OOFFE816 61000646 OOFFE81A 6100072C OOFFE81E 6608 OOFFE820 31EEFFFE0444 OOFFE8:Z6 6004 trad: .aacii ' .data4 trprvpc .data:Z 0 movem.l dO/aO,-(a7) link a6,1!-4 bar rx1hx bcc tradl

tradO: bar error

bra trad3

tradl: cmp.b t7,-1(a6)

lprevious pc valua

laava registers

!gat aacond command char

I ca => error

bhi tradO lhi => error

mova.l taav_aO,aO !get base of aava_area

trad2: bar txsp

mova.b -1(a6),d0

and.l t7,d0 !maak data

l.al.l t:Z, dO lmultiply by 4

move.l O(aO,d0),-4(a6) lget data

bar txBhx !sand data

bar txsp ! eend a pace

bar rx8hx !gat naw data

bes tradO les => error

mova.l -4(a6),0(aO,dO) !save new data

trad3: unlk a6

movem.l (a7)+,d0/a0 lreatora registers

rts

trda: movem.l d0/a0,-(a7)

link a6,1!-4 bar rxlhx bes tradO cmp . b 1!7 , -1 (a6) bhi tradO move.l taav_dO,aO bra trad2

traap: movem.l d0/a0,-(a7) link a6,11-4 bar rxchr

cmp.b tchrp,-1(a6) bna trnp1 mova.l l!sav_a7,a0 traapO: mova.l (a0),-4(a6)

bar txap bar txBhx bar txsp bar rx8hx bes trup2 mova.l -4(a6),(a0) bra traap3 traspl: cmp.b tchrr,-1(a6) bna trasp2 bar txap mova.w sav_sr,-2(a6) bar tx4hx bar txsp bar rx4hx bes trasp2 move.w -2(a6),aav_sr bra trsap3 laava

!gat aecond command les "'> error lhi => error

lget base of aava_araa

laava

!gat aecond command char I'P' (atackpointar) lne => jump lget old data lnnd value lget new data les => error

! save new val u a

land leave

(39)

OOFFE8FE 4E66FFFC OOFFE902 61000422 OOFFE906 123COODO OOFFE90A 143COOOO OOFFE90E 7600 OOFFE910 207C00000400 OOFFE916 1D41FFFF OOFFE91A 61000620 OOFFE91E 1D7C003AFFFF OOFFE924 610004DC OOFFE928 61000434 OOFFE92C 2D703000FFFC OOFFE932 61000680 OOFFE936 61000426 OOFFE93A 61000422 OOFFE93E 6100041E OOFFE942 6883 OOFFE944 6201 OOFFE946 6202 OOFFE948 OC020008 OOFFE94C 670C OOFFE94E OC020004 OOFFE962 66C2 OOFFE964 61000300 OOFFE968 60BC OOFFE96A 610003CA OOFFE96E 207C00000420 OOFFE964 143COOOO OOFFE968 7600 OOFFE96A 123COOAO OOFFE96E 1D41FFFF OOFFE972 610004C8 OOFFE976 1D7C003AFFFF OOFFE97C 61000484 OOFFE980 610003DC OOFFE984 2D703000FFFC OOFFE98A 61000628 OOFFE98E 610003CE OOFFE992 610003CA OOFFE996 610003C6 OOFFE99A 6202 OOFFE99C 6883 OOFFE99E 6201 OOFFE9AO OC020008 OOFFE9A4 670C OOFFE9A6 OC020004 OOFFE9AA 66C2 OOFFE9AC 61000378 OOFFE9BO 60BC trdr1: trdr2: trdr3: trdr4: OOFFE9B2 2D7COOFFF4E9FFFC \ OOFFE9BA 6100037C OOFFE9BE 2D78043CFFFC OOFFE9C4 610004EE OOFFE9C8 2D7COOFFF4EOFFFC \ OOFFE9DO 61000366 link a6,1-4 bar pcrlf mova.b 10xd0,d1 move.b IO,d2 mova.l IO,d3 mova.l laav_dO,aO move. b d1, -1(a6) bar tx2hx move.b lamcolon,-1(a6) bar txchr bar txap !gat "Dx" in d1 !regiatar counter !regiater ofhat

!base addrass of dataragiatere !aend data regieter number

'

I Bind

move.l O(aO,d3),-4(a6) !gat content& bar tx8hx bar txap bar txap bar txap add.l 14,d3 add.b 11,d1 add.b 11,d2 cmp.b 18,d2 beq trdr2 cmp.b 14,d2 bne trdr1 bar pcrlf bra trdr1 bar pcrlf move.l taav_aO,aO move.b IO,d2 move.l IO,d3 move. b IOxaO, d1 move. b d1, -1 (a6) bar tx2hx move.b lamcolon,-1(a6) bar txchr bar txap !next offset I next :·.,,iater

!eq => dataregisters done

I ne => do next

!base addreaa of addreaa_regiatere

!counter

= 0

loffut

=

0

laddreaa regiater number 'Ax•

mova.l O(aO,d3),-4(a6) !gat data bar tx8hx bar txap bar txsp bar txsp add.b 11,d2 add.l 14,d3 add.b 11,d1 cmp.b 18,d2 beq trdr4 cmp.b 14,d2 bne trdr3 bar pcrlf bra trdr3 move.l lmatr3,-4(a6) bar txatr move.l aav_a7,-4(a6) bar txBhx move.l lmatr2,-4(a6) bar txatr !next register I next offaet !next registernumber leq => dona l"<crlf>SP: " I" USP: "

Referenties

GERELATEERDE DOCUMENTEN

Ook zorg je er als persuasive copywriter voor dat bezoekers makkelijk hun weg naar de juiste informatie

Neem hiervoor contact op met het Sociaal Team Cranendonck of met de Mantelzorgmakelaar van Steunpunt Mantelzorg

Gedurende de 19de eeuw werden dan ook veel initiatieven genomen om vaccinatie te veralgemenen, maar pas in 1911 werd een nieuwe wet voor- gesteld in België (doch niet goedgekeurd

Mijn moeder en Newton komen binnen gerend, en daarna een stel verpleegsters, en de dokter die haar vroeg haar neus aan te raken, en Tess ligt te schudden als een kat op

Vooralsnog kunnen de klachten beter worden verklaard door de gestelde paniekstoornis en agorafobie daar Bram naar eigen zeggen voor de huidige klachtenperiode geen hinder

“klimmen op zijn schouders” waardoor evolutie stijgt tot een grotere complexiteit, want het is nu een organisatie van organismen geworden. U zult dit principe zien in alle

‘Hierdoor kunnen boomveren worden toegepast op plaatsen waar bomen op de traditionele manier niet of niet vanzelfspre- kend kunnen groeien?. Vergroening van daken en

Het is belangrijk om te weten welk gedrag nou precies storend is, maar het is nog belangrijker voor het kind om te weten welk gedrag er verwacht wordt, zodat het kind weer in