1.1 Kategorie Runtime: Notwendig zum Ablauf des Rechners
INSTRUCT Instruktionssatz
RECHNER.DLL Rechnerfunktionalit
RECHNERX.TBK Diese Datei (Buch)
1.2 Kategorie Demo: Demoprogramme
TESTLOAD.PRG Rechner-Programm zum Test
aller Befehle
ADDLONG.PRG Addiert zwei Langzahlen (4Byte)
mem[24],mem[25]=
(mem[20],mem[21]) + (mem[22],mem[23])
MULTIPLY.PRG Multipliziert zwei Zahlen
mem[22]=mem[20]*mem[21])
1.2 Kategorie Entwicklung: Quelltexte
CSTRING.H
CSTRING.C
Just another C++ String Class
ELISTE.H
ELISTE.CC
C++ template class: Einfach verkettete Liste
STACK.H
C++ template class: Stacks
OPENHASH.H
OPENHASH.CC
C++ template class: open Hashtable
BOOLEAN.H
C++ class boolean
SYMBOLS.H
SYMBOLS.CC
class Symbols (Im Rechner definierte Symbole)
PARSE-AS.H
PARSE-AS.CC
Einfacher Parser f
r Assemblerinstructionen
RECHNERM.H
RECHNERM.CC
Verwaltung des Speichers des Rechners
PROCESSO.H
PROCESSO.CC
Prozessor des Rechners incl. Operationen
RECHNER.H
RECHNER.CC
class RechnerProgram: Funktionalit
ten des
Rechners (viele wrapper-Funktionen f
r die
Mitglieder der anderen Klassen)
INTERFAC.CC
Implementation der Schnittstelle der rechner.dll
RECHNERT.CC
Testprogramm (
berholt)
RECHNER.DEF
Definition der Schnittstelle der rechner.dll
RECHNER.DSK
RECHNER.PRJ
RECHNER.LIB
Turbo C++ intern
2. Verwendung des Rechners
Der Rechner kann durch die Befehle
local rechner
set rechner to viewer "rechner"
open rechner
if visible of rechner
hide rechner
else
show rechner
aufgerufen bzw. versteckt werden.
2.1 Arbeiten mit mehreren verschiedenen Programmen
Der Rechner unterst
tzt die simultane Bearbeitung von bis zu 20 verschiedenen Programmen. Diese Programme werden
ber Handles angesprochen. Ein solches Handle mu
zuvor durch Aufruf der Funktion NewProgram() alloziert werden. Dem Rechner wird das gew
nschte Programm
ber die Systemvariable RechnerProgramHandle mitgeteilt.
Beispiel:
local rechner
set rechner to viewer rechner
open rechner
local program1,program2
-- alloziere Handles f
r Programme
set program1 to NewProgram()
set program2 to NewProgram()
system RechnerProgramHandle
-- rufe den rechner f
r program1 auf
set RechnerProgramHandle to program1
show rechner
-- aktualisiere die Anzeigen
send update to field "RechnerObjekt" \
of page "RechnerSeite"
-- rufe den rechner f
r program2 auf
set RechnerProgramHandle to program2
show rechner
-- aktualisiere die Anzeigen
send update to field "RechnerObjekt" \
of page "RechnerSeite"
2.2 Laden von vorbereiteten Programmen
ber die Funktion
LoadProgram(int Handle, \
char far* FileName)
kann ein vorbereitetes Programm geladen werden.
Das Funktionsergebnis ist im Erfolgsfall gleich 0.
Ein eventueller Fehler kann
ber GetError() abgefragt werden. (Der Aufruf von GetError() mu
erfolgen, um den Fehler zu l
schen und weitere Aktionen zu erm
glichen!)
Beispiel:
system RechnerProgramHandle
local rechner
set rechner to viewer "rechner"
open rechner
if (LoadProgram(RechnerProgramHandle,\
"demo.prg")<>0)
request "Fehler beim Laden:" & \
pointerString(0,GetError())
else
show rechner
2.2 Dateiformat der Programmdateien (*.prg)
Eine .prg - Datei enth
lt die Assembleranweisungen in lesbarer Form (ASCII) mit den zus
tzlichen M
glichkeiten
$1234
setzt die aktuelle Adresse auf 1234
:symbolName
definiert das Symbol symbolName
Beispiel:
load 371
store 372
$1000
load 756
:MySymbol
load 891
hrt zum Programm (Darstellung in der Code View)
* 0 | load 371
* 1 | store 372
[Viele Zeilen ohne '*']
* 1000 | load 756
*MYSYMBOL | load 891
* 11002 | add
.......
SystemDokumentation
buttonClick
buttonClick
Zsysdok
"SystemDokumentation"
Systemdokumentation
RechnerSeite
3f8N=
CBQ R,S
{<|h|
Programm
Daten
Anweisungen
STORE [B+I+1234]
SHIFT LOG,NC,L,7
MySavedText
visibleLines
FirstLine
FirstLineNumber
RechnerProgramHandle
ZeilenNummer
Group id 130 of Page id 1
MyPopup
BRANCH C,1281
STORE [B+I+2307]
LOAD 256
BRANCH -1972
LOAD -139
LOAD [5609]
LOAD 4
LOAD -139
LOAD [B+I+5097]
STORE [B+I+2305]
LOAD -384
LOAD B
BRANCH C,1359
STORE [B+I+2307]
LOAD -446
BRANCH Z,319ANCH Z,-148
BRANCH Z,-11519-152
BRANCH Z,-11986
BRANCH C,3268791]MULTENDI+2]D 0
LOAD I,0MULTRET]][B+I+0x1fff]fff]
STORE [B+I+0x1fff]TORE [B+I+0x1fff]
Adressen
2 > p
visibleLines
FirstLineNumber
FirstLine
Field id 0 of Page id 1
Client
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
170313
Scrollbar
SliderArea
Slider
{%ScrollPageUp
|ScrollPageDown
buttonDown
ScrollPosition
Slider
SliderHeight
unused
Zy,SliderHeight
(" -
ScrollPageUp
ScrollPageDown
unused
ScrollPosition
ScrollbarButtonUp
p~ScrollUp
buttonDown
p~ScrollUp
buttonStillDown
ScrollUp
ScrollbarButtonDown
ScrollDown
buttonDown
ScrollDown
buttonStillDown
ScrollDown
Slider
height
5SavePosition
oldLoc
%SaveMousePosition
buttonDown
5SavePosition
%SaveMousePosition
oldLoc
oldLoc
height
buttonStillDown
ScrollPosition
buttonUp
SavePosition
SaveMousePosition
height
oldLoc
Zy,yUp,yDown,sysLockScreenSave
& "Area")
ScrollPosition
3615,795
SavePosition
3720,870
SaveMousePosition
height
3750,2670
oldLoc
DatenAdressen
visibleLines
FirstLineNumber
FirstLine
TotalLines
60528
60532
60536
60540
60544
60548
60552
60556
0x1f14
65516
65520
65524
65528
655321016
0 1 2 3333
DatenWerte
24260 9732 18313 -15320
2142 -29914 11335 24260
9732 18313 -15318 2142
-29914 11847 24260 9732
18313 9772 32643 50
12148 24260 9732 18315
9776 18187 29742 -222
3190 -218 12407 -218#
Register
A =
RegisterA
RechnerProgramHandle
GetRegister
G1ConvertValue
update
keyChar
SetRegister
RechnerProgramHandle
String2Int
!vGetError
Fehler:
update
leaveField
enterField
update
4RechnerProgramHandle
1(0,ConvertValue(
-le,GetRegister(
>le,0)))
k=keyEnter
Z,ErrorText,unused
String2Int(
1(0,GetError())
><>""
"Fehler: " &
SetRegister(
016658
A' =
RegisterAS
RechnerProgramHandle
GetRegister
G1ConvertValue
update
keyChar
SetRegister
RechnerProgramHandle
String2Int
!vGetError
Fehler:
update
leaveField
enterField
update
4RechnerProgramHandle
1(0,ConvertValue(
-le,GetRegister(
>le,1)))
k=keyEnter
Z,ErrorText,unused
String2Int(
1(0,GetError())
><>""
"Fehler: " &
SetRegister(
016658
B =
RegisterB
RechnerProgramHandle
GetRegister
G1ConvertValue
update
keyChar
SetRegister
RechnerProgramHandle
String2Int
!vGetError
Fehler:
update
leaveField
enterField
update
4RechnerProgramHandle
1(0,ConvertValue(
-le,GetRegister(
>le,3)))
k=keyEnter
Z,ErrorText,unused
String2Int(
1(0,GetError())
><>""
"Fehler: " &
SetRegister(
I =
RegisterI
RechnerProgramHandle
GetRegister
G1ConvertValue
update
keyChar
SetRegister
RechnerProgramHandle
String2Int
!vGetError
Fehler:
update
leaveField
enterField
update
4RechnerProgramHandle
1(0,ConvertValue(
-le,GetRegister(
>le,2)))
k=keyEnter
Z,ErrorText,unused
String2Int(
1(0,GetError())
><>""
"Fehler: " &
SetRegister(
PSW:=
Z =
ZeroFlag
A*GetFlag
RechnerProgramHandle
update
keyChar
RechnerProgramHandle
y4SetFlag
!vGetError
update
Fehler
leaveField
enterField
update
4RechnerProgramHandle
GetFlag(
#le,1)
k=keyEnter
Zt,unused
t<>"0"
t<>"1"
"Fehler" &
1(0,GetError())
SetFlag(
le,1,
NEG =
NegativeFlag
A*GetFlag
RechnerProgramHandle
update
keyChar
RechnerProgramHandle
y4SetFlag
!vGetError
update
Fehler
leaveField
enterField
update
4RechnerProgramHandle
GetFlag(
#le,0)
k=keyEnter
Zt,unused
t<>"0"
t<>"1"
"Fehler" &
1(0,GetError())
SetFlag(
le,0,
02345
C =
CarryFlag
A*GetFlag
RechnerProgramHandle
update
keyChar
RechnerProgramHandle
y4SetFlag
!vGetError
update
Fehler
leaveField
enterField
update
4RechnerProgramHandle
GetFlag(
#le,2)
k=keyEnter
Zt,unused
t<>"0"
t<>"1"
"Fehler" &
1(0,GetError())
SetFlag(
le,2,
hideDescription
rechner
buttonClick
buttonClick
hideDescription
close
"rechner"
&Close
Scrollbar1
SliderArea
Slider
{%ScrollPageUp
|ScrollPageDown
buttonDown
ScrollPosition
Slider
SliderHeight
unused
Zy,SliderHeight
(" -
ScrollPageUp
ScrollPageDown
unused
ScrollPosition
ScrollbarButtonUp
p~ScrollUp
buttonDown
p~ScrollUp
buttonStillDown
ScrollUp
ScrollbarButtonDown
ScrollDown
buttonDown
ScrollDown
buttonStillDown
ScrollDown
Slider
height
5SavePosition
oldLoc
%SaveMousePosition
buttonDown
5SavePosition
%SaveMousePosition
oldLoc
oldLoc
SliderArea
height
buttonStillDown
ScrollPosition
buttonUp
SavePosition
SaveMousePosition
height
oldLoc
Zy,yUp,yDown,sysLockScreenSave
"SliderArea"
ScrollPosition
9080,1240
SavePosition
9225,1350
SaveMousePosition
height
9210,2580
oldLoc
RechnerHelp
buttonUp
"RechnerHelp"
&Help
RechnerObjekt
dezimal
DataFormat
RechnerObjekt:
lt die f
r den Rechner global wichtigen Skripten
MustRunPrepare
warnings
&Stop
warningWindow
RechnerProgramHandle
MustRunPrepare
doAnimate
animate
doAnimate
Fehler
PrepareRun
&Animate
update
RechnerObjekt
buttonUp
4RechnerProgramHandle
ZRechnerObjekt
MustRunPrepare
3 <>
ZRunPrepareResult
1(0,PrepareRun(
"warnings"
"warningWindow"
x("Fehler"
doAnimate
"&Stop"
B"animate"
"&Run"
update
Fehler
MustRunPrepare
warnings
warningWindow
RechnerProgramHandle
MustRunPrepare
StepProgram
doAnimate
animate
PrepareRun
&Animate
update
RechnerObjekt
buttonUp
4RechnerProgramHandle
[doAnimate
RechnerObjekt
"&Run"
B"animate"
MustRunPrepare
ZRunPrepareResult
1(0,PrepareRun(
"warnings"
"warningWindow"
x("Fehler"
ZsysLockScreenSave
ZStepProgramReturn
update
&Step
animate
MustRunPrepare
warnings
&Stop
warningWindow
RechnerProgramHandle
MustRunPrepare
doAnimate
doAnimate
Fehler
PrepareRun
&Animate
RechnerObjekt
buttonUp
4RechnerProgramHandle
ZRechnerObjekt
MustRunPrepare
3 <>
ZRunPrepareResult
1(0,PrepareRun(
"warnings"
"warningWindow"
x("Fehler"
doAnimate
"&Stop"
&Animate
RechnerProgramHandle
ResetProcessor
update
RechnerObjekt
buttonUp
4RechnerProgramHandle
ZResetProcessorReturn
update
"RechnerObjekt"
R&eset
dezimal
eDataView
dezimal
RechnerObjekt
buttonUp
DataView "dezimal"
"RechnerObjekt"
&Dezimal
hexadezimal
eDataView
hexadezimal
RechnerObjekt
buttonUp
DataView "hexadezimal"
"RechnerObjekt"
&Hexadezimal
CodeView
P =
RegisterP
RechnerProgramHandle
GetRegister
G1ConvertValue
update
keyChar
SetRegister
RechnerProgramHandle
String2Int
!vGetError
Fehler:
update
rechnerobjekt
leaveField
enterField
update
4RechnerProgramHandle
1(0,ConvertValue(
-le,GetRegister(
>le,4)))
k=keyEnter
Z,ErrorText,unused
String2Int(
1(0,GetError())
><>""
"Fehler: " &
SetRegister(
"rechnerobjekt"
07008
PopupAnweisungen
choice1
mouseEnter
mouseLeave
ndern
choice2
mouseEnter
mouseLeave
choice3
mouseEnter
mouseLeave
schen
.&+ +E
DatenAdressen
RechnerProgramHandle
Lade Programm...
LoadProgram
filterList
openFileDlg
Adressen
openFileDlg
Programme (*.prg),*.prg
KYsetText
TB30DLG.DLL
printError
RechnerObjekt
buttonUp
4RechnerProgramHandle
linkDLL "TB30DLG.
STRING openFileDlg(
,INT)
filterList = "Programme (*.prg),*.
I"Lade
...",
It <>
ZsysCursorSave
ZFileName
(LoadProgram(
)<>0)
printError
"RechnerObjekt"
setText
"Adressen"
"DatenAdressen"
&Load
.&+ +E
printError
saveAsDlg
RechnerProgramHandle
filterList
Speichere Programm unter
Programme (*.prg),*.prg
TB30DLG.DLL
saveAsDlg
RechnerObjekt
SaveProgram
buttonUp
4RechnerProgramHandle
linkDLL "TB30DLG.
STRING saveAsDlg(
,INT)
filterList = "Programme (*.prg),*.
G"Speichere
% unter",
It <>
ZsysCursorSave
(SaveProgram(
)<>0)
printError
"RechnerObjekt"
Sa&ve
.&+ +E
RechnerProgramHandle
Adressen
ClearProgram
KYsetText
printError
RechnerObjekt
buttonUp
4RechnerProgramHandle
ZsysCursorSave
(ClearProgram(
Gle)<>0)
printError
"RechnerObjekt"
setText
"Adressen"
&Clear
warningWindow
Das Assemblieren Ihres Programms ergab folgende Fehler und Warnungen:
Warnings
Adresse 0x1ff6: Fehler: undefinertes Symbol
buttonClick
buttonClick
&Schlie
IT- Computer
RechnerHilfeBedienung
Bedienung des Rechners
1. Was Sie sehen
Das Display ist aufgeteilt in Code View, Data View, Register View und Control Panel.
1.1 Die Code View
Die Code View in der linken Bildschirmh
lfte zeigt Ihnen zu jeder Speicherzelle Ihres Rechners die Adresse und den dort gespeicherten Befehl an.
Ein * vor einer Adresse zeigt Ihnen an, da
Sie dort einmal etwas eingegeben (oder von Datei geladen) haben. Sie haben eine simple M
glichkeit zur Definition von Symbolen. Ggf. zeigt Ihnen die Code View dieses Symbol anstelle der numerischen Adresse an. Befehle k
nnen sich dieser Symbole bedienen, z.B. BRANCH ENTRYPOINT anstelle BRANCH 1000.
Ein schwarzer Balken in der Code View zeigt Ihnen ggf. die aktuelle Position des Prozessors ( = Wert des Registers P) an.
1.2 Die Data View
rechts oben im Fenster zeigt Ihnen die Inhalte der Speicherzellen in numerischer Form an. In jeder Zeile steht links eine Adresse x und rechts die Werte der Speicherzellen der Adressen x, x+1, x+2, x+3.
1.3 Die Register View
unterhalb der Data View zeigt die Inhalte der Register P (Programmz
hler), A (Akkumulator), A' (alter Akkumulator), B (Basisregister), I (Indexregister) sowie die Prozessorflags Z (Zero), NEG (Negativ), C (Carry=
bertrag) an.
1.4 Das Control Panel
unten im Bildschirm steuert Ihren Rechner (Run, Step, Animate, Reset), erm
glicht Ihnen das Speichern, Laden und L
schen von Programmen und eine Umschaltung der Zahldarstellung von dezimal auf hexadezimal.
2. Wie Sie arbeiten k
chst empfehlen wir Ihnen, sich mit dem Befehlssatz Ihres Rechners vertraut zu machen (w
hlen Sie den Abschnitt Befehle dieser Hilfe).
Code View, Data View, Register View und Control Panel erm
glichen Ihnen ein komfortables Arbeiten mit dem Rechners:
2.1 Die Bedienung der Code View
chst einmal k
nnen Sie mit Hilfe der Scrollbars im Speicher bl
ttern oder durch Anklicken des Adre
feldes zu einer bestimmten Adresse springen (Sie werden dann um Eingabe dieser Adresse gebeten). Die neue Adresse k
nnen Sie, wie alle numerischen Werte, sowohl dezimal (z.B. 517) als auch hexadezimal (z.B. 0x205) angeben. Ein Anklicken mit der rechten Maustaste gestattet Ihnen die Zuordnung eines Symbols zur angeklickten Adresse.
Neue Befehle k
nnen Sie durch Anklicken des Befehlsfelds eingeben: Sie erhalten die Auswahl zum
ndern, Einf
gen und L
schen dieser Befehle (an der angeklickten Adresse).
2.2 Die Bedienung der Data View
Wie in der Code View erlauben Ihnen auch hier die Scrollbars bzw. das Anklicken des Adre
felds das Bl
ttern durch die Speicherzellen.
Bestehende Werte k
nnen Sie durch einfaches Anklicken
ndern.
2.3 Die Bedienung der Register View
ndern von Registerwerten k
nnen Sie das entsprechende Feld anklicken und den neuen Wert eingeben. Nach Abschlu
der Eingabe mit <Return> oder <TAB> wird Ihr Wert
bernommen.
hnliches gilt auch f
r die
nderung der Prozessorflags, hier sind allerdings nur die Werte 0 bzw. 1 erlaubt.
2.4 Kontrolle
ber das Control Panel
ber die Kn
pfe Run und Animate starten Sie Ihr Programm (wobei Animate jede einzelne Befehlsausf
hrung darstellt und Run das ganze Programm auf einmal ausf
hrt). Step f
hrt den jeweils n
chsten Befehl aus, und Reset setzt alle Prozessorregister (einschlie
lich des Programmz
hlers) wieder auf 0.
Zur Vervollst
ndigung geben wir Ihnen eine
bersicht der
brigen Elemente des Control Panels:
Die Kn
pfe Load, Save und Clear lassen Sie Ihr Programm laden, speichern und l
schen.
Close schlie
t das Rechnerfenster und Help zeigt diese Hilfeseite an.
Die Radiobuttons Dezimal und Hexadezimal schalten die Darstellung aller numerischen Werte entsprechend um.
te gestattet Ihnen die Zuordnung eines Symbols zur angeklickten Adresse.
Neue Befehle k
nnen Sie durch Anklicken des Befehlsfelds eingeben: Sie erhalten die Auswahl zum
ndern, Einf
gen und L
schen dieser Befehle (an der angeklickten Adresse).
RechnerHilfeBedienung
RechnerHilfeBefehle
buttonUp
ZsysLockScreenSave
"RechnerHilfeBedienung"
"RechnerHilfeBefehle"
&Bedienung
RechnerHilfeBedienung
RechnerHilfeBefehle
buttonUp
ZsysLockScreenSave
"RechnerHilfeBefehle"
"RechnerHilfeBedienung"
Be&fehle
RechnerHelp
buttonUp
"RechnerHelp"
Sch&lie
RechnerHilfeBefehle
Der Befehlssatz
1. Mnenomics
Hier finden Sie die Befehle Ihres Rechners zusammen mit deren Bedeutung und Auswirkungen auf die Prozessorflags. s10 steht dabei stehts f
r einen vorzeichenbehafteten, u13 f
r einen vorzeichenlosen Wert mit bis zu 10 bzw. 13 Bits.