PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:diy:progtools:tablesdatas

Tabellen und Daten

Egal in welcher Programmiersprache programmiert wird, es werden immer wieder gewisse Daten benötigt um die gewünschten Funktionen zu realisieren. Hier eine Liste der wichtigsten Daten für die Programmierung des ATARI® Portfolio™.

ASCII-Tabelle

Den ASCII-Zeichen 0 bis 32 kommt eine besondere Bedeutung zu, es sind Steuerzeichen. Sie werden auch als „die nicht druckbaren“ bezeichnet, das sind sie im Normalfall auch, sie werden benutzt um an der Konsole oder an Ein/Ausgabegeräten gewisse Funktionen auszulösen.

ASCIIZeichenFunktionBedeutung
000 NULDer Wert Null
001SOHStart of heading
002STXStart of text
003ETXEnd of text
004EOTEnd of transmission
005ENQEnquiry
006ACKAckwnoledge
007BELBell
008BSBackspace (Korrekturtaste)
009HTHorizontal TAB
010LFLine feed
011VTVertical TAB
012FFForm feed
013CRCarriage return
014SOShift out
015SIShift in
016DLEData link escape
017DC1Device control 1
018DC2Device control 2
019DC3Device control 3
020DC4Device control 4
021§NAKNegative acknowledge
022SYNSynchronous idle
023ETBEnd of transmission block
024CANCancel
025EMEnd of medium
026SUBSubstitute
027EscEscape-Taste
028FSFile separator
029GSGroup separator
030RSRecord separator
031USUnit separator
ASCIIZeichenASCIIZeichenASCIIZeichenASCIIZeichenASCIIZeichenASCIIZeichenASCIIZeichen
032 064@096`128Ç160á192224α
033!065A097a129ü161í193225β
034066B098b130é162ó194226Γ
035#067C099c131â163ú195227π
036$068D100d132ä164ñ196228Σ
037%069E101e133à165Ñ197229σ
038&070F102f134å166ª198230μ
039´071G103g135ç167°199231τ
040(072H104h136ê168¿200232Φ
041)073I105i137ë169201233Ө
042*074J106j138è170¬202234Ω
043+075K107k139ï171½203235б
044,076L108l140î172¼204236
045-077M109m141ì173¡205237ø
046.078N110n142Ä174«206238Є
047/079O111o143Å175»207239
0480080P112p144É176208240
0491081Q113q145æ177209241±
0502082R114r146Æ178210242
0513083S115s147ô179211243
0524084T116t148ö180212244
0535085U117u149ò181213245
0546086V118v150û182214246÷
0557087W119w151ù183215247
0568088X120x152ÿ184216248°
0579089Y121y153Ö185217249
058:090Z122z154Ü186218250
059;091[123{155¢187219251
060<092\124¦156188220252
061=093]125}157¥189221253²
062>094ˆ126~158ћ190222254
063?095_127159ƒ191223255

Tastatur Scancodes

Der Porfolio besitzt keinen Tastatur-Controller wie der IBM-PC und keine intelligente Tastatur. Seine 63 Tasten werden über eine 16×16-Matrix abgefragt, deren letztes Ergebnis an Port 8000h der CPU anliegt. Zusätzlich stellt das BIOS die üblichen Tastatur Scancodes zur Verfügung, die auch von Portfolio´s Zeileneditor verwendet werden. Die Tastatur kann Hardwareseitig über den Port 08000h, oder Softwareseitig über den BIOS-Interrupt 16h (Portfolio´s GetKey-Funktion) abgefragt werden.

Dies sind die vom BIOS generierten Scan-Codes für die deutsche Tastaturbelegung. Wenn eine Taste oder Tastenkombination gedrückt wird, so wird der jeweils folgende Scan-Code zurückgegeben.

A 97Shift+A 65Alt+A 00 30Strg+A 1*
B 98Shift+B 66Alt+B 00 48Strg+B 2
C 99Shift+C 67Alt+C 00 46Strg+C 3
D 100Shift+D 68Alt+D 00 32Strg+D 4
E 101Shift+E 69Alt+E 00 18Strg+E 5
F 102Shift+F 70Alt+F 00 33Strg+F 6
G 103Shift+G 71Alt+G 00 34Strg+G 7
H 104Shift+H 72Alt+H 00 35Strg+H 8
I 105Shift+I 73Alt+I 00 23Strg+I 9
J 106Shift+J 74Alt+J 00 36Strg+J 10
K 107Shift+K 75Alt+K 00 37Strg+K 11
L 108Shift+L 76Alt+L 00 38Strg+L 12
M 109Shift+M 77Alt+M 00 50Strg+M 13
N 110Shift+N 78Alt+N 00 49Strg+N 14
O 111Shift+O 79Alt+O 00 24Strg+O 15
P 112Shift+P 80Alt+P 00 25Strg+P 16
Q 113Shift+Q 81Alt+Q 00 16Strg+Q 17
R 114Shift+R 82Alt+R 00 19*Strg+R 18
S 115Shift+S 83Alt+S 00 31Strg+S 19
T 116Shift+T 84Alt+T 00 20Strg+T 20
U 117Shift+U 85Alt+U 00 22Strg+U 21
V 118Shift+V 86Alt+V 00 47Strg+V 22
W 119Shift+W 87Alt+W 00 17Strg+W 23
X 120Shift+X 88Alt+X 00 45Strg+X 24
Y 121Shift+Y 89Alt+Y 00 21Strg+Y 25
Z 122Shift+Z 90Alt+Z 00 44Strg+Z 26
Ä 148Shift+Ä 153Alt+Ä 94 Strg+Ä 27
Ö 132Shift+Ö 142Alt+Ö - Strg+Ö -
Ü 129Shift+Ü 154Alt+Ü 91 Strg+Ü -
ß 225Shift+ß 63Alt+ß 00 130Strg+ß -
+ 43Shift++ 42Alt++ 93Strg++ 29
45Shift+ 95Alt+ 125Strg+ -
0 48Shift+0 61Alt+0 00 129Strg+0 -
1 49Shift+1 33Alt+1 00 120Strg+1 -
2 50Shift+2 34Alt+2 00 121Strg+2 03
3 51Shift+3 21Alt+3 00 122Strg+3 -
4 52Shift+4 36Alt+4 00 123Strg+4 -
5 53Shift+5 37Alt+5 00 124Strg+5 -
6 54Shift+6 38Alt+6 00 125Strg+6 30
7 55Shift+7 47Alt+7 00 126Strg+7 -
8 56Shift+8 40Alt+8 00 127Strg+8 -
9 57Shift+T 41Alt+9 00 128Strg+9 -
` -Shift+` -Alt+` 00 131Strg+` -
. 46Shift+. 58Alt+. 123Strg+. -
, 44Shift+, 59Alt+, 126Strg+, -
Esc 27Shift+Esc 27Alt+Esc -Strg+Esc 27
TAB 9Shift+TAB00 15Alt+TAB -Strg+TAB -
Entf00 83Shift+Entf00 82Alt+Entf -Strg+Entf -
BS 8Shift+BS 8Alt+BS -Strg+BS 127
F100 59Shift+F100 84Alt+F1 00 104Strg+F100 94
F200 60Shift+F200 85Alt+F2 00 105Strg+F200 95
F300 61Shift+F300 86Alt+F3 00 106Strg+F300 96
F400 62Shift+F400 87Alt+F4 00 107Strg+F400 97
F500 63Shift+F500 88Alt+F5 00 108Strg+F500 98
F600 64Shift+F600 89Alt+F6 00 109Strg+F600 99
F700 65Shift+F700 90Alt+F7 00 110Strg+F700 100
F800 66Shift+F800 91Alt+F8 00 111Strg+F800 101
F900 67Shift+F900 92Alt+F9 00 112Strg+F900 102
F1000 68Shift+F1000 93Alt+F10 00 113Strg+F1000 103
00 75Shift+00 75Alt+ -Strg+00 115
00 72Shift+00 72Alt+ -Strg+-
00 80Shift+00 80Alt+ -Strg+-
00 77Shift+00 77Alt+ -Strg+00 116
Pos100 71Shift+Pos100 71Alt+Pos1 -Strg+Pos100 119
Bild↑00 73Shift+Bild↑00 73Alt+Bild↑ -Strg+Bild↑00 132
Bild↓00 81Shift+Bild↓00 81Alt+Bild↓ -Strg+Bild↓00 118
Ende00 79Shift+Ende00 79Alt+Ende -Strg+Ende00 117
Enter 13Shift+Enter 13Alt+Enter -Strg+Enter 10
Atari00 59Shift+Atari00 59Alt+Atari 00 59Strg+Atari00 59

Ist der Wert des Key-Codes 0 so handelt es sich um einen erweiterten Key-Code. Dieser ist zweistellig, so muß er ein weiteres mal ausgelesen werden.

*Dieser Scan-Code kann seltsames Verhalten der Software verursachen.

Einen direkten Zugang zur Tastatur bietet der Port 08000h. Jede der 63 Tasten des Portfolio besitzt einen eindeutigen “Make Code”, der beim Niederdrücken an der Portadresse 8000h erscheint. Beim Loslassen einer Taste geschieht dasselbe mit ihrem “Break Code”, der stets um 128 größer ist als der Make Code. Somit lässt sich jederzeit feststellen, welche Taste zuletzt niedergedrückt oder losgelassen wurde.

Taste Make Code Taste Make Code
, 38 A 62
- 26 B 58
. 52 C 56
/ 61 D 5
0 24 E 19
1 2 F 40
2 3 K 47
3 4 G 35
4 34 H 41
5 6 I 25
6 7 J 42
7 13 K 47
8 46 L 39
9 15 M 60
; 51 N 59
= 53 O 12
links 43 P 33
rechts 44 Q 10
oben 29 R 20
unten 37 S 32
lShift 27 T 21
rShift 36 U 11
Fn 54 V 57
Esc 63 W 17
Enter 22 X 55
Space 50 Z/Y 23
Ä 30 Y/Z 49
Ü 28 Alt 9
\ / < 48 Atari 0
+ / ] 31 BS 14
Caps 45 Ctrl 18
Del 8


siehe gruesse_von_der_atari-taste

Port-Adressen

Ports sind Speicheradressen in denen das BIOS wichtige Daten für die Kommunikation mit den Schnittstellen ablegt. Eine Liste aller bekannten Port-Adressen des Portfolio:

AdresseBeschreibung
8000Tastatur: Scan-Code (Controller)
8010Datenregister des LCD-Controllers
8011Befehlsregister des LCD-Controllers
8020Daten-Register des Soundchips
8030Power-Management
8040Zähler
8051Batterie-Status (C2h=ok, 82h=leer)
8060Kontrastwert des Bildschirms
8070RX/TX der seriellen Schnittstelle
8071Interrupt enable der seriellen Schnittstelle
8072Interrupt identity der seriellen Schnittstelle
8073Line control der seriellen Schnittstelle
8074MODEM control der seriellen Schnittstelle
8075Line status der seriellen Schnittstelle
8076MODEM status der seriellen Schnittstelle
8077Scratch-Register der seriellen Schnittstelle
8078Port A der parallelen schnittstelle
8079Port B der parallelen schnittstelle
807APort C der parallelen Schnittstelle
807BKontroll-Register der parallelen Schnittstelle
807CROM-Extension enable
8080Peripheral ID



Peripheral IDs

Die Peripheral-ID ist die Kennzeichnung eines angeschlossnen Zubehörs.
Es gibt 64 frei definierbare User-Interfaces ( PID 64…128) von denen nur wenige bekannt sind. Bekannte IDs bitte nachtragen!

IDInterface
000Communication-Card (BSE Universal Interface )
001serielles interface
002paralleles interface
003Drucker
004HERMES VT52 Modem Interface
005reserved
…..reserved
063reserved
064user peripheral
065user peripheral
066Portalog von IBP
067user peripheral
…..user peripheral
100ATARIs Beispiel-Erweiterung (siehe Technical Reference Guide)
…..user peripheral
111user peripheral
112MIDI Interface
113user peripheral
…..user peripheral
125NETWORK 8000 Interface
126user peripheral
127IDE oder Portfolio Packet-Radio Interface
128File-transfer interface
129reserved
…..reserved
255reserved



BIOS-Datenbereich

AdresseLängeInhalt
03FC 1Kontroll-Register des Ausgangs der seriellen Schnittstelle
03FD 1I/O-Register der seriellen Schnittstelle
03FE 2Status-Register des Eingangs der seriellen Schnittstelle
0413 2Freier Speicher in Kilobytes
0417 1Tastatur: Shift-Satus-Flag
0419 1Tastatur: Alt-Status Register
041A 2Zeiger auf Anfang des Tastaturpuffers
041C 2Zeiger auf Ende des Tastaturpuffers
1F40 2Tastatur:Scan-Code




Interrupt-Vektor-Tabelle

Hard- und Software-Interrupts verzweigen (bei Aufruf oder Auftreten) zu den Adressen, die in der Interrupt-Vektor-Tabelle gespeichert sind. Die IVT befindet sich im untersten Adressraum: 0000:0000 bis 0000:03FF. Die Adressen sind in zwei Words (4 Bytes) im „little endian“-Format gespeichert, d.h. dass die niederwertigen Bytes voran stehen, erst Offset, dann Segment.
Durch „umbiegen“ (redirect) eines Vektors, kann man die Routinen des Betriebssystems durch andere ersetzen, dies ist wichtig, um das Verhalten des Betriebsystems beinflussen zu können.
Ohne dies, würde das Programm UPDATE.COM nicht funktionieren, es umgeht einige Systemfehler, in dem es die entsprechenden Interrupts umleitet, in eine neue (speicherresidente) Routine.
Ebenso lässt sich das Betriebsystem „bespitzeln“, in dem man die Codes an den entsprechenden Adressen disassembliert (z.B. mit DEBUG.COM).

Hier die IVT eines HPC-004 mit der BIOS-Version 1.072.

IntBeschreibungAdresseVektorUPDATE.COMPORTDIV.EXEALMBOOST.COM
00hTeilung durch Null 0000 E000:0EEE 03B2:0103
01hEinzelschritt 0004 E000:24D7
02hNMI (Speicherfehler) 0008 E000:1D06
03hBreakpoint erreicht 000C E000:24D7
04hNumerischer Überlauf 0010 E000:24D7
05hHardcopy 0014 E000:1F6C
unbelegt …
08hTimer 0020 E000:2A5B
09hTastatur 0024 E000:1545
unbelegt …
10hBIOS Video-Funktionen 0040 E000:2BF5
11hBIOS Konfiguration 0044 E000:1DB4
12hBIOS Speichergröße 0048 E000:1CFA
13hBIOS Speicherkarten 004C E000:0B20
14hBIOS Serielle Schnittst 0050 E000:24DA
15h ??? 0054 E000:1CCC
16hBIOS Tastaturabfrage 0058 EB3E:005E
17hBIOS Parallele Schnitts 005C E000:1E02
18hROM-BASIC (error) 0060 E000:048F
19hNeustart (Strg_Alt_Entf) 0064 E000:0530
1AhZeit/Datum Wecker (RTC) 0068 E000:0653
1BhProgrammabruch 006C FF00:0562
1ChAufruf nach jedem Int08 0070 E000:24D7
unbelegt …
1EhDisk-Parameter-Tabelle 0078 0040:01F4
unbelegt
20hDOS Programm beenden 0080 E52D:32E0
21hDOS Funktionen 0084 E52D:451C 0366:016E
22hAdresse DOS Pgmm Ende 0088 F25C:026D
23hAdresse DOS Strg_Break 008C 0294:08BA 0366:0175
24hAdresse DOS Fehler 0090 0294:08C4
25hDOS Speicherkarte lesen 0094 E52D:05BF
26hDOS Speicherkarte schr. 0098 E52D:05C5
27hDOS beenden, resident 009C E52D:32FB
28hAufruf bei Tast.-polling 00A0 E52D:04BA
29hZeichen Ausgeben 00A4 FF00:0555
2Ah ??? 00A8 E52D:04BA
unbelegt …
3Fhunbelegt
unbelegt
41hDisk-Parameter-Tabelle 0104 0040:01F4
unbelegt …
4AhAlarmzeit errreicht 0128 FF9F:0227 0366:0167 0368:0167
unbelegt …
5FhPORTGR.EXE graphics 0176 0000:0000
unbelegt
60hDIP AES 0180 EA0C:07DE
61hDIP BIOS 0184 E000:32E6 0366:0111


Die Tabelle kann von Gerät zu Gerät sehr unterschiedlich aussehen, je nachdem um welche BIOS-Version es sich handelt, und welche Programme gestartet wurden.
Wie man sieht, leitet UPDATE.COM vier Interrupts um (21h, 24h, 4Ah und 61h), PORTDIV.EXE, von Centennial Software, fängt den Fehler „Teilung durch Null“ ab indem es Int 00h auf eine Routine bei 03B2:0103 umleitet.
Um den tatsächlichen Vektor des aktuellen Geräts im aktuellen Zustand zu ermitteln, muss man nur die Tabelle auslesen. Die Tabelle ist 256*4 bytes lang (Int 00h…Int FFh, OFS:SEG) und beginnt bei der Adresse 0000:0000. Siehe Assembler-Programmierung zur Umleiting von Interrupts (Int 09h).
Programme, die Vektoren umleiten, sollten immer den ursprünglichen Vektor wiederherstellen können, sobald sie, oder ihr residenter Teil beendet werden.



LCD-Controller HD-61830

Der LCD-Controller wird durch Zugriffe auf die I/O-Adressen 8010h und 8011h gesteuert.

Befehlsliste

Befehle werden durch Angabe der Befehlsnummer im Kontroll-Register (8011h) mit dem im Daten-Register (8010h) angegebenen Wert ausgeführt.

00hMode-Byte lesen/setzen
01hPosition des Zeichens
02hZeichen pro Zeile
03hVertikale Pixel
04hCursor-Position
05hunbekannt/reserviert FIXME
06hunbekannt/reserviert FIXME
07hunbekannt/reserviert FIXME
08hStart-Adresse (LSB) des Bildschirms
09hStart-Adresse (MSB) des Bildschirms
0AhCursor-Adresse (LSB)
0BhCursor-Adresse (MSB)
0ChRefresh schreiben (ASCII oder Bitmap)
0DhRefresh lesen
0EhPixel löschen
0FhPixel setzen

Mode-Byte

Portfolios BIOS schreibt bei jeden Refresh das Mode-Byte neu, Änderungen des Mode-Bytes sind also nur bis zum nächsten Refresh (Tastendruck, Timer-Tick, oder Aus- und Einschalten) wirksam.

Bit 0:Character-ROM int/ext
Bit 1:Bildschirm-Modus Text/Grafik
Bit 2:Cursor-Modus ein/aus
Bit 3:Cursor-Modus statisch/blinkend
Bit 4:Master/Slave 1
Bit 5:Betrieb ein/aus
Bit 6:null
Bit 7:null




Die Parallel-Ports

Vier Ports dienen der Kommunikation mit dem UART 82C55, wie er in Portfolio´s intelligenter parallelen Schnittstelle verbaut ist. Er besitzt ein Kontrollregister (Port 807B) und 3 I/O Ports (8078, 8079 und 807A), die sich individuell als Ein- oder Ausgang konfigurieren lassen, Port C sogar separat für das höhere und niedere Nibble. Das Kontrollregister (807B) bestimmt wie die einzelnen Ports geschaltet sind.

Kontrollregister Port 807B
Wert Ports
HexDezimalPort APort BPort C (lo)Port C (hi)
0080 128 OUT OUT OUT OUT
0081 129 OUT OUT IN OUT
0082 130 OUT IN OUT OUT
0083 131 OUT IN IN OUT
0088 137 OUT OUT OUT IN
0089 138 OUT OUT IN IN
008A 139 OUT IN OUT IN
008B 140 OUT IN IN IN
0090 144 IN OUT OUT OUT
0091 145 IN OUT IN OUT
0092 146 IN IN OUT OUT
0093 147 IN IN IN OUT
0098 152 IN OUT OUT IN
0099 153 IN OUT IN IN
009A 154 IN IN OUT IN
009B 155 IN IN IN IN


Portfolio´s intelligente parallele Schnittstelle verwendet nur 17 der 24 möglichen Bits.
-Port A (8078) verfügt über alle acht Bits (0..7)
-Port B (8079) führt nur die unteren 4 Bits (0..3) heraus
-Port C (807C) führt 5 Bits (0,1, und 3..5) heraus
Im Normalzustand (Drucker) enthält das Kontrollregister den Wert 138 (089h), Port A und B auf Ausgang (Daten und Steuerung) und Port C auf Eingang (Acknowledge, Busy, Fehler…)

Port A Port B Port C
BitPinSignalPinSignalPinSignal
0 2 DATA0 1 Strobe 12 Paper
1 3 DATA1 14 Autofeed 13 Select
2 4 DATA2 16 Init/Reset - -
3 5 DATA3 17 Select In 15 Error
4 6 DATA4 - - 11 Busy
5 7 DATA5 - - 10 Acknowledge
6 8 DATA6 - - - -
7 9 DATA7 - - - -


Die Einschränkung auf 17 Bits ist Hardware-bedingt, Portfolio´s intelligente parallele Schnittstelle führt nicht alle Leitungen des 82C55 heraus. Softwareseitig werden alle 24 (3×8) Bits geschaltet. Eine Erweiterung der Schnittstelle, oder der Bau einer eigenen ermöglicht den Betrieb als 24-Bit I/O (3×8 oder 2×8+2×4).


Melody-Codes

Liste der Codes für die BIOS-Funktion 16h (Melodie-Töne) des Interrupts 61h (siehe Technical Reference Guide)

NoteFrequenzCode
D#5 622,3 Hz 30h
E5 659,3 Hz 31h
F5 698,5 Hz 32h
F#5 740 Hz 33h
G5 784 Hz 34h
G#5 830,6 Hz 35h
A5 880 Hz 36h
A#5 932,3 Hz 37h
B5 987,8 Hz 38h
C6 1046,5 Hz 39h
C#6 1108,7 Hz 3Ah
D6 1174,7 Hz 29h
D#6 1244,5 Hz 3Bh
E6 1318,5 Hz 3Ch
F6 1396,9 Hz 3Dh
F#6 1480 Hz 0Eh
G6 1568 Hz 3Eh
G#6 1661,2 Hz 2Ch
A6 1760 Hz 3Fh
A#6 1864,7 Hz 04h
B6 1975,5 Hz 05h
C7 2093 Hz 25h
C#7 2217,5 Hz 2Fh
D7 2349,3 Hz 06h
D#7 2489 Hz 07h

undokumentierte Codes:

DTMF-TonCode
0 10h
1 11h
2 12h
3 13h
4 14h
5 15h
6 16h
7 17h
8 18h
9 19h
A 1Ah
B 1Bh
C 1Ch
D 1Dh
* 1Eh
# 1Fh
KlangCode
Stumm 80h
Klick1 01h
Klick2 10h
Klick3 A1H
Klick4 A3H
Sound (?) A4h

weitere Melodie-Töne:

CodeNote
4Bh zwischen A#5 (37h) und B5 (38h)
49h zwischen F#5 (33h) und G5 (34h)
4Ah zwischen G#5 (35h) und A5 (36h)
2Eh zwischen B6 (05h) und C7 (25h)
2Ah zwischen C6 (39h) und C#6 (3Ah)
4Ch zwischen D6 (29h) und D#6 (3Bh)
2Bh zwischen D#6 (3B) und E6 (3Ch)
0Fh zwischen G6 (3Eh) und G#6 (2CH)
27h zwischen C7 (25h) und C#7 (2Fh)

Folgende Codes erzeugen Melodie-Töne mit einem Klick (Anschlag) am Anfang:

CodeNote
B2h F5 (32h)
B3h F#5 (33h)
B4h G5 (34h)
B5h G#5 (35h)
B6h A5 (36h)
B7h A#5 (37h)
B8H B5 (38h)
B9H C6 (39h)
BAH C#6 (3Ah)
BBH D#6 (3Bh)
BCH E6 (3Ch)
BDH F6 (3Dh)
BEH G6 (3Eh)
BFH A6 (3Fh)




Datei-Formate

Manche Datei-Formate sind unbestimmt. So kann z.B. eine Datei mit der Endung DAT alles mögliche enthalten, von Text im ASCII-Format bis hin zu Binär-Codes. Bei anderen erwartet der Portfolio eine ganz bestimmte Datenstruktur, wird diese nicht erfüllt so wird wahrscheinlich eine Fehlermeldung ausgegeben. Im folgenden sollen die wichtigsten Datei-Formate beschrieben werden.


DAT


Im System-Ordner auf Laufwerk C: legen die internen Anwendungen bis zu drei Dateien an:

  1. PERMDATA.DAT
  2. CLIPBORD.DAT
  3. UNDELETE.DAT

Diese Dateien werden beim Aufruf der internen Anwendungen in den Arbeitspeicher geladen. Veränderungen wärend der Arbeit werden nur in dieser RAM-Kopie durchgeführt, erst beim Verlassen einer Anwendung werden alle drei Dateien neu geschrieben.

  • Die PERMDATA.DAT

Die PERMDATA enthält wichtige Daten über die System-Einstellungen und Parameter für die internen Anwendungen. Wenn eine interne Anwendung gestartet wird lädt sie meistens die zuletzt geladene bzw. gespeicherte Datei, die Information darüber entnehmen die Anwendungen der Datei PERMDATA.DAT die auf Laufwerk C: im System-Ordner angelegt ist. Sie hat immer eine Größe von 730 Bytes. Der Aufbau ist wie folgt:

OffsetFunktion
000Wiederherstellen ein/aus
001Wiederherstellungsdaten speichern ja/nein
002Klemmbrett ein/aus
003Klemmbrett speichern ein/aus
004..006reserviert
Rechenblatt
007Textrahmen, 0=aus, sonst an
008..056Pfad und Name der zuletzt verwendeten Datei
057automatisch laden, 0=ja, 255=nein
058..05Bdreistelliges, null-terminiertes Währung-Symbol
05Canfänglicher Dezimaltrenner, 2Eh=“.„, 2Dh=“,„
05DDrucker: Standard-Papierbriete
05E..060reserviert
Terminplaner
061Textrahmen, 0=aus, sonst an
062..0B0Pfad und Name der zuletzt verwendeten Datei
0B1..0B4reserviert
Text-Editor
0B5Textrahmen, 0=aus, sonst an
0B6..104Pfad und Name der zuletzt verwendeten Datei
105..106oberste Zeile von Bildschirm 0 ist erste Zeile in Datei
107..108aktuelle Cursor-Zeile 0 ist erste Zeile
109..10ACursor-Spalte in aktueller Zeile
10Brechter Rand
10CZeilenumbruch: 0=aus, sonst an
10D..10Ereserviert
Adressbuch
10FTextrahmen, 0=aus, sonst an
110..15EPfad und Name der zuletzt verwendeten Datei
15F..168Vorwahl in ASCII, null-terminiert
169..16Freserviert
Taschenrechner
170Textrahmen, 0=aus, sonst an
171..1BFreserviert
1C0M1 Vorzeichen, wenn negativ dann Bit 7 gesetzt
1C1..1C2M1 Exponent, Wort mit Vorzeichen, 0:1.000⇐mant<2.000
1C3..1CAM1 Mantisse
1CB..1D5Memory 2
1D6..1E0Memory 3
1E1..1EBMemory 4
1EC..1F6Memory 5
1F7Format: 0=allgemein, 1=dezimal, 2=wissenschaftlich, 3=technisch
1F8Stellen hinter dem Komma
1F9Trennzeichen: 0=keines, sonst Trennzeichen
1FADezimaltrenner: 0=“.„, sonst “,„
System-Einstellungen
1FBreserviert
1FC..24APfad und Name der Druckzielatei
24B..24Ereserviert
24FDruckziel: 0=parallel, 1=seriell, 2=Datei
250Zeilen pro Druckseite
251Länge des Drucker Setup-Codes
252..2D1Drucker Setup-Codes
2D2Drucker-Code für Zeilenende: 0=CR, 1=CR-LF, 2=CR-LF-LF
2D3Anzahl Zeilen für oberen Rand
2D4Anzahl Zeilen für unteren Rand
2D5Zeichen-Indentierung für linken Rand
2D6Serielle Schnittstelle: Baudrate, 0=110, 1=150 … 7=9600
2D7Serielle Schnittstelle: Parität, 0=keine, 1=ungerade, 3=gerade
2D8Serielle Schnittstelle: Datenbits, 2=7Bits, 3=8Bits
2D9Serielle Schnittstelle: Stop-Bits, 0=1Stoppbit, 1=2StoppBits
  • Die CLIPBORD.DAT

Wenn sie im System-Menü unter Programme das Sichern des Klemmbretts eingeschaltet haben wird der Inhalt des Klemmbretts in dieser Datei gespeichert. Sie kann maximal 8KB groß werden. Sie besteht aus einem einzigen großen Textblock der mit Null terminiert ist. Zeilenumbrüche werden als 0Dh (ASCII(013)) gespeichert (ohne das folgende 0Ah (ASCII(010)).
Ist die Datei nicht Null-terminiert kann sie nicht ins Klemmbrett zurückgeladen werden, das selbe gilt für den Fall, dass sie größer als 8KB ist. Wird die Datei aus diesen Gründen nicht zurückgelesen, so wird sie beim Verlassen der Anwendung durch eine frische Datei überschrieben.
Hat die CLIPBORD.DAT das normale Text-Format (0Dh,0Ah), so kann sie nur in der Textverarbeitung oder im Terminplaner ins Klemmbrett zurückgelesen werden.
Man braucht sich über diese Einschränkungen keine Sorgen zu machen, da die Anwendungen diese Datei recht gut verwalten. Sollten sie aber mit eigener Software auf sie zugreifen, so ist dies unbedingt zu berücksichtigen!

  • Die UNDELETE.DAT

Wenn sie im System-Menü unter Programme das Wiederherstellen eingeschaltet haben werden alle gelöschten Zeichen oder Blöcke aller Anwendungen in die Datei C:\SYSTEM\UNDELETE.DAT geschrieben. Sie besteht aus mehreren Datenblöcken. Jeder Block besteht aus einer Anzahl Zeichen die mit einem einzelnen Befehl gelöscht wurden. Jeder Block hat folgendes Format:
Daten Länge Richtung
Die Daten sind die gelöschten Zeichen (Zeilenumbrüche werden als 0Dh, nicht 0Dh 0Ah, gespeichert), Länge ist die Anzahl der Zeichen im Block und Richtung ist 0 wenn nach links gelöscht wurde (z.B. mit der Korrekturtaste) und 1 wenn nach rechts gelöscht wurde (z.B. mit Entf).
Die UNDELETE.DAT kann maximal 2000 Byte groß werden. Ist die maximale Größe erreicht gehen die zuerst gelöschten Daten nach und nach verloren und die neuesten werden hinzugefügt.
Wenn die UNDELETE.DAT nicht das richtige Format hat kann dies unvorhersehbare Auswirkungen haben, wahrscheinlich wird kein Zugriff auf die Daten möglich sein.



TXT


In Prinzip lädt der eingebaute Text-Editor alles was man ihm sagt, allerdings kann dies bei gewissen Dateien zu unvorhersehbaren Ergebnissen führen. Am besten kann der Text-Editor mit reinen ASCII-Dateien umgehen, die Standarderweiterung für diese Dateien ist TXT. Wenn man im FileManager (FM.COM) eine Datei mit der Endung TXT auswählt, so wird diese automatisch in den Text-Editor geladen. Die einzigen Dinge die man berücksichtigen sollte sind, dass diese Dateien nur ASCII-Zeichen größer als ASCII(031) (siehe Tabelle) enthalten, nicht größer als 64 Kilobytes sind und möglichst nicht mit einem Zeilenvorschub und einer Leerstelle enden, dies kann bei BIOS-Versionen vor 1.072 ohne UPDATE.COM zu einem Absturz des Rechners führen. Wenn sie im Text-Editor die Eingabetaste drücken wird ein Zeilenumbruch mit Wagenrücklauf (CR-LF) eingefügt (ASCII(013) gefolgt von einem ASCII(010)). Der automatische Wortumbruch fügt weitere Zeilenumbrüche ein. Wenn sie eine *.TXT-Datei speichern wärend der Wortumbruch aktiv ist, so speichert der Text-Editor diese mit ab. Verändern sie später die Einstellung für den rechten Rand, so entfernt der Editor diese Wagenrückläufe wieder und platziert sie an der entsprechenden Stelle. Hierfür sucht er nach der Bytefolge 20h 0Dh 0Ah (also eine Leerstelle gefolgt von einem Zeilenumbruch). Wollen sie die automatischen Wortumbrüche gänzlich entfernen, so geben sie zuerst bei eingeschaltetem Umbruch eine Rechten Rand von 250 (mehr geht nicht) ein und schalten sie den Umbruch dann aus. Es ist unwahrscheinlich, dass sie eine Zeile eingegeben haben die länger als 250 Zeichen ist. Enthält eine Text-Datei absichtlich die Folge 20h 0Dh 0Ah so geht der Zeilenumbruch beim Einschalten des Wortumbruchs verloren!



ADR


Portfolio´s Adress-Dateien sind eigentlich Text-Dateien, man kann sie im Text-Editor erzeugen, laden, editieren und Speichern. Man kann auch jede Text-Datei in das Adressbuch laden, ein unerwünschter Effekt: die Zeilen werden alfabetisch sortiert. Damit das Adressbuch die Einträge auseinander halten kann müssen sie lediglich durch eine Leerzeile getrennt sein.

Beate (0034)987654
In der Kurve 2

Adele (0012)347856
Gerade Straße 1

Diese Text-Datei würde in der Adressverwaltung folgendermaßen aussehen:

Adele (0012)347856
Beate (0034)987654

Damit die Adressverwaltung die Nummern wählen kann müssen sie in dem im Hanbuch angegebenen Format eingegeben werden.
Adress-Dateien werden vom Adressbuch mit zwei Nullen terminiert.


WKS


Wer eine detaillierte Beschreibung des Work-Sheet-Formats erwartet hat muss auch hier enttäuscht werden. Dieses Format ist so komplex, dass es den Rahmen dieser Beschreibung sprengen würde. Es handelt sich um ein nicht Portfolio-spezifisches Format, es ist das Format des bekannten Rechenblatts Lotus 1-2-3. Dieses Format wird in dem Buch von Addison-Wesley „File-Formats“ beschrieben. Sei an dieser Stelle gesagt, dass es sich beim Portfolio grundsätzlich um die Lotus-Version 1A oder auch 2 handelt, mit folgenden Einschränkungen:
-Grafik-Informationen in einer *.WKS werden ignoriert.
- Folgende Lotus- Befehle und Funktionen werden vom Portfolio nicht erkannt:

  1. Datenbankstatistik: @DMITTELWERT @DDB @DANZAHL @DMAX @DMIN @DSTDABW @DSUMME @DVAR
  2. Stringmanipulation: @ZEICHEN @LEEREN @KODE @GENAU @FINDE @ISTZAHL @ISTZEICHENKETTE @LINKS @UNTERER @MITTE @N @SAUBER @WIEDERHOLE @ERSETZE @RECHTS @S @ZEICHENKETTE @TRIMME @OBERER @WERT
  3. Weitere: @ZELLZEIGER @ZELLE @SPALTEN @CTERM @STUNDE @MINUTE @REIHEN @RATE @SEKUNDE @SLN @SYD @TERM @ZEIT

Findet der Portfolio eine ihm unbekannte Funktion so wird sie durch die Funktion @FEHLER ersetzt.

Eine „leere“ *.WKS-Datei ohne Name (bzw. UNNAMED.WKS) hat bereits eine Größe von 67 Bytes und sieht mit PDUMP betrachtet so aus:

00001¦00 00 02 00 04 04 02 00 ¦..☻.♦♦☻.
00009¦01 00 FF 29 00 01 00 27 ¦☺. ).☺.´
00017¦06 00 08 00 00 00 00 00 ¦♠.......
00025¦00 00 00 00 07 00 1F 00 ¦......▼.
00033¦00 00 00 00 F1 00 09 00 ¦....±...
00041¦04 00 14 00 00 00 00 00 ¦♦.¶.....
00049¦00 00 00 00 00 00 00 00 ¦........
00057¦04 00 04 00 48 00 00 01 ¦♦.♦.H..☺
00065¦00 00 00 00 00 00 00 00 ¦........

Geben wir in der Zelle A1 das Wort „Spalte1“ ein hat die *.WKS eine Größe von 85 Bytes und sieht folgendermaßen aus:

00001¦00 00 02 00 04 04 02 00 ¦..☻.♦♦☻.
00009¦01 00 FF 29 00 01 00 27 ¦☺. ).☺.´
00017¦06 00 08 00 00 00 00 00 ¦♠.......
00025¦00 00 00 00 07 00 1F 00 ¦......▼.
00033¦00 00 00 00 F1 00 09 00 ¦....±...
00041¦04 00 14 00 00 00 00 00 ¦♦.¶.....
00049¦00 00 00 00 00 00 00 00 ¦........
00057¦04 00 04 00 48 00 00 0F ¦♦.♦.H..☼
00065¦00 0E 00 00 00 00 00 00 ¦.♫. ....
00073¦27 53 70 61 6C 74 65 31 ¦´Spalte1
00081¦00 01 00 00 00 00 00 00 ¦.☺......

DRY


Die Datei-Endung DRY ist für Dateien des Terminplaners reserviert. Die Dateien sind dim ASCII-Format gespeichert. Egal welche Spracheinstellungen im System vorgenommen wurden, das Format für Datum und Uhrzeit sind immer englisch.
Im Prinzip ist die Datei-Struktur so wie man sie im Zeitplaner sieht: Ist es der erste Eintrag am Tag, so steht zuerst das Datum. In der nächsten Zeile steht, falls eine Weckfunktion eingestellt ist, zuerst das Wiederholungszeichen(t für täglich, w für wöchentlich, a für arbeitstäglich, m für monatlich oder j für jährlich) falls es eine sich wiedrholende Weckfunktion ist, dann der Klammeraffe (@), nicht das Notensymbol, und zulezt der entsprechende Text. Zum Beispiel die Datei DIARY.DRY eines „Pechvogels“:

──────────── Mi  15 Mär 2006  16:45 ──
  27 Feb 1999 Sa
 j♫ 22:57 Geb. Mama
  15 Mär 2006 Mi
    16:30 Mama abholen

sieht mit PDUMP folgendermaßen aus:

00001¦20 20 20 32 37 2F 30 33 ¦   27/03
00009¦2F 39 39 0D 0A 20 79 40 ¦/99.. j@
00017¦20 32 32 3A 35 37 20 47 ¦ 22:57 G
00025¦65 62 2E 20 4D 61 6D 61 ¦eb. Mama
00033¦0D 0A 20 20 20 31 35 2F ¦..   15/
00041¦30 33 2F 30 36 0D 0A 20 ¦03/06..
00049¦20 20 20 31 36 3A 33 30 ¦   16:30
00057¦20 4D 61 6D 61 20 61 62 ¦ Mama ab
00065¦68 6F 6C 65 6E 00 00 00 ¦holen...

Sind also keine Weckfunktionen aktiv steht an Stelle des Weckzeichens ein Leerzeichen ASCII(032).
Interessant ist, man kann eine *.DRY mit dem Text-Editor schreiben ohne die korrekte Reihenfolge zu berücksichtigen, oder irgendwo einen neuen Eintrag schreiben, der Zeitplaner sortiert sie beim Laden chronologisch. Wurde eine *.DRY in englischer Sprache geschrieben, die Wiederholungszeichen sind also nicht t, w, a, m, und j, sondern d, w, n, m und y, so werden diese Zeichen beim Laden in die derzeitig eingestellte Systemsprache übersetzt. Wahre Portfolio-Software ist eben multilingual.
Nicht vergessen: wie im Handbuch beschrieben wird nur die DIARY.DRY im Systemverzeichnis von Laufwerk C: Weckfunktionen auslösen. Beim Speichern prüft der Zeitplaner die Datei auf anstehende Weckzeiten und stellt die Alarmfunktion in das System.


PGT


Seltsamerweise steht für PGT Portfolio Graphics Text. Mit Grafik hat es aber wenig zu tun, der Bildschirm bleibt im Textmodus. PGT-Dateien sind nichts anderes als eine Kopie des sichtbaren Text-Bildschirmes. Die Zeichen werden 1:1 in die Datei übertragen, immer der ganze Bildschirm. *.PGTs sind also immer (40×8) 320 Bytes groß. Sie enthalten nur die sichtbaren Zeichen, also Wagenrückläufe (ASCII(013)) oder Zeilenvorschübe (ASCII(010)) entfallen. Der Vorteil ist, dass man auf diese Weise gesamte Bildschirme mit hoher Geschwindigkeit darstellen und sichern kann.


PGF


Portfolio Graphics File. Portfolio´s natives Grafikformat. So wie PGTs Textbildschirme enthalten, so enthalten PGF-Dateien eine Kopie des Grafik-Videospeichers (VRAM bei Offset B0000h). Die Pixel werden horizontal in Bytes dargestellt (8 Pixel pro Byte). Folglich haben sie eine Größe von (64×240/8) 1920 Bytes. Das Pixel in der oberen linken Ecke ist das höherwertige Bit des ersten Bytes, das Pixel der unteren rechten Ecke ist das niederwertige Bit des letzten Bytes. So ergibt das Byte 21 (=(2^0)+(2^2)+(2^4)) folgendes Muster:

76543210

Nach den ersten 30 Bytes ist die obere Bildschirmzeile voll. Die zweite Zeile beginnt bei Byte Nr. 31, die dritte bei Byte Nr. 61 usw. bis mit der 64sten Zeile der Bildschirm voll ist. Ein PGF besteht also aus 64 Pixel-Zeilen á 30 Bytes (=1920 Bytes).


PGC


Portfolio Graphics Compressed. PGF-Dateien sind immer gleich groß (1920 Bytes), egal wie komplex die Grafik ist. Dies ist meistens Platzverschwendung. Durch Komprimierung lassen sich zwischen 20% und 80% einsparen. Allerdings kann es passieren, dass die Datei, wenn sie sehr komplex ist größer wird. Dies ist zum Beispiel bei Fotos der Fall.

Das Format besteht aus einem Header und einigen Datenblöcken:
-Der Header
Die ersten drei Bytes sind die File-ID „PG1“ (50h 47h 01h).
-Die Daten
Die Bild-Daten bestehen aus Index-Bytes gefolgt von Daten Bytes. Das Index-Byte sagt dem Dekoder wie er die folgenden Daten zu behandeln hat. Ausschlaggebend ist ob das höherwertige Bit gesetzt ist oder nicht. Die maximale Anzahl der darauf folgenden Bytes ist 127.
-Bit gesetzt:
Ist das höherwertige Bit des Index-Bytes gesetzt so bestehen die folgenden Daten aus identischen Bytes. Die restlichen 7 Bits geben an wie oft dieses Byte wiederholt wird.
Beispiel:

86       FF
index    Daten-Byte

Das höherwertige Bit des Index Bytes ist gesetzt, die restlichen Bits stellen die Zahl 6 dar.
Das bedeutet, dass das Daten-Byte (FF) 6 mal wiederholt wird.
-Bit nicht gesetzt:
Ist das höherwertige Bit nicht gesetzt heißt das, dass die folgenden Daten eine Kette unterschiedlicher Bytes ist, die so gelassen werden soll wie sie ist.

Beispiel:

0A     FF 01 10 09 1A BB CE D0 FF 1A
index  Daten-Bytes

Das höherwertige Bit ist nicht gesetzt, die darauf folgenden 10 Bytes sollen so bleiben wie sie sind.

Das war´s auch schon. Je mehr Wiederholungen in den Bild-Daten enthalten sind, desto kleiner wird die Datei. Einen Dekoder zu programmieren ist sicherlich einfacher als einen Enkoder.

PGX


PGX-Dateien sind als Grafik-Animationen für den Portfolio bekannt. Aber eigentlich können sie viel mehr, das ist zumindest die Absicht. PGX-Dateien können von Programmen verwendet werden die laufende Demos, Grafik-Bibliotheken oder einfach nur mehrere Grafik und Text Seiten benötigen.
Das Format ist aber keineswegs geschlossen, zukünftige Entwicklungen sollen das Einbinden ausführbarer Programme ermöglichen.
Das PGX-Format besteht aus einem Header und mehreren Frames.
-Der Header:
Der Header besteht aus 8 Bytes, 3 für die ID „PGX“, eins für die Version (bisher immer 1) und weitere 4 für zukünftige Entwicklungen (normalerweise alle 0).
-Die Frames:
Es gibt bislang 4 Frame-Typen:

TypBedeutung
00hPGC-Frame
01hPGT-Frame
FEhAnwendungs-Frame
FFhEOF-Frame

Ein Frame besteht wiederum aus einem Header und den Frame-Daten. Je nach Frame-Typ sieht der Header folgendermaßen aus:

-Der PGC-Frame-Header:

BytesBedeutung
1Frame-Typ=0
2Größe in Bytes
1Steuerung
1Parameter 1
1Parameter 2
1Parameter 3
1Parameter 4

Der Frame-Typ für PGC-Files ist 0. Die Größe bezieht sich auf die Länge des Datenblocks (ohne Header). Das Steuerungsbyte ist eines der folgenden:

ByteBedeutung
00hkeine Steuerung
01hwarte auf Tastendruck
02hwarte n Sekunden

Die Anzahl Sekunden steht im Parameter 1.
Nach den 8 Bytes PGC-Header folgen die Daten dessen Länge mit der im Header angegebenen Größe übereinstimmen muß.

-Der PGT-Frame-Header:
Entspricht dem PGC-Frame-Header, mit dem Unterschied, dass die Datenlänge immer 320 Byte ist (40×8).

-Der Anwendungs-Frame-Header:
Es gibt so viele unterschiedliche Anwendungen, dass es wenig sinnvoll ist eine Header-Spezifikation zu definieren. Auf eines der Felder kann man allerdings nicht verzichten, die Datengröße. Dieses Feld ist wichtig damit das ausführende Programm das Frame gegebenenfalls überspringen kann.

-Der EOF-Frame-Header:
Entspricht auch dem PGC-Frame-Header, allerdings wird derzeitig nur das Typ-Feld (Typ FFh) verwendet. Jede PGX-Datei sollte mit einem EOF-Frame enden, somit kann das ausführende Programm schneller durchgeführt werden weil es beim lesen nicht das Datei-Ende im Auge behalten muß.

Das PGX-Format ist frei. Sollten sie allerdings Ergänzungen vornehmen setzen sie sich bitte mit den Autoren in Verbindung damit diese Ergänzungen richtig eingebunden werden und es keine Konflikte mit anderen Erweiterungen gibt. Die Autoren sind unter folgenden Adressen zu erreichen:

Donald Messerli
Software Vineyard
CompuServe: 72500,1671
GEnie: D.MESS

BJ Gleason
Thin Air Labs
CompuServe: 75300,2517



FNT


FNT-Files sind Dateien die Bitmaps für grafische Schriftzeichen enthalten. Es gibt bereits verschiedene Arten von Font-Files, diese sind aber meistens für PCs gedacht und Programme die sie verwenden laufen nicht auf dem Portfolio. Vor Jahren definierte der tschechische Portfolioclub ein Font-File Format für den Portfolio. Diese Dateien tragen ebenfalls die Endung FNT, enthalten aber eine Kennung (die ersten zwei Bytes) die klarstellt, dass es sich um Portfolio-Fonts handelt.
Alle Zeichen eines Satzes haben die selbe Größe in Vertikalen und horizontalen Pixels. Die kleinst mögliche Größe ist 1×1 Pixel (wenig sinnvoll) und die größte ist 16×64 Pixel. Jede Bitmap wird in Bytes oder Words gespeichert, je nachdem wie breit (horizontale Pixels) sie ist.
zB.:

Pixel Bytes
4×6 6
6×6 6
6×8 8
8×8 8
12×12 24
12×16 32
16×16 32
16×27 54
usw.


Jede *.FNT-Datei für den Portfolio besteht aus einem 16-Byte Header der die Eigenschaften des Zeichensatzes beinhaltet, gefolgt von den eigentlichen Bitmaps.

Der Header:

Offset LängeBedeutung
0 2 Dateikennung „PF“
2 8 8 Bytes Benutzer-Text
10 1 0-Terminierung
11 1 reserviert
12 1 reserviert
13 1 Breite
14 1 Höhe
15 1 Anzahl Zeichen (max 255)

Beispiel für den Anfang eines Font-Files (zum assenblieren):

DB 'PF'			;PF Kennung
DB '895 6x8 ',00	;Benutzer-Text - Zeichensatz PC895 in 6*8 Matrix 
DB 00,00		;reserviert
DB 06			;6 Pixel breit
DB 08			;8 Pixel hoch
DB 255			;255 definierte Zeichen

DB 000,000,000,000,000,000,000,000  	;Bitmap
DB .......

Die Software kann den benötigten Speicherplatz für die Bitmaps folgendermaßen errechnen (der benötigte Speicherplatz wird in AX ausgegeben):

FNTHEAD DB DUP 16 (?)	;zuerst die ersten 16 Byte der Datei hier hin kopieren

MOV SI,OFFSET FNTHEAD
MOV AL,[SI+14]          ;Zeichenhöhe
MOV BL,[SI+15]          ;Anzahl Zeichen
MUL BL                  ;gesamt Bytes

MOV BL,[SI+13]          ;Zeichenbreite
CMP BL,8                ;Bytes oder Words
JNA LABEL1

SHR AX,1                ;wenn Word, dann mal 2

LABEL1:                 ;Anzahl Bytes in AX
software/diy/progtools/tablesdatas.txt · Zuletzt geändert: 11/01/2010 00:01 (Externe Bearbeitung)