summaryrefslogtreecommitdiff
path: root/system/shard-x86-at/7/doc
diff options
context:
space:
mode:
authorLars-Dominik Braun <lars@6xq.net>2019-02-11 11:49:19 +0100
committerLars-Dominik Braun <lars@6xq.net>2019-02-11 11:49:39 +0100
commit98cab31fc3659e33aef260efca55bf9f1753164c (patch)
treef1affa84049ef9b268e6c4f521f000478b0f3a8e /system/shard-x86-at/7/doc
parent71e2b36ccd05ea678e62e32ee6245df2b8d6ac17 (diff)
downloadeumel-src-98cab31fc3659e33aef260efca55bf9f1753164c.tar.gz
eumel-src-98cab31fc3659e33aef260efca55bf9f1753164c.tar.bz2
eumel-src-98cab31fc3659e33aef260efca55bf9f1753164c.zip
Add source files from Michael
Diffstat (limited to 'system/shard-x86-at/7/doc')
-rw-r--r--system/shard-x86-at/7/doc/8039.PRT569
-rw-r--r--system/shard-x86-at/7/doc/BIOSINT.TXT305
-rw-r--r--system/shard-x86-at/7/doc/CONTROLS.ELA76
-rw-r--r--system/shard-x86-at/7/doc/PORTS.PRT658
4 files changed, 1608 insertions, 0 deletions
diff --git a/system/shard-x86-at/7/doc/8039.PRT b/system/shard-x86-at/7/doc/8039.PRT
new file mode 100644
index 0000000..0981f6d
--- /dev/null
+++ b/system/shard-x86-at/7/doc/8039.PRT
@@ -0,0 +1,569 @@
+0.ope ("12")##limit (15.5)#
+#right#20.01.88
+
+#center##ub#Beschreibung der Single-Chip-uP 8031/5/9/40/8/9/50#ue#
+
+1.) Pinning MCS-48, UPI-41, UPI-42
+
+ +----__----+
+ T0 | 1 40 | Vcc +5V
+ Xtal1 | 2 39 | T1 (In)
+ Xtal2 | 3 38 | P27 -DACK =8x41/2
+ -Reset (In) | 4 37 | P26 DRQ =8x41/2
+ -SS (In) | 5 36 | P25 -IBF =8x41/2
+ -Int (In) | 6 35 | P24 -OBF =8x41/2
+ EA (In) | 7 34 | P17
+ -RD (Out) | 8 33 | P16
+ 8x41/2=A0 -PSEN (Out) | 9 32 | P15
+ -WR (Out) | 10 31 | P14
+ 8x41/2=SYNC ALE (Out) | 11 30 | P13
+ D0 | 12 29 | P12
+ D1 | 13 28 | P11
+ D2 | 14 27 | P10
+ D3 | 15 26 | Vdd/Vpp +5V/+21V bzw. 25V
+ D4 | 16 25 | PROG (O=8243 ioExpander,I=pulse)
+ D5 | 17 24 | P23
+ D6 | 18 23 | P22
+ D7 | 19 22 | P21
+ GND | 20 21 | P20
+ +----------+
+-SS : Single Step (zusammen mit ALE-Output)
+-RESET: 10uF Kondensator nach GND
+-INT : muss mind. 3 Zyklen lang low sein
+PROG : Programmierpuls (+18V, +23V) bzw.
+ bzw. Output fuer 8243 I/O Expander
+SYNC : Output Clock wie ALE
+A0 : Input from Host: 0 = Datatransfer, 1 = Commandtransfer (kann in F1
+ gelesen werden)
+-IBF : Input buffer full
+OBF : Outputbuffer full
+-DACK : DMA Acknowledge
+DRQ : DMA request
+
+
+- Pinning MCS-51
+
+ +----__----+
+8x32/52=T2 P10 | 1 40 | Vcc +5V
+8x32/52=T2EX P11 | 2 39 | P00/AD0
+ P12 | 3 38 | P01/AD1
+ P13 | 4 37 | P02/AD2
+ P14 | 5 36 | P03/AD3
+ P15 | 6 35 | P04/AD4
+ P16 | 7 34 | P05/AD5
+ P17 | 8 33 | P06/AD6
+ Reset/Vpd | 9 32 | P07/AD7
+ P30/RXD | 10 31 | -EA
+ P31/TXD | 11 30 | ALE
+ P32/-INT0 | 12 29 | -PSEN
+ P33/-INT1 | 13 28 | P27/A15
+ P34/T0 | 14 27 | P26/A14
+ P35/T1 | 15 26 | P25/A13
+ P36/-WR | 16 25 | P24/A12
+ P37/-RD | 17 24 | P23/A11
+ Xtal2 | 18 23 | P22/A10
+ Xtal1 | 19 22 | P21/A9
+ GND | 20 21 | P20/A8
+ +----------+
+
+T2 = Timer 2 counter trigger input
+T2EX = Timer 2 external input clock
+
+-Vdd : +5V im Betrieb,
+ 0V fuer Low Power Standby
+ +21V/+25V fuer Programmierspannung
+-T0 : Test Input 0 bzw.
+ Clock-Output des Timers falls ENT0 CLK Befehl gegeben wurde.
+-T1 : Test Input 1 bzw.
+ Counter/Timer Input if STRT CNT Befehl gegeben wurde
+XTAL1 : Quartz, bzw. CLock Input
+XTAL2 : Quartz
+ALE : Adresse Latch enable output (einmal pro Zyklus aktiviert, d.h.
+ als Clockoutput zu gebrauchen)
+ Negative Flanke uebernimmt Adressen auf dem Bus in ext. Latch
+-RD : Output-Strobe to read Data from the BUS into the CPU
+-WR : Output-Strobe indicating a write into external Memory
+-PSEN : Low if a fetch to external memory occurs (ROM -CE)
+P10..P17 : I/O Port 1 quasi-bidirektional
+P20..P27 : I/O Port 2 "
+ P20..P23 dienen als A8..A11 bei Programstore fetches bzw.
+ mit PROG & 8243 als 4Bit I/O Expander Adresse
+EA : External Access input, If high, all internal Programm Memory
+ fetches reference external memory (debugging mode)
+D0..D7 : Datenbus, I/O zus. mit -RD, -WR, ALE
+ Enthaelt A0..A7 zusammen mit PSEN fuer ext. Prog.mem.References
+ " A0..A7 " mit ALE, -RD, -WR fuer ext.RAM-References
+
+
+2.) Vergleich der Single-Chip-CPUs
+
+UPI-41 : 8041, 8641, 8741
+UPI-42 : 8042, 8742
+MCS-48 Serie: 8035, 8039, 8040, 8048, 8049, 8050, 8748, 8749, (8243)
+MCS-51 Serie: 8031, 8032, 8044, 8344, 8744, 8051, 8052
+
+E = EPROM - Version
+R = (Mask)-ROM Version
+- = Kein ROM
+X = External PROM
+Buf=Buffered Port, Buffer-Full ber Pins rausgefhrt.
+
+ CPU | RAM | ROM |E|Ports|Serial |Timer |INTs| Sonstiges
+------+-----+-----+-+-----+-------+------+----+--------------------------
+ 8031 | 64 | - |-| 4(3)|1 Async| 2x16 | 2 | 128k ext.mem., boolean-cpu
+ 8032 | 256 | - |-| 4(3)|1 Async| 3x16 | 2 | 128k ext.mem., boolean-cpu
+ 8035 | 64 | - |-| 2 | - | 1x 8 | 1 | Timer/Counter
+ 8039 | 128 | - |-| 2 | - | 1x 8 | 1 | "
+ 8040 | 256 | - |-| 2 | - | 1x 8 | 1 | "
+ 8041 | 64 | 1k |R|2xBuf| DMA | 1x 8 | - | 4 I/O Bits gempxt.
+ 8042 | 128 | 2k |R|2xBuf| DMA | 1x 8 | - | 4 I/O Bits gempxt.
+ 8044 | 192 | 4k |R| 4(3)|H/SDLC | 2x16 | 2 | 128k ext.,b-cpu,375kbaud-pll
+ 8048 | 64 | 1k |R| 2 | - | 1x 8 | 1 | Timer/Counter
+ 8049 | 128 | 2k |R| 2 | - | 1x 8 | 1 | "
+ 8050 | 256 | 4k |R| 2 | - | 1x 8 | 1 | "
+ 8051 | 128 | 4k |R| 4(3)|1 Async| 2x16 | 2 | 128k ext., boolean-cpu
+ 8052 | 256 | 8k |R| 4(3)|1 Async| 3x16 | 2 | 128k ext., boolean-cpu
+ 8243 | - | - |-|4x4B | - | - | - | I/O Expander f.MCS-48 Serie
+ 8344 | 192 | 4k |X| 4(3)|H/SDLC | 2x16 | 2 | 128k ext.,b-cpu,375kbaud-pll
+ 8741 | 64 | 1k |E|2xBuf| DMA | 1x 8 | - | 4 I/O Bits gempxt.
+ 8742 | 128 | 2k |E|2xBuf| DMA | 1x 8 | - | 4 I/O Bits gempxt.
+ 8744 ! 192 | 4k |E| 4(3)|H/SDLC | 2x16 | 2 | 128k ext.,b-cpu,375kbaud-pll
+ 8748 | 64 | 1k |E| 2 | - | 1x 8 | 1 | Timer/Counter
+ 8749 | 128 | 2k |E| 2 | - | 1x 8 | 1 | "
+ 8751 | 128 | 4k |E| 4(3)|1 Async| 2x16 | 2 | 128k ext., boolean-cpu
+ 8752 | 256 | 4k |E| 4(3)|1 Async| 3x16 | 2 | 128k ext., boolean-cpu
+
+
+- Programmieren des 8748:
+
+ 1.) Vdd = 5V, XTAL angeschlossen, -RESET = 0V, T0=5V, EA=5V
+ 2.) 8748 in Sockel setzen
+ 3.) T0=0V (* Program Mode select *)
+ 4.) EA=23V (* Program Mode activate *)
+ 5.) BUS (0..7) und P2.0..P2.3 (8..B) mit Adresse belegen
+ 6.) -RESET=5V (* Latch Adress *)
+ 7.) BUS := Databyte
+ 8.) Vdd=25V (* Programmierspannung *)
+ 9.) PROG=0V, dann 50ms PROG=23V (* Programmieren *)
+10.) Vdd=5V (* Programmierspannung weg *)
+11.) T0=5V (* Verify mode *)
+12.) Read Data on BUS and compare (* Verify *)
+13.) T0=0V (* Select Program Mode *)
+14.) -RESET=0V, GOTO Step 5 (* Floating BUS *)
+15.) Vdd=5V, -RESET=0V, EA=5V, 8748 aus Sockel nehmen
+
+3.) Memory-Map des 8039
+
+RAM
+Adresse Funktion
+00..07 Registerbank 0 (r0..r7)
+08..17 Stack (8 Ebenen)
+18..1F Registerbank 1 (r0..r7)
+20..7F Frei belegbar
+
+ROM
+Adresse
+000..0FF ROM-Page 0, Bank 0 (Bank 0 ist mb0)
+...
+700..7FF ROM-Page 7, Bank 0
+800..8FF ROM Page 0, Bank 1 (Adressen 800..FFF treten im Code nur
+... als 000..7FF auf!)
+F00..FFF ROM Page 7, Bank 1 (Bank 1 ist mb1)
+
+Bei Reset erfolgt ein Sprung nach 000
+Bei (Timer-)Interrupt erfolgt ein Sprung nach 007
+
+Register
+Bezeichn. Name
+a Akkumulator (8 Bit)
+r0..r7 Register 0 bis 7 (Im internen RAM) (je 8 Bit)
+t Timer (8 Bit)
+p1 Port 1 (8 Bit)
+p2 Port 2 (8 Bit)
+
+Bits
+i Interrupt-Leitung INT (1 Bit)
+t0 Test-Eingang T0 (1 Bit)
+t1 Test-Eingang T1 (91 Bit)
+f0 Internes Flag 0
+f1 Internes Flag 1
+
+Jump-Conditions
+jtf Jump if Timer finished (Nulldurchgang)
+jntf Jump if Timer not finished (z„hlt noch)
+jb0..jb7 Jump if Bit 0..7 in a is set
+jt0 Jump if T0-Input is high
+jnt0 Jump if T0-Input is low
+jt1 Jump if T1-Input is high
+jnt1 Jump if T1-Input is low
+jf0 Jump if Flag 0 is set
+jnf0 Jump if Flag 0 is cleared
+jf1 Jump if Flag 1 is set
+jnf1 Jump if Flag 1 is cleared
+jz Jump if a is zero
+jnz Jump if a is not zero
+jc Jump if carry is set
+jnc Jump if carry is cleared
+jni Jump if Interrupt-Pin INT is low
+
+4.) Befehlssatz nach Opcode sortiert
+
+Symbolik (Beispiele)
+
+@r0 Inhalt der Speicherstelle, deren Adresse in Register 0 steht.
+#xx Die (Byte-)Konstante xx
+2xx Die Adressen 200..2FF (je nach xx), xx ist ein Offset zur Seite 2.
+mb1 ROM-Bank 1 ('800..FFF')
+
+00 nop
+01
+02
+03 xx add a,#xx
+04 xx jmp 0xx
+05
+06 xx jntf xx
+07 dec a
+08
+09 in a,p1
+0A in a,p2
+0B
+0C
+0D
+0E
+0F
+
+10 inc @r0 Memoryvalue incrementieren
+11 inc @r1
+12 xx jb0 xx Jump if Bit 0 in a is high
+13
+14 xx call 0xx
+15 dis i Disable Interrupts
+16 xx jtf xx
+17 inc a
+18 inc r0
+19 inc r1
+1A inc r2
+1B inc r3
+1C inc r4
+1D inc r5
+1E inc r6
+1F inc r7
+
+20 xch a,@r0 a und Memoryinhalt bei @r0 austauschen
+21 xch a,@r1
+22
+23 xx mov a,#xx a mit Konstante laden
+24 xx jmp 1xx
+25 en tcnti Enable Timer/Counter Interrupt
+26 xx jnt0 xx
+27 clr a a := 0
+28 xch a,r0 a und Register vertauschen
+29 xch a,r1
+2A xch a,r2
+2B xch a,r3
+2C xch a,r4
+2D xch a,r5
+2E xch a,r6
+2F xch a,r7
+
+30
+31
+32 xx jb1 xx
+33
+34 xx call 1xx
+35 dis tcnti Disable Timer/Counter Interrupt
+36 xx jt0 xx
+37 cpl a a := NOT a
+38
+39
+3A
+3B
+3C
+3D
+3E
+3F
+
+40 orl a,@r0
+41 orl a,@r1
+42 mov a,t Timervalue lesen nach a
+43 xx orl a,#xx Logisches Oder
+44 xx jmp 2xx
+45 strt cnt Counter starten, Timer aus
+46 xx jnt1 xx
+47
+48 orl a,r0
+49 orl a,r1
+4A orl a,r2
+4B orl a,r3
+4C orl a,r4
+4D orl a,r5
+4E orl a,r6
+4F orl a,r7
+
+50 anl a,@r0
+51 anl a,@r1
+52 xx jb2 xx
+53 xx anl a,#xx Logisches Und
+54 xx call 2xx
+55 strt t Timer starten, Counter aus
+56 xx jt1 xx
+57
+58 anl a,r0
+59 anl a,r1
+5A anl a,r2
+5B anl a,r3
+5C anl a,r4
+5D anl a,r5
+5E anl a,r6
+5F anl a,r7
+
+60 add a,@r0
+61 add a,@r1
+62 mov t,a Timervalue mit a laden
+63
+64 xx jmp 3xx
+65 stop tcnt Timer/Counter stoppen
+66 xx jnf1 xx
+67 rrc a a rechts rotieren (durchs Carry)
+68 add a,r0 a := a + r0
+69 add a,r1
+6A add a,r2
+6B add a,r3
+6C add a,r4
+6D add a,r5
+6E add a,r6
+6F add a,r7
+
+70
+71
+72 xx jb3 xx
+73
+74 xx call 3xx
+75
+76 xx jf1 xx
+77 rr a a rechts rotieren (ohne Carry)
+78
+79
+7A
+7B
+7C
+7D
+7E
+7F
+
+80
+81
+82
+83 ret Unterprogrammruecksprung
+84 xx jmp 4xx
+85 clr f0 Flag 0 loeschen
+86 xx jni xx
+87
+88
+89 xx orl p1,#xx Bits im Outputport 1 setzen
+8A xx orl p2,#xx dto. Port 2
+8B
+8C
+8D
+8E
+8F
+
+90 movx @r0,a Port (@r0) mit a beschreiben
+91 movx @r1,a
+92 xx jb4 xx
+93 retr Return from Interrupt
+94 xx call 4xx
+95 cpl f0 Flag 0 umdrehen
+96 xx jnz xx
+97 clr c Carry loeschen
+98
+99 xx anl p1,#xx Bit im Outputport 1 loeschen (mit NOT xx)
+9A xx anl p2,#xx dto. Port 2
+9B
+9C
+9D
+9E
+9F
+
+A0 mov @r0,a Memory mit a beschreiben
+A1 mov @r1,a
+A2
+A3 movp a,@a a mit ROMinhalt (a) laden (aktuelle Page)
+A4 xx jmp 5xx
+A5 clr f1
+A6
+A7 cpl c Carry umdrehen
+A8 mov r0,a
+A9 mov r1,a
+AA mov r2,a
+AB mov r3,a
+AC mov r4,a
+AD mov r5,a
+AE mov r6,a
+AF mov r7,a
+
+B0 xx mov @r0,#xx Memoryzelle mit Konstante laden
+B1 xx mov @r1,#xx
+B2 xx jb5 xx
+B3
+B4 xx call 5xx
+B5 cpl f1
+B6
+B7
+B8 xx mov r0,#xx Register mit Konstante laden
+B9 xx mov r1,#xx
+BA xx mov r2,#xx
+BB xx mov r3,#xx
+BC xx mov r4,#xx
+BD xx mov r5,#xx
+BE xx mov r6,#xx
+BF xx mov r7,#xx
+
+C0 dec @r0
+C1 dec @r1
+C2
+C3
+C4 xx jmp 6xx
+C5 sel rb0 Registerbank 0 waehlen (RAM 00..07)
+C6 xx jz xx
+C7
+C8 dec r0
+C9 dec r1
+CA dec r2
+CB dec r3
+CC dec r4
+CD dec r5
+CE dec r6
+CF dec r7
+
+D0 xrl a,@r0
+D1 xrl a,@r1
+D2 xx jb6 xx
+D3 xx xrl a,#xx Logisches Exklusiv-Oder
+D4 xx call 6xx
+D5 sel rb1 Registerbank 1 waehlen (RAM 18..1F)
+D6
+D7
+D8 xrl a,r0
+D9 xrl a,r1
+DA xrl a,r2
+DB xrl a,r3
+DC xrl a,r4
+DD xrl a,r5
+DE xrl a,r6
+DF xrl a,r7
+
+E0 xx djnz @r0,xx
+E1 xx djnz @r1,xx
+E2
+E3 movp3 a,@a a mit Inhalt von (3aa) laden, aa = (a)
+E4 xx jmp 7xx
+E5 sel mb0 Memorybank 0 (ROM 000..7FF) waehlen
+E6 xx jnc xx
+E7 rl a a nicht durch c links rotieren
+E8 xx djnz r0,xx Decrement r0, jump to xx if r0 is not zero
+E9 xx djnz r1,xx
+EA xx djnz r2,xx
+EB xx djnz r3,xx
+EC xx djnz r4,xx
+ED xx djnz r5,xx
+EE xx djnz r6,xx
+EF xx djnz r7,xx
+
+F0 mov a,@r0
+F1 mov a,@r1
+F2 xx jb7 xx
+F3
+F4 xx call 7xx
+F5 sel mb1 Memorybank 1 (ROM 800..FFF) waehlen
+F6 xx jc x
+F7 rlc a a durch carry links rotieren
+F8 mov a,r0
+F9 mov a,r1
+FA mov a,r2
+FB mov a,r3
+FC mov a,r4
+FD mov a,r5
+FE mov a,r6
+FF mov a,r7
+
+5.) Befehlssatz nach Funktionsgruppen
+
+- Arithmetik
+ @r0 @r1 - #xx - - - a r0..r7
+dec c0 c1 - 07 C8..CF
+inc 10 11 - 17 18..1F
+clr - - - 27 -
+cpl - - - 37 -
+orl a,.. 40 41 43 - 48..4F
+anl a,.. 50 51 53 - 58..5F
+add a,.. 60 61 03 - 68..6F
+rrc - - - 67 -
+rr - - - 77 -
+xrl a,.. D0 D1 D3 - D8..DF
+rl - - - E7 -
+rlc - - - F7 -
+
+- Flags
+ f0 f1 c
+clr 85 A5 97
+cpl 95 B5 A7
+
+- Transfer
+ @r0 @r1 - #xx - - - a r0..r7
+xch a,.. 20 21 - 28..2F
+mov a,.. F0 F1 23 F8..FF
+mov ..,a A0 A1 - A8..AF
+mov ..,#xx B0 B1 23 B8..BF
+
+swap a
+movp a,@a A3
+movp3 a,@a E3
+
+
+- I/O
+ i= 1 2
+in a,pi 09 0A
+orl pi,#xx 89 8A
+anl pi,#xx 99 9A
+outl pi,a
+
+movx ..,a 90 91
+movx a,xx
+
+
+- Timer
+ i tcnti
+en 05 25
+dis 15 35
+
+ cnt t
+strt 45 55
+stop 65
+
+mov a,t 42
+mov t,a 62
+
+
+- Programmsteuerung
+
+ret 83
+retr 93
+
+ rr= @r0 @r1 r0..r7
+djnz rr,xx (E0 E1) E8..EF
+
+ i= 0 1 2 3 4 5 6 7
+jmp $ixx 04 24 44 64 84 A4 C4 E4
+call $ixx 14 34 54 74 94 B4 D4 F4
+
+ i= 0 1 2 3 4 5 6 7
+jbi,xx 12 32 52 72 92 B2 D2 F2
+
+ cc= ntf tf nt0 t0 nt1 t1 nf1 f1 ni nz z nc c
+jcc,xx 06 16 26 36 46 56 66 76 86 96 C6 E6 F6
+
+- Sonstiges
+ rb0 rb1 mb0 mb1
+sel C5 D5 E5 F5
+nop 00
diff --git a/system/shard-x86-at/7/doc/BIOSINT.TXT b/system/shard-x86-at/7/doc/BIOSINT.TXT
new file mode 100644
index 0000000..f31d5b6
--- /dev/null
+++ b/system/shard-x86-at/7/doc/BIOSINT.TXT
@@ -0,0 +1,305 @@
+#type ("17.klein")#
+Interrupts/Traps/Exeptions (Bios) 03.06.87
+
+Interrupt: IRQn (Durch Hardware ausgel”st, werden auf Traps umgelenkt)
+Trap : INTn (Durch Software ausgel”st)
+Exeption : INTn (Im Protected Mode vom Prozessor ausgel”st)
+
+Traps | Funktion
+--------+------------------------------------------------------------------
+INT 00H : Abort Program
+INT 01H :
+INT 02H : NMI-Routine (Parity-Check & Power-Fail & Redirected from INT 75H)
+INT 03H : INT3 - Break
+INT 04H : INTO - Overflow
+INT 05H : Print Screen
+INT 06H :
+INT 07H :
+INT 08H : IRQ0 System Interrupt
+INT 09H : IRQ1 Keyboard Buffer full
+INT 0AH : Software redirected from IRQ9
+INT 0BH : IRQ3 Serial Port 2
+INT 0CH : IRQ4 Serial Port 1
+INT 0DH : IRQ5 Parallel Port 2
+INT 0EH : IRQ6 Diskette Interrupt
+INT 0FH : IRQ7 Parallel Port 1
+
+INT 10H : Video Trap
+ ah = 00H : set mode (al = mode)
+ (Videoram: Herkules: B0000
+ EGA : B8000)
+ al | Tx/Gr| Pixel | Zeichen | Monitor | Farbe | Seiten
+ ---+------+-------+---------+---------+-------+--------
+ 00 | Text |640x200| 40 x 25 | Mono/Col| 16/64*| 8
+ 01 | Text |640x200| 40 x 25 | Color | 16/64*| 8
+ 02 | Text |640x200| 80 x 25 | Mono/Col| 16/64*| 8
+ 03 | Text |640x200| 80 x 25 | Color | 16/64*| 8
+ 04 | Graf |320x200| 40 x 25 | Mono/Col| 4 | 1
+ 05 | Graf |320x200| 40 x 25 | Mono/Col| 4 | 1
+ 06 | Graf |640x200| 80 x 25 | Mono/Col| 2 | 1
+ 07 | Text |720x348| 80 x 25 | Mono | 4 | 8
+ 08 | Graf |720x348| 90 x 48 | Mono | 2 | 1
+ --------- ab hier nicht implementiert, nur EGA ------------------
+ VideoRAM-Adresse A0000
+ 0D | Graf |320x200| 40 x 25 | Color | 16 | 8
+ 0E | Graf |640x350| 80 x 25 | Color | 16 | 4
+ 0F | Graf |640x350| 80 x 25 | Mono | 4 | 2
+ 10 | Graf |640x350| 80 x 25 | Enhanced| 16/64*| 2
+ * mit EGA-Monitor
+ ah = 01H : set cursor type (Eingang: CH, CL Werte 0..31)
+ CH=Startzeile des Cursorblocks, CL=Endzeile des Cursorblocks
+ ah = 02H : set cursor pos (BH = Page, DL = Spalte, DH = Zeile)
+ ah = 03H : read cursor
+ Ausgang: BH=Page, DL=Spalte, DH=Zeile, CL=Starzeile des
+ Cursorblocks, CH=Endzeile des Cursorblocks
+ ah = 04H : read lightpen
+ Ausgang: AH=1 : Register sind gltig, AH=0: Taste nicht gedrckt
+ DH = Zeile, DL = Spalte des Lightpens
+ CH=Rasterlinie (1..199), CX=Rasterlinie (1..349)
+ BX = Rasterspalte (1..319/1..639)
+ ah = 05H : set actual display (AL = Neue Seite)
+ ah = 06H : scroll up
+ AL = 0: Fenster l”schen, sonst Anzahl Zeilen zu scrollen
+ CH, CL = linke obere Ecke des Scroll-Windows
+ DH, DL = rechte untere Ecke des Scroll-Windows
+ BH = Attribut fuer die Leerzeilen
+ ah = 07H : scroll down
+ AL = 0: Fenster l”schen, sonst Anzahl Zeilen zu scrollen
+ CH, CL = linke obere Ecke des Scroll-Windows
+ DH, DL = rechte untere Ecke des Scroll-Windows
+ BH = Attribut fuer die Leerzeilen
+ ah = 08H : read current attribute and char
+ Ausgang: BH=Anzeigeseite, AL=Zeichen, AH=Attribut (nur Alpha)
+ ah = 09H : write current attribute and char
+ BH=Anzeigeseite, CX=Anzahl Zeichen, AL=Zeichen, BL=Attribut/Farbe
+ ah = 0AH : write current attribute and char
+ BH=Anzeigeseite, CX=Anzahl Zeichen, AL=Zeichen
+ ah = 0BH : set color (BH=Palettenfarbe 0..127, BH=Farbwert)
+ ah = 0CH : write dot
+ BH=Seite, DX=Zeile, CX=Spalte, AL=Farbwert (falls Bit 7=1, wird
+ alte Farbe mit neuer Farbe geXORed)
+ ah = 0DH : read dot (BH=Seite, DX=Zeile, CX=Spalte, AL=Punktfarbwert)
+ ah = 0EH : write tty (Zeichen schreiben, AL=Zeichen, BL=Farbe)
+ ah = 0FH : video state (Ausgang: AL=Video-Mode (0..8), AH=Anzahl
+ Zeichenspalten, BH=Seite)
+ ah = 10H : reserved (EGA-Bios: Write Palette/Overscan/Intensity/Flash)
+ ax = 1142H: draw line (EGA-Bios: 12 Routinen fr den Charactergenerator)
+ CX=X-pos-from, DX= Y-pos-from, BP=X-pos-to, DI=Y-pos-to
+ ah = 12H : reserved (EGA-Bios: Alternate Characterset)
+ ah = 13H : write string
+ Allgemein:
+ ES:BP = Stringanfang
+ CX = Stringl„nge
+ DL, DH = Cursorposition (Stringanfang)
+ BH = Seite
+ al = 0: BL=Attribut, String: CHAR, CHAR, CHAR,...,Cursor wird nicht
+ bewegt.
+ al = 1: BL=Attribut, String: CHAR, CHAR, CHAR,..., Cursor wird bewegt.
+ al = 2: String: CHAR, ATTR, CHAR, ATTR,..., Cursor wird nicht bewegt.
+ al = 3: String: CHAR, ATTR, CHAR, ATTR,..., Cursor wird bewegt.
+
+INT 11H : Equipment Trap (Ausgang: AX = Equipment Flag)
+ AX :
+ Bit 1 : 80287 installiert
+ Bit 3 : Herkules installiert
+ Bit 4/5 : 0 = No Primary Display set
+ 1 = Monochrome
+ 2 = Color 80 * 25
+ 3 = EGA
+ Bit 6 : Drive B installiert
+ Bit 9..12 : Anzahl RS232
+ Bit 14/15 : Anzahl Printer
+
+INT 12H : Memory Size Trap (Ausgang: AX = Memorysize in KB)
+
+INT 13H : Hardisk Trap
+ Allgemein:
+ DL = Drive (0, 1...)
+ AL = Sector count
+ CX = Bit 0... Bit 5 = Sector
+ Bit 6... Bit 15 = Cylinder
+ Exit: AH = 0 ok, <> 0 Fehler (z.b. in hf_error nachsehen)
+ ah = 0 reset diskette, wd1010, hdisks
+ ah = 1 return status
+ ah = 2 read
+ ah = 3 write
+ ah = 4 verify
+ ah = 5 format
+ ah = 8 drive params
+ ah = 9 init drive
+ ah = A read long
+ ah = B write long
+ ah = C seek
+ ah = D reset wd1010 (DL = Drive)
+ ah =10 ready test
+ ah =11 reclibrate
+ ah =14 check controller
+ ah =15 read dasd (stacktop 2 words: anzahl sektoren der platte)
+
+INT 14H : RS232C Trap
+ Allgemein: dx = port (>= 1FE0H : SCC = 8530)
+ ah = 0 : Init
+ al : Bit 5..7 = Baudrate
+ 000 = 110,
+ 001 = 150,
+ 010 = 300,
+ 011 = 600,
+ 100 = 1200,
+ 101 = 2400,
+ 110 = 4800,
+ 111 = 9600,
+ Bit 3..4 = Parity (no, odd, even)
+ Bit 2 = Stopbits (1, 2)
+ Bit 0..1 = Datenbits (5, 6, 7, 8)
+ ah = 1 : Send (al = Zeichen, Ausgang: ah=80H Timeout, Zeichen dann in al)
+ ah = 2 : Read (Ausgang: ah=80H:Timeout, sonst ah=Statusregister,al=Zeichen)
+ ah = 3 : Status (Ausgang: Nur 8250: al = Modemstatus)
+ ah : Bit 0 = 1 : Data available
+ Bit 1 = 1 : Receiver overrun
+ Bit 2 = 1 : Parity Error
+ Bit 3 = 1 : Framing Error
+ Bit 4 = 1 : Transmitter empty
+ Bit 5 = 1 : Break received
+
+INT 15H : Utility Trap
+ ah = 80H open device (nicht implementiert)
+ ah = 81H close device (nicht implementiert)
+ ah = 82H prog term (nicht implementiert)
+ ah = 83H event wait (Eingang: CX=RTCtmr high, DX=RTCtmr high, ES:BX=userflag)
+ Ausgang: CY=0, Event wait wurde aktiviert
+ CY=1, Noch kein RTC-Event aufgetreten
+ (INT 15H periodisch aufrufen zum pollen)
+ ah = 84H joy stick (Eingang: DX)
+ DX = 0: Ausgang: AL (Bits 4..7) = Buttons
+ DX = 1: Ausgang: AX=Xa, BX=Ya, CX=Xb, DX=Yb
+ ah = 85H sys request (nicht implementiert)
+ ah = 86H wait a moment (CX=RTCtimer high, DX=RTCtimer low)
+ ah = 87H block move (extended memory) (Eingang: CX: Words, ES:SI = Block
+ Descriptoren: 8 Bytes Source, 8 Bytes Destination)
+ ah = 88H extended memory (Ausgang: AX= KB extended Memory)
+ ah = 89H enter protected mode
+ ax = 8A42H run setup
+ ax = 8B42H error beep
+ ax = 8C42H usr-powerfail-shutdown-routine
+ (Benutzerdaten k”nnen von ES:0 bis ES:BACK_SYS abgelegt werden)
+ ax = 8D42H usr-powerfail-resume-routine
+ (Benutzerdaten k”nnen von ES:0 bis ES:BACK_SYS geholt werden)
+ ax = 8E42H set timer (Eingang: BL = Timer (0, 1, 2), CX = Countervalue
+ BH: Bit 0 = BCD, Bit 1..3 = Mode,
+ Bit 4..5 Write CMD, Bit 6/7 unused)
+ (Timer wird bei Resume wieder so initialisert)
+ ax = 8F42H hardcopy (Grafik & Mono)
+ ah = 90H device busy (nicht implementiert)
+ ah = 91H set int complete (nicht implementiert)
+ ah = 9242H backup memory (CX=Anzahl Bytes, DS:SI = Sourceadr, E000H:DI
+ = Destinationadr.)
+ ah = 9342H restore memory (CX=Anzahl Bytes, E000H:SI = Sourceadr, ES:DI =
+ Destinationadr.)
+INT 16H : Keyboard Trap
+ ah = 00 Ascii read (Ausgnag: AX=Zeichen CY=1, sonst CY=0)
+ ah = 01 Ascii status (Ausgang: ZF = 0 : Zeichen in Queue)
+ ah = 02 Shift status (Ausgang: AL = KB_flag)
+ ax = 0342 set typematic (Ausgang: BL = Rate, BH = Delay)
+ ax = 0442 soft power down
+
+INT 17H : Printer Trap
+ Allgemein: dx = port
+ ah = 0 : print char (Eingang: al = Char, Ausgang: ah = Printer Status)
+ ah = 1 : init printer port
+ ah = 2 : ah = Status
+
+INT 18H : Basic (nicht implementiert)
+
+INT 19H : Bootstrap Trap
+ Block 0 von Harddisk oder Floppy --> ES:BX laden und starten (Booting...)
+ Der Block hat in Bytes 510/511 das Kennzeichen AA55H.
+
+INT 1AH : Time of day Trap
+ ah = 0 : Read Timer (Ausgang: CX=Timer low, DX=Timer high, AL<>0:Overflow)
+ ah = 1 : Set Timer (CS=Timer low, DX=Timer high)
+ ah = 2 : Read Clock (Ausgang: DH = Sec, CL = Min, CH = Std)
+ ah = 3 : Set Clock (DL=Sommerzeit (01), DH=sec, CL=Min, CH=Std)
+ ah = 4 : Read Date (DL=Day, DH=Month, CL=Year, CH=Century)
+ ah = 5 : Set Date (DL=Day, DH=Month, CL=Year, CH=Century)
+ ah = 6 : Set Alarm (DH=Sec, CL=Min, CH=Std)
+ ah = 7 : Reset Alarm
+
+INT 1BH : Dummy Return
+
+INT 1CH : User Timer Tic, wird einmal pro Sekunde aufgerufen.
+
+INT 1DH : Zeigt auf die Video Parameter
+INT 1EH : Zeigt auf Disk_base (DF, 02, 25, 02, 0F, 1B, FF, 54, F6, 0F, 08)
+INT 1FH : Pointer auf Zeichensatz mit Zeichen 128..255
+
+INT 20H ... INT 3FH sind fr das Betriebssystem reserviert.
+
+INT 20H : DOS: Terminate Program
+INT 21H : DOS: Function Call
+INT 22H : DOS:
+INT 23H : DOS:
+INT 24H : DOS:
+INT 25H : DOS:
+
+INT 40H : Diskette Trap
+ AH = 0 disk reset
+ AH = 1 disk status (ret)
+ AH = 2 disk read (ES:BP = Pointer auf Buffer, DI = Anzahl Sektoren,
+ DH = Head, DL = Drive, CL = Sektor, CH = Cylinder)
+ AH = 3 disk write "
+ AH = 4 disk verify "
+ AH = 5 disk format "
+ AH = 21 disk type (Ausgang: BL (Bit 0..3) 0=360K, 1/2 = 1.2MB)
+ AH = 22 disk change
+ AH = 23 format set
+
+INT 41H : Hardfile Table Vector
+INT 44H : Pointer auf weiteren Zeichensatz (Nur von EGA-Bios untersttzt)
+INT 46H : Hardfile 1 Table Vector
+
+INT 4AH : Fr User software redirected from RTC-IRQ (Alarm, periodic)
+
+INT 60H
+ ... User
+INT 6FH
+
+Hardware-Interrupts 8..15:
+INT 70H : IRQ 8 RTC-Interrupt
+INT 71H : IRQ 9 Software Redirected to INT 0AH
+INT 72H : IRQ10 Frei
+INT 73H : IRQ11 Frei
+INT 74H : IRQ12 Frei
+INT 75H : IRQ13 Coprozessor, Software Redirected to NMI (INT 02H)
+INT 76H : IRQ14 Harddisk Interrupt
+INT 77H : IRQ15 Frei
+
+INT 78H : User 0
+INT 79H : User 1
+INT 7AH : User 2
+INT 7BH : User 3
+INT 7CH : User 4
+INT 7DH : User 5
+INT 7EH : User 6
+INT 7FH : User 7
+
+
+Exception | Bezeichnung | E-Code | Restart| Instr.
+----------+-------------------------------------+--------+--------+----------
+ 0 | Divide Error | - | Ja | DIV, IDIV
+ 1 | Single Step | - | Ja | Alle
+ 2 | NMI | - | Ja | Alle
+ 3 | Breakpoint | - | Ja | INT3
+ 4 | INTO Overflow | - | Ja | INTO
+ 5 | BOUND Range | - | Ja | BOUND
+ 6 | Invalid Opcode | - | Ja | undef.Opc.
+ 7 | Processor Extension Not Available | - | Ja | ESC, WAIT
+ 8 | Double Exception / IDTL too small | 0 | Nein | LIDT
+ 9 | Processor Extension Segment Overrun | - | Nein | ESC
+ 10 | Invalid Task State Segment | Ja | Ja | TaskSwitch
+ 11 | Segment Not Present | Ja | Ja | Alle Mem.
+ 12 | Stack Segment Overrun or Not Present| Ja | Ja | Stackopc.
+ 13 | General Protection | Ja | Ja | Alle Mem.
+ 14 | - | - | - | -
+ 15 | - | - | - | -
+ 16 | Processor Extension Interrupt | - | - | ESC, WAIT
+
diff --git a/system/shard-x86-at/7/doc/CONTROLS.ELA b/system/shard-x86-at/7/doc/CONTROLS.ELA
new file mode 100644
index 0000000..1ea4978
--- /dev/null
+++ b/system/shard-x86-at/7/doc/CONTROLS.ELA
@@ -0,0 +1,76 @@
+SHard-Spezifische 'control'-Funktionen (V2.7, AT-SHard)
+
+Kanal 32:
+ control (-3, x, mcr*256+kanal, r) : Modem-Control-Register setzen
+ mcr: Bit 0: DTR
+ Bit 1: RTS
+ Bit 2: OUT1
+ Bit 3: OUT2 (Interrupt enable) muss 1 sein
+ Bit 4: Diagnostic-Mode (muss 0 sein)
+ Bit 5: -
+ Bit 6: -
+ Bit 7: -
+ control (-5, x, x, r) : Anforderung nach 'shutup' Systemreset.
+ blockin (clock, -4, x, r) : HW-Clock auslesen
+ clock (1) = jahrhundert
+ clock (2) = jahr
+ clock (3) = monat
+ clock (4) = tag
+ clock (5) = stunden
+ clock (6) = minuten
+ clock (7) = sekunden
+
+Kanal 2..13 (sofern vorhanden) :
+ control (-3, x, x, r) : 8250 Linestatusregister/Modemstatusregister lesen
+ Bit 1: 1 = Receiver overrun detected
+ 2: 1 = Parity Error detected
+ 3: 1 = Framing Error detected
+ 4: 1 = Break Interrupt Detected
+ Bit 8..15 nicht im Standard-SHard
+ (Bit 8: 1 = CTS changed
+ 9: 1 = DSR changed
+ 10: 1 = RI changed to inactive
+ 11: 1 = DCD changed
+ 12: CTS input
+ 13: DSR input
+ 14: RI input
+ 15: DCD input)
+ control (-4, x, x, r) ; r = Anzahl Eingabezeichen, seit letzter Abfrage
+ control (-5, x, x, r) ; r = Anzahl Ausgabezeichen, seit letzter Abfrage
+ control (-6, x, x, r) ; Break senden
+ control (-10, x, x, r) ; DTR+RTS inactive setzen (stop!)
+ control (-11, x, x, r) ; DTR+RTS active setzen (weiter)
+
+Kanal 14..16 (falls vorhanden):
+ control (-3, x, x, r) ; Printeroutput nicht mehr ueber SHard sondern BIOS
+ control (-4, 256 * retry + wartezeit, x, r) ;
+ Setzt fuer langsame Drucker retrys und Wartezeit
+ zwischen den Zeichen.
+
+Kanal 1 :
+ control (-3, attribut, x, r) ; Textattribut fuer Bildschirmausgaben setzen
+ control (-4, x, palette, r) ; Colorpalette fuer Farbkarte setzen.
+ control (-5, 256 * karte + mode, x, r) ; Videomodus einschalten
+ karte: 1 = tecmar(mode=0..5), 2 = hercules (mode=0)
+ karte: 0 = Bios (mode=0, 7, 8=graphik)
+ control (-6, xpos, ypos, r) ; Draw line to (xpos, ypos)
+ control (-7, xpos, ypos, r) ; Move to (xpos, ypos)
+ control (-8, maske, linetype, r) ; Set pen
+ control (-9, p1, p2, r) ; Set color pen 1
+ control (-10, p1, p2, r) ; Set color pen 2
+ control (-11, new mask count, mode, old mask count) ; Set Mask Mode
+ mode = 0 : Kein Mask mode
+ mode = 1 : Mask Mode einschalten.
+Kanal 28, 29 (Harddisk):
+ control (-10, x, x, r) : r = Anzahl Cylinder-1 (Gesamte Platte)
+ control (-11, x, x, r) : r = Anzahl Sektoren
+ control (-12, x, x, r) : r = Anzahl Heads
+
+Kanal 30, 31 (Floppy) :
+ -
+
+
+
+
+
+
diff --git a/system/shard-x86-at/7/doc/PORTS.PRT b/system/shard-x86-at/7/doc/PORTS.PRT
new file mode 100644
index 0000000..b8d336d
--- /dev/null
+++ b/system/shard-x86-at/7/doc/PORTS.PRT
@@ -0,0 +1,658 @@
+#type ("17.klein")#
+System-Ports:
+
+Port | Funktion
+-----+--------------------------------------------------------------------
+ | DMA Controller 1 (8237A-5) fr Bytetransfers (Kanal 0..3)
+ 00 | Byteadresse (start/current) Kanal 0 (frei fr Memory-Memory Transfer)
+ 01 | Bytecount Kanal 0 (Pageregister 87H) (Sourcechannel)
+ 02 | Byteadresse (start/current) Kanal 1 (reserviert fr SDLC)
+ 03 | Bytecount Kanal 1 (Pageregister 83H) (Destinationchannel)
+ 04 | Byteadresse (start/current) Kanal 2 (Diskette)
+ 05 | Bytecount Kanal 2 (Pageregister 81H)
+ 06 | Byteadresse (start/current) Kanal 3 (XT: Harddisk)
+ 07 | Bytecount Kanal 3 (Pageregister 82H)
+ 08 | Read: DMA-Status (D4..D7:1 = DREQ liegt an, D0..D3:0 = Kanal Busy)
+ | Write: DMA-Command:
+ | D0 1 = memory<-->memory transfer enabled
+ | D1 Falls D0 = 1: 1 = Kanal 0 Adresse INCR/DECR, 0 = Adr. unver„ndert
+ | D2 1 = DMA-Control enabled
+ | D3 1 = R/W-Signal verkrzt
+ | D4 0 = Feste Kanalprios, 1 = Kanalprios rotieren
+ | D5 Falls D3 = 0, 1 = verz”gertes R/W-Signal, 0 = verl„ngertes R/W
+ | D6 1 = DREQ active-low, 0 = DREQ active-high
+ | D7 1 = DACK active-high, 1 = DACK active-low
+ 09 | Read/Write: Anforderungsregister
+ | D1, D0 = Nummer des aktiven DMA-Kanals
+ | D2 1 = DMA-Transfer anstossen, (D0/D1 = Kanalnummer)
+ | 0 = DMA-Transfer wurde per Hardware angestossen
+ 0A | Read/Write : Single Mask Register Bit
+ | D0..D3 fr jeden Kanal: 1 = DREQ gesperrt, 0 = DREQ freigegeben
+ 0B | Write: Mode-Register
+ | D1, D0 bestimmen den Kanal auf den sich D2..D7 beziehen (0..3)
+ | D3, D2 (falls D6=D7=1 (Kaskade) ohne Bedeutung)
+ | 0 0 Prfzyklen
+ | 0 1 Write in Memory
+ | 1 0 Read aus Memory
+ | 1 1 Illegal
+ | D4 1 = Autorepeat
+ | D5 1 = DECR Adressen, 0 = INCR Adressen
+ | D7, D6
+ | 0 0 Polling
+ | 0 1 Cycle Steal
+ | 1 0 Burst Mode
+ | 1 1 Kaskadierter Controller
+ 0C | Clear Byte Pointer Flip-Flop
+ 0D | Read: Temporary-Register, Write: Master Clear
+ 0E | Clear Mask Register
+ 0F | Write: All Mask Register
+ |
+ | Interrupt-Controller 1 (Master) 8259, siehe Datenblatt
+ 20 | Write: ICW1, OCW2, OCW3, Read: ISR, IRQ-Level (Je nach Zustand)
+ 21 | Write: ICW2, ICW3, ICW4, OCW1, Read: IMR (Je Nach Zustand)
+ |
+ | Intervall-Timer 8254.2
+ 40 | Channel 0 Timeconstant (System Interrupt IRQ 0)
+ 41 | Channel 1 Timeconstant (Refesh Request)
+ 42 | Channel 2 Timeconstant (Speaker Output)
+ 43 | Control (Channel 0..2)
+ |
+ | KEYBOARD
+ 60 | Keyboard Data Read/Write
+ 61 | System Control Port (In/Out Port)
+ | Write:
+ | D0 = Speaker Gate
+ | D1 = Speaker Data
+ | D2 = Base Parity Check (<512k), 0 = Parity Check erlaubt
+ | D3 = Channel Parity Check (>=512k), 0 = Parity Check erlaubt
+ | Read:
+ | D4 = 1 = Refresh Detected
+ | D5 = 1 = Output Timer 2
+ | D6 = 1 = IO-RAM Parity Error
+ | D7 = 1 = Base-RAM Parity Error
+ 64 | Keyboard Command/Status Port
+ | Write (Command):
+ | Command C0H liest Input Port, Byte im Datenregister ist dann:
+ | D4 : 0 = 2nd 256k Board-RAM disabled
+ | D5 : 0 = Manufacturing Jumper installed
+ | D6 : 1 = Primary Display is Monochrome, 0 = Color
+ | D7 : 0 = Keyboard is inhibited
+ | Command D0H liest Output Port, Byte im Datenregister ist dann:
+ | D0 : 0 = System Reset
+ | D1 : Gate A20 (AND-Verknpfung mit A20-Adressleitung)
+ | D4 : Output-Buffer full
+ | D5 : Input-Buffer empty
+ | D6 : Keyboard clock (output)
+ | D7 : Keyboard data (output)
+ | D1H schreibt Output Port, sonst wie D0H
+ | Read (Status):
+ | D0 : 1 = Outputbuffer is filled (Keyboard --> Computer)
+ | D1 : 0 = Inputbuffer is empty
+ | D2 : System-Flag
+ | D3 : Last Write: 1 = Command, 0 = Data
+ | D4 : 0 = keyboard is inhibited
+ | D5 : 1 = Transmit-Timeout Error
+ | D6 : 1 = Receive-Timeout Error
+ | D7 : 1 = Parity Error (Receive)
+ |
+ | RTC/RAM
+ 70 | CMOS-Adresse, NMI-Mask
+ | D0..D5 = CMOS-Adresse (0..63)
+ | D7 : 0 = NMI enabled, 1 = NMI disabled (Power-Fail, Parity-Check, NP)
+ | RTC-Adressen:
+ | 00 : Seconds
+ | 01 : Alarm Seconds
+ | 02 : Minutes
+ | 03 : Alarm Minutes
+ | 04 : Hours
+ | 05 : Alarm Hours
+ | 06 : Day of week (1..7)
+ | 07 : Date of Month
+ | 08 : Month
+ | 09 : Year (32H = Century)
+ | 0A : Status Register A : Bit 7 = 1 Update in progress
+ | 0B : Status Register B : Bit 5 = 1 Alarm Interrupt enabled
+ | Bit 0 = 1 Sommerzeit (Ende Mai..Ende Okt.!)
+ | 0C : Status register C : Bit 7 = 1 Interrupt occured
+ | 0D : (Read!) Bit 7 = 1 Power Good
+ | RAM-Adressen:
+ | 0E : Diagnostic Status Byte
+ | D7 : 1 = RTC lost power
+ | D6 : 1 = CMOS Checksum wrong
+ | D5 : 1 = Primary Display not set/No Diskette attached
+ | D4 : 1 = Memory Size miscompare (Vorhanden <> Setup-angegeben)
+ | D3 : 1 = Fixed Disk (Drive C) not ok
+ | D2 : 1 = RTC Time/Status nicht gltig
+ | 0F : Shutdown Status Byte (Restart Code)
+ | 0 = Power on Reset
+ | 9 = Enter Real Mode:
+ | TESTPORT = 32, Stack (SS=0469,SP=0467) RET-Adr., PUSHA, ES, DS
+ | 10 : Diskette configuration:
+ | D4..D7 : 0 = Not installed
+ | 1 = 48 tpi (double sided) Drive A
+ | 2 = 96 tpi (high capacity)
+ | D0..D3 : 0 = Not installed
+ | 1 = 48 tpi (double sided) Drive B
+ | 2 = 96 tpi (high capacity)
+ | 12 : Fixed Disk configuration:
+ | D4..D7 : 0 = Not installed
+ | 1..14 Tabelle Drive C
+ | 15 = Typ 16..47 spezifiziert
+ | D0..D3 : 0 = Not installed
+ | 1..14 Tabelle Drive D
+ | 15 = Typ 16..47 spezifiziert
+ |
+ |
+ | 14 : Equipment Byte (only for Power on Diagnostics)
+ | D6/D7 : 0 = 1 Floppy
+ | 1 = 2 Floppys
+ | D4/D5 : 0 = No Primary Display
+ | 1 = Color 40 Zeichen
+ | 2 = Color 80 Zeichen
+ | 3 = Monochrome
+ | D1 : 1 = Mathe Coprozessor installed
+ | D0 : 1 = Disk drives are installed
+ |
+ | 15/16 : Base Memory Size (in KB)
+ | 15 = low, 16 = high
+ |
+ | 17/18 : Expansion Memory Size (in KB)
+ | 17 = low, 18 = high
+ |
+ | 2E/2D Checksum der Adressen 10..20
+ | 2E = high, 2F = low
+ |
+ | 30/31 : Expansion Memory Size (in KB ber ersten 1MB)
+ | 30 = low, 31 = high
+ |
+ | 32 : Date Century Byte (19)
+ |
+ | 33 : Information Flag
+ |
+ 71 | CMOS-Daten (Read/Write)
+ |
+ | Memory Mapper 74LS612
+ 80 | Test-Port (Read/Write) Fehlerstatus der letzten Testoperation
+ 81 | Channel 2 DMA-Pageregister
+ 82 | Channel 3 DMA-Pageregister
+ 83 | Channel 1 DMA-Pageregister
+ 84 | frei
+ 85 | frei
+ 86 | frei
+ 87 | Channel 0 DMA-Pageregister
+ 88 | frei
+ 89 | Channel 6 DMA-Pageregister
+ 8A | Channel 7 DMA-Pageregister
+ 8B | Channel 5 DMA-Pageregister
+ 8C | frei
+ 8D | frei
+ 8E | frei
+ 8F | Refresh Register
+ |
+ | Interrupt-Controller 2 (Slave) 8259, siehe Datenblatt
+ A0 | Write: ICW1, OCW2, OCW3, Read: ISR, IRQ-Level (Je nach Zustand)
+ A1 | Write: ICW2, ICW3, ICW4, OCW1, Read: IMR (Je Nach Zustand)
+ |
+ | DMA Controller 2 (8237A-5) fr Wordtransfers (Kanal 5..7)
+ C0 | Wordadresse (start/current) Kanal 4 (Kaskade fr Controller 1)
+ C2 | Wordcount Kanal 4
+ C4 | Wordadresse (start/current) Kanal 5 (frei)
+ C6 | Wordcount Kanal 5 (Pageregister 8BH)
+ C8 | Wordadresse (start/current) Kanal 6 (frei)
+ CA | Wordcount Kanal 6 (Pageregister 89H)
+ CC | Wordadresse (start/current) Kanal 7 (frei)
+ CE | Wordcount Kanal 7 (Pageregister 8AH)
+ D0 | Read: DMA-Status (D4..D7:1 = DREQ liegt an, D0..D3:0 = Kanal Busy)
+ | Write: DMA-Command:
+ | D0 1 = memory<-->memory transfer enabled
+ | D1 Falls D0 = 1: 1 = Kanal 4 Adresse INCR/DECR, 0 = Adr. unver„ndert
+ | D2 1 = DMA-Control enabled
+ | D3 1 = R/W-Signal verkrzt
+ | D4 0 = Feste Kanalprios, 1 = Kanalprios rotieren
+ | D5 Falls D3 = 0, 1 = verz”gertes R/W-Signal, 0 = verl„ngertes R/W
+ | D6 1 = DREQ active-low, 0 = DREQ active-high
+ | D7 1 = DACK active-high, 1 = DACK active-low
+ D2 | Read/Write: Anforderungsregister
+ | D1, D0 = Nummer des aktiven DMA-Kanals
+ | D2 1 = DMA-Transfer anstossen, (D0/D1 = Kanalnummer)
+ | 0 = DMA-Transfer wurde per Hardware angestossen
+ D4 | Read/Write : Single Mask Register Bit
+ | D0..D3 fr jeden Kanal: 1 = DREQ gesperrt, 0 = DREQ freigegeben
+ D6 | Write: Mode-Register
+ | D1, D0 bestimmen den Kanal auf den sich D2..D7 beziehen (4..7)
+ | D3, D2 (falls D6=D7=1 (Kaskade) ohne Bedeutung)
+ | 0 0 Prfzyklen
+ | 0 1 Write in Memory
+ | 1 0 Read aus Memory
+ | 1 1 Illegal
+ | D4 1 = Autorepeat
+ | D5 1 = DECR Adressen, 0 = INCR Adressen
+ | D7, D6
+ | 0 0 Polling
+ | 0 1 Cycle Steal
+ | 1 0 Burst Mode
+ | 1 1 Kaskadierter Controller
+ D8 | Clear Byte Pointer Flip-Flop
+ DA | Read: Temporary-Register, Write: Master Clear
+ DC | Clear Mask Register
+ DE | Write: All Mask Register
+ |
+ | Coprozessor
+ F0 | Clear Coprozessor Busy
+ F1 | Reset Coprozessor (mit D0..D7 = 0) und in Real Mode bringen)
+ |
+ F8 | Coprozessor Ports (vom 80286 vorgegeben)
+ ...|
+ FF |
+ |
+-----+---------------------------------------------------------------------
+ |
+ | Harddisk WD1010
+01F0 | Read/Write: Daten (am besten per DMA uebertragen)
+01F1 | Write: Taskfile Byte 1 (Write Precomp DIV 4, 6 Bit)
+ | Read : Error Register
+ | D0..D7 <> 1 : Fehler aufgetreten
+01F2 | Write: Taskfile Byte 2 (Sector Count 8 Bit)
+01F3 | Write: Taskfile Byte 3 (Sector Number 6 Bit)
+01F4 | Write: Taskfile Byte 4 (Cylinder low 8 Bit)
+01F5 | Write: Taskfile Byte 5 (Cylinder high 2 Bit D6,D7)
+01F6 | Write: Taskfile Byte 6
+ | D0..D3 = Head
+ | D4 : 0 = Drive C, 1 = Drive D
+ | D5 : 1 = 512 Bytes/Sektor, 0 = 256 Bytes/Sektor
+ | D6 :
+ | D7 : 1 = ECC versuchen
+01F7 | Write: Taskfile Byte 7 (Commandbyte, Retries)
+ | D0 : 1 = No Retries
+ | D1 : 1 = 4 ECC Bytes uebrtragen
+ | D2 :
+ | D3 :
+ | CMD: 7654 Funktion
+ | 0000
+ | 0001 Recalibrate
+ | 0010 Read
+ | 0011 Write
+ | 0100 Verify
+ | 0101 Format Taskfile Byte 3: Gap
+ | 0110
+ | 0111 Seek
+ | 1000
+ | 1001 D0 = 1: Set Parameters, D0 = 0 : Diagnostics
+ | 1010
+ | 1011
+ | 1100
+ | 1101
+ | 1110
+ | 1111
+ | Read : Status Register
+ | D7 : 1 = BUSY
+ | D6 : 1 = Not ready
+ | D5 : Write fault
+ | D4 : Seek not complete
+ | D3 : 1 = Request Data
+ | D2 : 1 = Data corrected
+ | D1 : 1 =
+ | D0 : 1 =
+01F8 | Datenport Read/Write
+01F9 | Write: Reset
+ | Read: Statusport
+01FA | Write: Select
+01FB | Write: DMA/IRQ Maskenregister
+ |
+ | Game Connector
+0200 |
+0201 | Write: Start Monoflops
+ | Read:
+ | D0..D3 : Ausg„nge der 4 Monoflops Zeit = (24.2 + 0.011 * R(kOhm))us.
+ | D4..D7 : Ausl”setasten (nicht entprellt)
+0202 | Nicht verwendet, aber ausdekodiert
+ ... |
+0207 |
+ |
+ | Printer 2 (LPT2)
+0278 | Write: Daten (Read latched write data)
+0279 | Read/Write:
+ | D3 : -ERROR
+ | D4 : -SLCT in
+ | D5 : PE
+ | D6 : -ACK
+ | D7 : BUSY
+027A | D0 : -STROBE
+ | D1 : -AUTOFEED
+ | D2 : INIT
+ | D3 : -SLCT out
+ | D4 : IRQ Mask
+027B | N.C.
+ ... |
+027F |
+ |
+02F8 | RS232C Adapter (COM2) wie COM1 (03F8..03FF)
+... | Generiert IRQ 3
+02FF |
+ |
+0300 | Prototype Card
+ ... |
+031F |
+ |
+ | Printer 1 (LPT1, wie 03B8..03BA)
+0378 | Write: Daten (Read latched write data)
+0379 | Read/Write:
+ | D3 : -ERROR
+ | D4 : -SLCT in
+ | D5 : PE
+ | D6 : -ACK
+ | D7 : BUSY
+037A | D0 : -STROBE
+ | D1 : -AUTOFEED
+ | D2 : INIT
+ | D3 : -SLCT out
+ | D4 : IRQ Mask
+037B | N.C.
+ ... |
+037F |
+ |
+ | SDLC, bisync 2
+ | 0380..0383 = 8255 : Parallel Ports
+0380 | Port A - Read
+ | D0 : 0 = Rufzeichen liegt an (RI)
+ | D1 : 0 = Tr„gerfrequenzkennung liegt an (DCD)
+ | D2 : TXCLK (Diagnostic)
+ | D3 : 0 = Sendebereitschaft liegt an (CTS)
+ | D4 : RXCLK (Diagnostic)
+ | D5 : 1 = Modemstatus„nderung (DSR changed)
+ | D6 : 1 = Timer 2 Output active
+ | D7 : 1 = Timer 1 Output active
+0381 | Port B - Write
+ | D0 : 0 = Baudrateselektor ein
+ | D1 : 0 = Auswahlbereitschaft ein
+ | D2 : 0 = Prfung einschalten
+ | D3 : 1 = Reset Modemstatus„nderungs Flip-Flop
+ | D4 : 1 = Reset 8273
+ | D5 : 1 = Timer 2 durchschalten
+ | D6 : 1 = Timer 1 durchschalten
+ | D7 : 1 = IRQ 4 aktivieren
+0382 | Port C - D0..D3 Write, D4..D6 Read, D7 N.C.
+ | D0 : 1 = Internen Takt durchschalten
+ | D1 : 1 = Externen Takt durchschalten
+ | D2 : 1 = Elektronischer Test
+ | D3 : 0 = IRQ 3 + 4 durchschalten
+ | D4 : RX Daten
+ | D5 : Timer 0 Output
+ | D6 : 0 = Prfanzeige aktiv
+0383 | 8255 Modussteuerregister
+ |
+ | 0384..0387 = 8253: Timer
+0384 | Timer 0 low/high. Ausgang ist Eingang von Timer 2 (Bit 5 in 0382)
+0385 | Timer 1 low/high. Timeout Counter
+0386 | Timer 2 low/high. Timeout Counter
+0387 | 8254 Modusregister
+ |
+ | 0388..038C = 8273 SDLC Controller
+0388 | Read: Statusregister
+ | Write: Befehlsregister
+0389 | Read: Ergebnisregister
+ | Write: Parameterregister
+038A | DMA/Interrupt Register fr Empfangen
+038B | DMA/Interrupt Register fr Senden
+038C | Datenport Read/Write
+ | 8273 Registerbeschreibung:
+ | Moderegister (Bit D6..D7 w„hlt Counter auf den sich D0..D5 beziehen)
+ | D0 : 0 = Counter 16 Bit Bin„r
+ | 1 = Counter 4 Dekad. BCD
+ | D1..D3 : Modus 0..5 (D7 = 1)
+ | D4..D5 : D54
+ | 00 = Counter stop
+ | 01 = read/write highbyte
+ | 10 = read/write lowbyte
+ | 11 = erst low, dann highbyte read/write
+ | D6..D7 : Counter ausw„hlen (00=0, 01=1, 10=2, 11=3)
+ |
+ | Betriebsarten Register
+ | D0 : 1 = Kennzeichenmodus
+ | D1 : 1 = Sync fr 2. Header
+ | D2 : 1 = Buffer Modus
+ | D3 : 1 = Vorzeitigen Sendeinterrupt aktivieren
+ | D4 : 1 = EOP IRQ aktivieren
+ | D5 : 1 = MDLC Abbruch aktivieren
+ |
+ | Serial I/O Moderegister
+ | D0 = 1 : NRZI Modus
+ | D1 = 1 : Clock Loopback
+ | D2 = 1 : Data Loopback
+ |
+ | Transmit Moderegister
+ | D0 = 1 : Datenbertragung unterbrechen
+ |
+ | Singlebit Delay Modusregister
+ | D7 = 1 : Singlebit delay aktivieren
+ |
+038D | N.C.
+ ... |
+038F |
+ |
+ |
+03A0 | bisync 1
+ ... | wie 0380..038F
+03AF |
+ |
+ | Hercules komp. Mono/Graphik Karte
+ | Mit * gekennzeichnete Bits sind nicht auf allen Karten verfgbar.
+03B4 | Indexport 6845 (Videocontroller)
+ | Write: Register Nummer 0..17
+03B5 | Datenport 6845 : Register (Write only, sofern nichts anderes vermerkt)
+ | 0: D0..D7 = Anzahl Zeichen pro Zeile -1 (Horizontalfreq.)
+ | 1: D0..D7 = Anzahl dargestellte Zeichen pro Zeile
+ | 2: D0..D7 = Zeichenposition-1 des HSYNC Signals
+ | 3: D0..D3 = Breite-1 des HSYNC Signals in Zeichen
+ | 4: D0..D6 = Anzahl Zeichenzeilen (Vertikalfreq. 50/60 Hz)
+ | 5: D0..D4 = Bilddurchlauf Abgleich in Mikrozeilen
+ | 6: D0..D6 = Anzahl dargestellte Zeichenzeilen
+ | 7: D0..D6 = Zeichenzeile, bei der VSYNC Signal beginnt
+ | 8: D0 = 0 : Kein Zeilensprungverfahren
+ | = 1 und D1 = 0 : Zeilensprungverfahren, normale Dichte
+ | =1 und D1 = 1 : Zeilensprungverfahren, doppelte Dichte
+ | 9: D0..D4 = Mikrozeilen/Zeichen-1
+ | 10: D0..D4 = Startmikrozeile des Cursors
+ | D5/D6 = 0 : Cursor normal, blinkend
+ | 1 : Cursor unsichtbar
+ | 2 : Cursor blinkt mit 1/16 der Vertikalfrequenz
+ | 3 : Cursor blinkt mit 1/32 der Vertikalfrequenz
+ | 11: D0..D4 = Endmikrozeile des Cursors
+ | 12: D0..D5 = Highbits der Speicherstartadresse
+ | 13: D0..D7 = Lowbits der Speicherstartadresse
+ | 14: D0..D5 = Highbits der aktuellen Cursorspeicheradresse (Read/Write)
+ | 15: D0..D7 = Lowbits der aktuellen Cursorspeicheradresse (Read/Write)
+ | 16: D0..D5 = Highbits der Speicherstelle, bei der LPSTB ausgel”st
+ | 17: D0..D7 = Lowbits der Speicherstelle, bei der LPSTB ausgel”st
+03B8 | Write: Display Mode Control Port
+ | D1: 6845 muss nach einer Žnderung dieses Bits neu initialisiert werdem
+ | 0 : Text Mode (Zeichen 9 x 14, 0.5625us/Zeichen)
+ | 1 : Graphik Mode (Zeichen 4 x 16, 1us/Zeichen Horizontal)
+ | D3: 0 : Screen blanked (Bei Init 6845 auf 0 setzen)
+ | 1 : Screen activated
+ | D5: 0 : Textblinker (Attributbit 7 = 1) ausgeschaltet
+ | 1 : Textblinker angeschaltet
+ |*D6: 0 : 80 Spalten Modus (nur CT6040S)
+ | D7: 0 : Graphikpage 0 (B0000..B7FFF)
+ | 1 : Graphikpage 1 (B8000..BFFFF)
+03B9 |*Write: Set Lightpen Flip-Flop (Eingang zum 6845 LPSTB)
+03BA | Read: Display Status Port
+ | D0: 1 : HSYNC (Horizontal Retrace) l„uft gerade
+ |*D1: Ausgang des Lightpen Flip-Flop (LPSTB-Eingang 6845)
+ |*D2: 1 : Lightpen Taster gedrckt (Pin 3 des LP-Steckers)
+ | D3: Ausgang VIDEO zum Monitor (Dots on/off)
+ | D7: 1 : VSYNC (Vertical Retrace) l„uft gerade
+03BB |*Write: Reset Lightpen Flip-Flop
+03BC | Read: Latched Write Data
+ | Write: Printer Data D0..D7 (pin 2..9)
+03BD | Read: Printer Status Port
+ | D3:0 : Printer Error (ERROR, pin 15)
+ | D4:0 : Printer deselected (SLCT, pin 13)
+ | D5:1 : Paper end (PE, pin 12)
+ | D6:1 : Ready for more (ACK, pin 10)
+ | D7:0 : Printer is busy (BUSY, pin 11)
+03BE | Read (Latched Write Data)
+ | Write: Printer Control Port
+ | D0: Printer Strobe (0 = Strobe to Printer, 1 = Release Strobe) pin 1
+ | D1: 0 = Autolinefeed after CR, 1 = CR, LF (Programm) pin 14
+ | D2: 0 = Init Printer (pin 16), 1 = Release Init
+ | D3: 0 = Deselect Printer (SLCT, pin 17), 1 = Select Printer
+ | D4: 0 = Mask IRQ7 off, 1 = IRQ7 (ACK Flanke) mask on
+03BF |*Read LPSTB extension Adress (Im Graphikmodus)
+ |*D0..D3 = xpos Dots MOD 16
+ |*D4: Dotclk 74112 (U58)
+ |*D5..D6 = ypos Dots MOD 4
+ |*D7: Aktive Graphikseite
+ | Write: Configuration Switch
+ | D0: Bit 1 03B8 AND-Mask (0: Kein Graphikmode einschaltbar)
+ | D1: Bit 7 03B8 AND-Mask (0: Keine Graphikseite 1 einschaltbar)
+ | (falls 0: B8000..BFFFF auf Graphikkarte abgeschaltet)
+ |
+ |
+ | CGA (Color Graphics Adapter)
+03D4 | 6845 Index Register (siehe 03B4)
+03D5 | 6845 Data Register (siehe 03B5)
+03D8 |
+ | D0 : 1 = 80x25
+ | 0 = 40x25
+ | D1 : 1 = 320x200 Graphikmodus
+ | 0 = Alphanumerisch Text
+ | D2 : 1 = S/W
+ | 0 = Color
+ | D3 : 0 = Screen blanked
+ | D4 : 1 = 640x200 S/W Modus
+ | D5 : 1 = Blinken statt Intensit„tsbit (Bit 3)
+ | 0 = Intensit„tsbit fr 16 statt 8 Farben (2 Helligkeiten)
+03D9 | Write: Paletteregister
+ | D0 : Blau
+ | D1 : Grn
+ | D2 : Rot
+ | D3 : Intensity
+ | D4 : 1 = Intensivfarbsatz im Graphikmodus
+ | D5 : 1 = Farbsatz 320x200 Modus aktivieren
+03DA | Read: Statusregister
+ | D0 = HSYNC (Anzeige aktiviert)
+ | D1 = Lightpen Strobe Flip-Flop Ausgang
+ | D2 = Lightpentaster gedrckt
+ | D3 = VSYNC
+03DB | Write: Reset Lightpen Flip-Flop
+03DC | Write: Set Lightpen Flip-Flop
+ |
+ |
+ | Diskettencontroller uPD 765
+03F2 | DIGOR (Digital Output Register) - Write
+ | D0..D1 : Laufwerk 00 = A, 01 = B, 10 = C, 11 = D
+ | D2 : 0 = RESET Signal aktiviert, 1 = RESET aus
+ | D3 : 1 = DMA und IRQ aktivieren
+ | D4..D7 : 1 = Motor fr Laufwerk A..D einschalten
+03F4 | Hauptstatusregister - Read
+ | D0..D3 : Laufwerk A..D seeked noch
+ | D4 : 1 = BUSY
+ | D5 : 1 = DMA nicht aktiv
+ | D6 : 1 = Prozessor liest Datenregister, 0 = Prozessor schreibt Datenr.
+ | D7 : 1 = Register bereit fr Datentransfer
+03F5 | Diskettensteuerungsdatenregister - Write
+ | D0..D7 : Command
+ | C5 = write (hd+drv.b,cyl.b,frst_sec.b,byte_p_sec.b,last_sec.b,
+ | gap.b, dtl.b)
+ | E6 = read (hd+drv.b,cyl.b,frst_sec.b,byte_p_sec.b,last_sec.b,
+ | gap.b, dtl.b)
+ | 4D = format (byte_p_sec.b, last_sec.b, gap.b, dtl.b)
+ | hd+drv.b : D5..D2 = Head, D1..D0 = Drive
+ | Nach jedem Kommando kann solange BUSY=1 ist, ein Statusbyte bei
+ | 03F5 abgeholt werden (warten bis D6=1 und D7=1 in 03F4).
+ | Status:
+ | D7 = rnf, timeout
+ | D6
+ | D5 = crc error
+ | D4 = dma error
+ | D3
+ | D2 = rnf
+ | D1 = write protected
+ | D0 = bad addr mark
+ |
+03F6 | Harddisk Control Register
+ | D7 : 1 = Disable Retries
+ | D6 : 1 = Kein ECC bei Fehler
+ | D5 :
+ | D4 :
+ | D3 : 1 = Falls anz. Heads > 8
+ | D2 : 1 = RESET KONGO CARD (wieder auf 0 setzen)
+ | D1 :
+ | D0 :
+ |
+03F7 | DIGIR (Digital Input Register) - Read
+ | D7 : 1 = Media changed
+ |
+ |
+ | RS232C Adapter 8250 (COM1) Generiert IRQ 4
+03F8 | DLAB = 0
+ | Read: Receivebuffer (RBR = receive buffer register)
+ | Write: Transmitbuffer (THR = transmit holding register)
+ | DLAB = 1 : Read/Write: Divisor Latch LSB Read/Write
+03F9 | DLAB = 1 : Read/Write: Divisor Latch MSB Read/Write
+ | Baud = 115200/divisor (clk = 1.8432 MHz DIV 16)
+ | DLAB = 0 : Interrupt Enable Register (IER) Read/Write
+ | Bit = 1: Interrupt enabled, Bit=0: Interrupt disabled
+ | D0: Receive Char Interrupt
+ | D1: Transmitter empty Interrupt
+ | D2: Receiver Line Status Interrupt (Framing, Parity, Overrun, Break)
+ | D3: Modem Status Interrupt (CTS, DSR, RI, DCD changed)
+ | D4..D7 = 0
+03FA | Interrupt Identification Register (IIR) Read/Write
+ | Prios: 1=Receiver Line Status, RX available, THR empty, 4=Modem Status
+ | D0 = 0: Interrupt pending
+ | D1..D2: Interrupt source (falls D0 = 0)
+ | Prio D21 Source Cleared by
+ | 1 01 Overrun, Parity, Framing, Break Read LSR
+ | 2 10 Receive data available Read RBR
+ | 3 11 THR empty Read IIR oder Write THR
+ | 4 00 CTS, DSR, RI, RLSD changed Read MSR
+03FB | Line Control Register (LCR) Read/Write
+ | D0..D1 : Wordlength (00=5, 01=6, 10=7, 11=8 Datenbits)
+ | D2 : 0 = 1 Stopbit
+ | 1 = 1.5 Stopbits, falls 5 Datenbits, 2 Stopbits sonst
+ | D3 : 1 = Parity generate & check enabled
+ | D4 : Falls D3 = 1 : 0 = Odd Parity, 1 = Even Parity
+ | D5 : Falls D3 = 1 und D5 = 1: 0 = Parity Mark, 1 = Parity Space
+ | D543 Funktion
+ | 000 Kein Parity
+ | 001 Odd Parity
+ | 010 Kein Parity
+ | 011 Even Parity
+ | 100 Kein Parity
+ | 101 Parity stuck on (1 = Mark)
+ | 110 Kein Parity
+ | 111 Parity stuck off (0 = Space)
+ | D6 : 1 = Send Break (Muss wieder auf 0 gesetzt werden)
+ | D7 : DLAB = 1 : Baudrate Divisor Latch Access ueber 0XF8/0XF9
+03FC | Modem Control Register (MCR)
+ | D0: 1 = DTR aktiv
+ | D1: 1 = RTS aktiv
+ | D2: 1 = OUT1 aktiv (Pin 34)
+ | D3: 1 = OUT2 aktiv (Pin 31)
+ | D4: 1 = Diagnostic Mode:
+ | TX-Out --> RX-In (Local Loopback)
+ | RTS->CTS, DTR->DSR, OUT1->DCD, OUT2->RI internally connected
+ | Interupts lassen sich mit D0..D3 des MCR, bzw. D0..D5 des LSR
+ | ausl”sen (dann Bits wieder auf 0 und MCR auf 0).
+03FD | Line Status Register (LSR) Read/Write
+ | D0: 1 = Character Received Interrupt 2
+ | D1: 1 = Receiver Overrun Error Interrupt 1
+ | D2: 1 = Parity Error Interrupt 1
+ | D3: 1 = Framing Error Interrupt 1
+ | D4: 1 = Break detected Interrupt 1
+ | D5: 1 = Transmitter Holding register empty Interrupt 3
+ | D6: 1 = Transmitter complete cleared (THR & TSR empty)
+ | D7: 0
+03FE | Modem Status Register (MSR) Read/Write
+ | D0: 1 = CTS changed since last MSR read Interrupt 4
+ | D1: 1 = DSR changed since last MSR read Interrupt 4
+ | D2: 1 = RI changed from active to inactive Interrupt 4
+ | D3: 1 = DCD changed since last MSR read Interrupt 4
+ | D4: CTS input (Diagnostic: RTS)
+ | D5: DSR input (Diagnostic: DTR)
+ | D6: RI input (Diagnostic: OUT1)
+ | D7: DCD input (Diagnostic: OUT2)
+03FF | Reserviert
+ |