From 98cab31fc3659e33aef260efca55bf9f1753164c Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 11 Feb 2019 11:49:19 +0100 Subject: Add source files from Michael --- system/shard-x86-at/7/doc/8039.PRT | 569 ++++++++++++++++++++++++++++ system/shard-x86-at/7/doc/BIOSINT.TXT | 305 +++++++++++++++ system/shard-x86-at/7/doc/CONTROLS.ELA | 76 ++++ system/shard-x86-at/7/doc/PORTS.PRT | 658 +++++++++++++++++++++++++++++++++ 4 files changed, 1608 insertions(+) create mode 100644 system/shard-x86-at/7/doc/8039.PRT create mode 100644 system/shard-x86-at/7/doc/BIOSINT.TXT create mode 100644 system/shard-x86-at/7/doc/CONTROLS.ELA create mode 100644 system/shard-x86-at/7/doc/PORTS.PRT (limited to 'system/shard-x86-at/7/doc') 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 + | -- cgit v1.2.3