diff options
Diffstat (limited to 'system/shard-z80-altos/6/src')
| -rw-r--r-- | system/shard-z80-altos/6/src/ALTOSSHD.ASM | 1786 | 
1 files changed, 1786 insertions, 0 deletions
| diff --git a/system/shard-z80-altos/6/src/ALTOSSHD.ASM b/system/shard-z80-altos/6/src/ALTOSSHD.ASM new file mode 100644 index 0000000..5df69fb --- /dev/null +++ b/system/shard-z80-altos/6/src/ALTOSSHD.ASM @@ -0,0 +1,1786 @@ +ADDR B1 B2 B3 B4 ASCII INSTR PARAMETER  COMMENT
 +0100 C3 F9 01    ...   JP    01F9       ; Init Shard + Start EUMEL0
 +0103 C3 8C 0B    ...   JP    0B8C       ; LIMIT
 +0106 C3 2A 01    .*.   JP    012A       ; OUTPUT
 +0109 C3 4B 01    .K.   JP    014B       ; BLOCKIN
 +010C C3 53 01    .S.   JP    0153       ; BLOCKOUT
 +010F C3 5B 01    .[.   JP    015B       ; IOCONTROL
 +0112 C3 AC 0B    ...   JP    0BAC       ; SYSEND
 +0115 C3 90 0B    ...   JP    0B90       ; SCHINF
 +0118 C3 94 0B    ...   JP    0B94       ; SCHACC
 +011B C3 89 0B    ...   JP    0B89       ; LONGMOVE
 +011E 06                                 ; SHDVER = 6 
 +011F 00 00                              ; ID 4
 +0121 00 00                              ; ID 5
 +0123 00 00                              ; ID 6
 +0125 00 00                              ; ID 7
 +0127 C3 63 01    .c.   JP    0163       ; I/O-Setzen fuer 'putboot' 
 +012A DD E5       ..    PUSH  IX         ; OUTPUT (Kanal A, Length BC, 
 +012C FD E5       ..    PUSH  IY         ;         Addr HL, Ausgegeben BC, 
 +012E E5          .     PUSH  HL         ;         Carry SET : Alles raus)
 +012F D5          .     PUSH  DE
 +0130 F5          .     PUSH  AF 
 +0131 E5          .     PUSH  HL 
 +0132 CD A6 01    ...   CALL  01A6       ; Zugriff auf Kanaltabelle --> IY/DE
 +0135 D5          .     PUSH  DE         ; DE --> IX (Addr. von Startaddr.) 
 +0136 DD E1       ..    POP   IX 
 +0138 EB          .     EX    DE,HL 
 +0139 5E          ^     LD    E,(HL)     ; (Startaddresse) --> DE 
 +013A 23          #     INC   HL 
 +013B 56          V     LD    D,(HL) 
 +013C E1          .     POP   HL         ; Textstartaddresse 
 +013D CD 49 01    .I.   CALL  0149       ; = JP (DE) Routine starten 
 +0140 D1          .     POP   DE         ; ehem. Returnaddresse loeschen
 +0141 7A          z     LD    A,D 
 +0142 D1          .     POP   DE 
 +0143 E1          .     POP   HL 
 +0144 FD E1       ..    POP   IY 
 +0146 DD E1       ..    POP   IX 
 +0148 C9          .     RET 
 +0149 D5          .     PUSH  DE 
 +014A C9          .     RET              ;----------------------------------- 
 +014B DD E5       ..    PUSH  IX         ; BLOCKIN 
 +014D DD 21 02 00 .!..  LD    IX,0002    ; Aufgabe 2
 +0151 18 18       ..    JR    016B       ;----------------------------------
 +0153 DD E5       ..    PUSH  IX         ; BLOCKOUT
 +0155 DD 21 03 00 .!..  LD    IX,0003    ; Aufgabe 3
 +0159 18 10       ..    JR    016B       ;---------------------------------- 
 +015B DD E5       ..    PUSH  IX         ; IOCONTROL
 +015D DD 21 04 00 .!..  LD    IX,0004    ; Aufgabe 4
 +0161 18 08       ..    JR    016B       ;---------putboot Aufg. 5---------- 
 +0163 DD E5       ..    PUSH  IX         ; 
 +0165 DD 21 05 00 .!..  LD    IX,0005    ; Aufgabe 5
 +0169 18 00       ..    JR    016B       ;--------------------------------- 
 +016B FD E5       ..    PUSH  IY         ; Je nach IX Kanal-Aufgabe (I/O)
 +016D D5          .     PUSH  DE 
 +016E E5          .     PUSH  HL 
 +016F CD 79 01    .y.   CALL  0179       ; Register wurden gerettet
 +0172 E1          .     POP   HL 
 +0173 D1          .     POP   DE 
 +0174 FD E1       ..    POP   IY 
 +0176 DD E1       ..    POP   IX 
 +0178 C9          .     RET              ;----------------------------------- 
 +0179 E5          .     PUSH  HL 
 +017A D5          .     PUSH  DE 
 +017B CD A6 01    ...   CALL  01A6       ; Kanaladdr --> DE, IY
 +017E DD 19       ..    ADD   IX,DE      ; DE = 4. + 5. Byte + Aufgabennummer
 +0180 DD 6E 00    .n.   LD    L,(IX+00)  ; Byte zur Aufgabe 
 +0183 26 FF       &.    LD    H,FF 
 +0185 D5          .     PUSH  DE 
 +0186 DD E1       ..    POP   IX         ; IX = Addresse des tabellenentries
 +0188 19          .     ADD   HL,DE      ; 
 +0189 59          Y     LD    E,C        ; BC = code1
 +018A 78          x     LD    A,B 
 +018B B7          .     OR    A 
 +018C 28 05       (.    JR    Z,0193     ; EUMEL-Funktion 0<=code1<256
 +018E 3C          <     INC   A 
 +018F 28 02       (.    JR    Z,0193     ; Shard-Funktion -256<=code1<0
 +0191 1E FF       ..    LD    E,FF       ; -1 = Illegale Funktion
 +0193 7E          ~     LD    A,(HL) 
 +0194 23          #     INC   HL 
 +0195 BB          .     CP    E          ; Addresse mit der Funktionsnummer 
 +0196 28 07       (.    JR    Z,019F     ; suchen 
 +0198 3C          <     INC   A          ; FF=Tabellenende 
 +0199 28 04       (.    JR    Z,019F 
 +019B 23          #     INC   HL 
 +019C 23          #     INC   HL 
 +019D 18 F4       ..    JR    0193       ; naechste Funktionsnummer 
 +019F 5E          ^     LD    E,(HL) 
 +01A0 23          #     INC   HL 
 +01A1 56          V     LD    D,(HL)     ; Sprung zur Addresse, die in der 
 +01A2 EB          .     EX    DE,HL      ; Tabelle steht 
 +01A3 D1          .     POP   DE         ; DE= code2 (Eingang HL)
 +01A4 E3          .     EX    (SP),HL 
 +01A5 C9          .     RET              ; --------------------------------- 
 +01A6 C5          .     PUSH  BC         ;   Kanalinfos aus Tabelle --> IY/DE
 +01A7 11 05 00    ...   LD    DE,0005    ; Entrylaenge in der Tabelle
 +01AA 21 12 02    !..   LD    HL,0212    ; Tabellenanfang (Kanaele)
 +01AD 46          F     LD    B,(HL)     ; Erstes Byte ist Tabellenlaenge
 +01AE 23          #     INC   HL 
 +01AF BE          .     CP    (HL)       ; Erstes Entrybyte ist Kanalnummer
 +01B0 28 03       (.    JR    Z,01B5     ; Bis Kanal gefunden
 +01B2 19          .     ADD   HL,DE 
 +01B3 10 FA       ..    DJNZ  01AF 
 +01B5 23          #     INC   HL         ; 2. u. 3. Byte --> DE
 +01B6 5E          ^     LD    E,(HL) 
 +01B7 23          #     INC   HL 
 +01B8 56          V     LD    D,(HL) 
 +01B9 D5          .     PUSH  DE         ; 2. u. 3. Byte --> IY 
 +01BA FD E1       ..    POP   IY 
 +01BC 23          #     INC   HL         ; 4. u. 5. Byte --> DE
 +01BD 5E          ^     LD    E,(HL) 
 +01BE 23          #     INC   HL 
 +01BF 56          V     LD    D,(HL) 
 +01C0 C1          .     POP   BC         ; gerettetes BC zurueck
 +01C1 C9          .     RET              ;----------------------------------
 +;============================= Parameterkanal ============================== 
 +01C2 01 5F 06                           ; 1, IOCONTROL "typ"
 +01C5 02 50 06                           ; 2, IOCONTROL "frout"
 +01C8 05 46 06                           ; 5, IOCONTROL "size"
 +01CB 06 ED 01                           ; 6, IOCONTROL "flow"
 +01CE 08 ED 01                           ; 8, IOCONTROL "baud"
 +01D1 09 ED 01                           ; 9, IOCONTROL "bits"
 +01D4 E2 ED 01                           ; -30, IOCONTROL maske f. busystatus
 +01D7 E1 ED 01                           ; -31, IOCONTROL maske f. strobe setz.
 +01DA FF 4C 06                           ; -1, IOCONTROL ill.
 +01DD FE 86 0B                           ; -2, Aufg. 5 : kanal init
 +01E0 FF 55 06                           ; -1, Aufg. 5 : BC = 1
 +01E3 FF 4C 06                           ; BLOCKIO ill.
 +01E6 59                                 ; Parameterkanal : OUTPUT: 0659 ill. 
 +01E7 06                                 ; 
 +01E8 FD                                 ; BLOCKIN : 01E3
 +01E9 FD                                 ; BLOCKOUT : 01E3
 +01EA DC                                 ; IOCONTROL : 01C2
 +01EB F7                                 ; Aufg. 5 : 01DD
 +01EC 00                                 ; Keine I/O moeglich
 +                                        ; ----- set "flow","bits","baud" --- 
 +01ED 7D          }     LD    A,L        ; Kanal = addressierter kanal
 +01EE 2E 00       ..    LD    L,00       ; 0 = Parameter setzen (code2) 
 +01F0 C3 63 01    .c.   JP    0163       ; Aufgabe 5, L = 0 
 +01F3 7D          }     LD    A,L        ; kanal = addressierter Kanal
 +01F4 2E 01       ..    LD    L,01       ; 1 = Parameter lesen (code2) 
 +01F6 C3 63 01    .c.   JP    0163       ; Aufgabe 5, L = 1
 +01F9 F3          .     DI               ;---------- Init Shard -------------
 +01FA 3E 00       >.    LD    A,00       ; Page 0 = Interruptvektoren
 +01FC ED 47       .G    LD    I,A 
 +01FE 31 00 B0    1..   LD    SP,B000 
 +0201 3E 21       >!    LD    A,21       ; Kanal 0..32 
 +0203 01 FE FF    ...   LD    BC,FFFE    ; Funktion -2 = Kanalinit 
 +0206 3D          =     DEC   A 
 +0207 F5          .     PUSH  AF 
 +0208 CD 63 01    .c.   CALL  0163       ; Kanaele initialisieren (IRQ's) 
 +020B F1          .     POP   AF 
 +020C B7          .     OR    A 
 +020D 20 F4        .    JR    NZ,0203 
 +020F C3 10 1E    ...   JP    1E10       ; Systemstart EUMEL0 bzw. 'putboot' 
 +     -----------------------------------  Entry : Kanal, Puffer, ROUTINETBL 
 +0212 0C                                 ; Tabelle mit 12 Kanaelen
 +0213 20 00 00 E6 01                     ; Parameterkanal, Kein Puffer 
 +0218 00 64 0C 0C 07                     ; Hintergrund 
 +021D 01 CD 0C 7B 02                     ; Kanal 1 .. 6 = seriell
 +0222 02 5B 0D 7B 02                     ; 
 +0227 03 E9 0D 7B 02 
 +022C 04 77 0E 7B 02
 +0231 05 05 0F 7B 02
 +0236 06 93 0F 7B 02 
 +023B 07 BD 0F EA 0A                     ; printer
 +0240 08 C3 0F EA 0A                     ; parallel 1
 +0245 09 C9 0F EA 0A                     ; parallel 2
 +024A 1F CF 0F 7D 06                     ; floppy
 +024F FF 00 00 3F 06                     ; illegal Kanal
 +;======================== Serielle Kanaele =================================
 +0254 01 5F 06                           ; 1, IOCONTROL "typ"
 +0257 02 36 05                           ; 2, IOCONTROL "frout" 
 +025A 05 46 06                           ; 5, IOCONTROL "size"
 +025D 06 F3 01                           ; 6, IOCONTROL "flow"
 +0260 08 F3 01                           ; 8, IOCONTROL "baud"
 +0263 09 F3 01                           ; 9, IOCONTROL "bits"
 +0266 FD D6 02                           ; -3, IOCONTROL "portinfo" 
 +0269 FF 4C 06                           ; -1 ill. 
 +026C 06 2A 03                           ; 6, Aufg .5 : "flow" setzen/info 
 +026F 08 F2 02                           ; 8, Aufg. 5 : "baud" setzen/info
 +0272 09 AA 03                           ; 9, Aufg. 5 : "bits" setzen/info 
 +0275 FE A2 02                           ; -2, Aufg. 5 : Kanal init
 +0278 FF 4C 06                           ; BLOCKIN/BLOCKOUT ill.
 +027B 31                                 ; Seriell : 0431 = OUTPUT 
 +027C 04 
 +027D FD                                 ; BLOCKIN : 0278
 +027E FD                                 ; BLOCKOUT : 0278
 +027F D9                                 ; IOCONTROL : 0251
 +0280 F1                                 ; Aufg. 5 : 026C
 +0281 03                                 ; Typ : Stream I/O 
 +    ; Baudratetabelle : 1. Byte: Bit 7+6 = Vorteiler (Register4) 
 +    ;                      Bit 4 = DIV 256, DIV 16,Bit 5 : Mode (CTC) 
 +    ;                   2. Byte: CTC-Zeitkonstante 
 +0282 40 9C                              ; 50 Baud 
 +0284 40 68                              ; 75 Baud 
 +0286 40 47                              ; 110 baud 
 +0288 E0 E8                              ; 134.5 Baud 
 +028A E0 D0                              ; 150 Baud 
 +028C A0 D0                              ; 300 Baud 
 +028E 60 D0                              ; 600 Baud 
 +0290 60 68                              ; 1200 baud 
 +0292 60 45                              ; 1800 Baud 
 +0294 60 34                              ; 2400 Baud 
 +0296 60 23                              ; 3600 Baud 
 +0298 60 1A                              ; 4800 Baud 
 +029A 60 11                              ; 7200 Baud 
 +029C 60 0D                              ; 9600 Baud 
 +029E 60 07                              ; 19200 Baud 
 +02A0 60 03                              ; 38400 Baud
 +02A2 FD 4E 1A    .N.   LD    C,(IY+1A)  ;------------- "kanal init" -------- 
 +02A5 06 0D       ..    LD    B,0D       ; Commandport in (IY+1A) 
 +02A7 21 C9 02    !..   LD    HL,02C9    ; 13 Bytes ausgeben 
 +02AA ED B3       ..    OTIR             ; An den Commandport schicken
 +02AC FD 5E 1D    .^.   LD    E,(IY+1D)  ; Interruptvektor des Kanals 
 +02AF ED 57       .W    LD    A,I        ; Vektortabellenaddresse High
 +02B1 57          W     LD    D,A 
 +02B2 ED 59       .Y    OUT   (C),E      ; Interruptvektor fuer Kanal 
 +02B4 0E 1E       ..    LD    C,1E       ; Serviceroutine am Pufferende 
 +02B6 06 00       ..    LD    B,00       ; (IY+1E)
 +02B8 FD E5       ..    PUSH  IY 
 +02BA E1          .     POP   HL 
 +02BB 09          .     ADD   HL,BC 
 +02BC 06 04       ..    LD    B,04       ; 4 Interrupt (Vector+Status) 
 +02BE EB          .     EX    DE,HL      ; DE= Serviceroutinenaddresse 
 +02BF 73          s     LD    (HL),E     ; HL = Interruptvektoraddresse 
 +02C0 23          #     INC   HL         ; Serviceroutine eintragen
 +02C1 72          r     LD    (HL),D 
 +02C2 23          #     INC   HL         ; Fuer alle 4 Interrupts einen 
 +02C3 13          .     INC   DE         ; Interrupthandler 
 +02C4 13          .     INC   DE 
 +02C5 13          .     INC   DE 
 +02C6 10 F7       ..    DJNZ  02BF 
 +02C8 C9          .     RET              ;-------- Inittabelle Serielle ----- 
 +02C9 14 44             ; reset ext status IRQs, Clock x16, 1 Stopbit,noparity
 +02CB 03 61             ; Rx 7 Bits, Autoenables (CTS), Receiver enable 
 +02CD 05 EA             ; Tx 8 Bits, DTR = 1, RTS = 1, Transmitter enable 
 +02CF 11 1F             ; kein WAIT/RDY, Vektor incl. Status, alle IRQs an 
 +02D1 03 C1             ; Rx 8 Bits, Keine Autoenables, Receiver enable 
 +02D3 11 1F             ; s.o. 
 +02D5 02                ; Interruptvektor folgt als naechstes Byte
 +02D6 FD 4E 1A    .N.   LD    C,(IY+1A)  ;------"IOCONTROL portinfo -3"------ 
 +02D9 06 01       ..    LD    B,01       ; ^ Status/Commandport
 +02DB 3E 30       >0    LD    A,30 
 +02DD F3          .     DI 
 +02DE ED 41       .A    OUT   (C),B      ; Read-Register 1 waehlen
 +02E0 ED 40       .@    IN    B,(C)      ; Einlesen
 +02E2 ED 79       .y    OUT   (C),A      ; Error Reset = 30H
 +02E4 ED 78       .x    IN    A,(C)      ; Statusregister (0) lesen
 +02E6 FB          .     EI 
 +02E7 E6 AC       ..    AND   AC         ; DCD,CTS,... durchlassen 
 +02E9 4F          O     LD    C,A        ; Lowbyte = Read-Register 1 Bits 
 +02EA 78          x     LD    A,B        ; Highbyte = Read-Register 0 Bits 
 +02EB E6 70       .p    AND   70         ; Nur Error-Bits durchlassen 
 +02ED DD B6 15    ...   OR    (IX+15)    ; Schon vorhandene Fehler dazu
 +02F0 47          G     LD    B,A 
 +02F1 C9          .     RET              ;----------- "baud" -------------- 
 +02F2 01 01 00    ...   LD    BC,0001    ; Rueckmeldung "nicht moeglich" 
 +02F5 CB 7C       .|    BIT   7,H        ; Keine Shard-spezifischen Baudrates 
 +02F7 C0          .     RET   NZ 
 +02F8 7C          |     LD    A,H        ; Schluessel --> A
 +02F9 B7          .     OR    A 
 +02FA C8          .     RET   Z          ; 0 ist ungueltiger Schluessel
 +02FB FD CB 11 4E ...N  BIT   1,(IY+11)  ; Baudrateeinstellung moeglich ? 
 +02FF C8          .     RET   Z          ; nein 
 +0300 0E 00       ..    LD    C,00       ; Rueckmeldung "ok" 
 +0302 CB 45       .E    BIT   0,L        ; 0 = Lesen, 1 = parameter setzen 
 +0304 C0          .     RET   NZ         ; Nur Information, dann fertig 
 +0305 11 80 02    ...   LD    DE,0280    ; Tabelle der Baudrates/Timeconsts 
 +0308 6C          l     LD    L,H 
 +0309 CB 25       .%    SLA   L 
 +030B 26 00       &.    LD    H,00       ; Schluessel * 2 + Tabellenanfang 
 +030D 19          .     ADD   HL,DE 
 +030E 7E          ~     LD    A,(HL)     ; Timeconst 
 +030F E6 C0       ..    AND   C0         ; Taktvorteiler (1,16,32,64) waehlen 
 +0311 4F          O     LD    C,A        ; fuer SIO/DART-Register 4
 +0312 3E 3F       >?    LD    A,3F       ; Nur Clock-Bits (6,7) veraendern 
 +0314 CD 1E 04    ...   CALL  041E       ; Clock x1, x16
 +0317 7E          ~     LD    A,(HL)     ; 
 +0318 E6 30       .0    AND   30         ; CTC Vorteiler (DIV16,DIV256) 
 +031A 07          .     RLCA 
 +031B F6 05       ..    OR    05         ; Modus = Timer, Kein IRQ, Timeconst
 +031D FD 4E 1C    .N.   LD    C,(IY+1C)  ; CTC-Port fuer Baudrategenerator 
 +0320 ED 79       .y    OUT   (C),A      ; An CTC ausgeben 
 +0322 23          #     INC   HL 
 +0323 7E          ~     LD    A,(HL)     ; Timeconst fuer CTC 
 +0324 ED 79       .y    OUT   (C),A 
 +0326 01 00 00    ...   LD    BC,0000    ; "ok"
 +0329 C9          .     RET              ;-------------- "flow" ------------- 
 +032A CB 7C       .|    BIT   7,H        ; Keine Shard-spezifischen "flow"s 
 +032C C2 55 06    .U.   JP    NZ,0655    ; BC = 1 liefern
 +032F CB 45       .E    BIT   0,L        ; NZ, wenn nur Information 
 +0331 C2 5B 06    .[.   JP    NZ,065B    ; "alles moeglich" melden 
 +0334 CD 07 06    ...   CALL  0607       ; Flowmodebits loeschen
 +0337 F3          .     DI 
 +0338 FD CB 11 86 ....  RES   0,(IY+11)  ; Kein RTS/CTS 
 +033C FD CB 17 AE ....  RES   5,(IY+17)  ; Autoenables (CTS) loeschen
 +0340 FD 36 12 04 .6..  LD    (IY+12),04 ; AND-maske Statusport Tx-Full 
 +0344 FD 36 13 04 .6..  LD    (IY+13),04 ; XOR-maske Statusport Tx-Full
 +0348 25          %     DEC   H          ; H=0, oder H>1 
 +0349 20 03        .    JR    NZ,034E 
 +034B CD FE 05    ...   CALL  05FE       ; H=1 : XON/XOFF setzen
 +034E 25          %     DEC   H 
 +034F 20 14        .    JR    NZ,0365    ; H=0 : keine Flusskontrolle
 +0351 FD CB 11 C6 ....  SET   0,(IY+11)  ; H=2 : RTS/CTS
 +0355 FD CB 17 EE ....  SET   5,(IY+17)  ; Autoenables (CTS) moeglich 
 +0359 FD 36 12 2C .6.,  LD    (IY+12),2C ; TxDfull, CTS on, DCD on
 +035D FD 36 13 2C .6.,  LD    (IY+13),2C ; Alle obigen Bits invertieren 
 +0361 FD 36 14 82 .6..  LD    (IY+14),82 ; ? 
 +0365 FD 7E 17    .~.   LD    A,(IY+17)  ; Writeregister 3
 +0368 06 03       ..    LD    B,03       ; Register 3
 +036A FD 4E 1A    .N.   LD    C,(IY+1A)  ; Commanndport
 +036D ED 41       .A    OUT   (C),B      ; Neuen Autoenableswert ausgeben
 +036F ED 79       .y    OUT   (C),A 
 +0371 FB          .     EI 
 +0372 CD 3C 04    .<.   CALL  043C       ; ggf. XON/XOFF je nach Status ausg.
 +0375 01 00 00    ...   LD    BC,0000    ; "ok"
 +0378 C9          .     RET              ;----- RTS/DTR o.XON/XOFF set/reset 
 +0379 CD E9 05    ...   CALL  05E9       ; testet BIT 0 (IY0+0)
 +037C C4 3C 04    .<.   CALL  NZ,043C    ; ggf XON/XOFF ausgeben
 +037F FD CB 11 46 ...F  BIT   0,(IY+11)  ; NZ, wenn RTS/CTS eingestellt 
 +0383 C8          .     RET   Z 
 +0384 F3          .     DI               ; RTS/CTS ist eingestellt 
 +0385 FD 7E 14    .~.   LD    A,(IY+14)  ; Bits, die bei RTS/CTS veraendert 
 +0388 4F          O     LD    C,A        ; werden: RTS/DTR 
 +0389 FD B6 19    ...   OR    (IY+19)    ; Register 5 Wert
 +038C A9          .     XOR   C          ; RTS/DTR ggf loeschen
 +038D FD 77 19    .w.   LD    (IY+19),A  ; Wieder zurueckschreiben
 +0390 FD 4E 1A    .N.   LD    C,(IY+1A)  ; Commandport
 +0393 06 05       ..    LD    B,05       ; Register 5 beschreiben 
 +0395 ED 41       .A    OUT   (C),B 
 +0397 ED 79       .y    OUT   (C),A      ; Neuen Wert laden
 +0399 FB          .     EI 
 +039A C9          .     RET              ;----------------------------------- 
 +039B CD D6 05    ...   CALL  05D6       ; Wenn XON/XOFF,
 +039E C4 3C 04    .<.   CALL  NZ,043C    ; XON oder XOFF ausgeben
 +03A1 F3          .     DI 
 +03A2 FD 7E 14    .~.   LD    A,(IY+14)  ; RTS/DTR ggf. setzen 
 +03A5 FD B6 19    ...   OR    (IY+19)    ; weiter wie oben
 +03A8 18 E3       ..    JR    038D       ;------------ "bits" -------------- 
 +03AA CB 7C       .|    BIT   7,H        ; Keine Shard-Spezifischen "bits" 
 +03AC C2 55 06    .U.   JP    NZ,0655 
 +03AF CB 45       .E    BIT   0,L        ; Info: "alles moeglich" melden 
 +03B1 C2 5B 06    .[.   JP    NZ,065B 
 +03B4 7C          |     LD    A,H        ; H = stop * 32 + par * 8 + (bit-1)
 +03B5 C6 20       .     ADD   A,20       ; Stopbits + 1 : 1..3, parity
 +03B7 1F          .     RRA              ; Bit 0,1 = parity
 +03B8 1F          .     RRA              ; Bit 2,3 = stopbits
 +03B9 1F          .     RRA 
 +03BA E6 0F       ..    AND   0F         ; restregister ausblenden 
 +03BC CB 4F       .O    BIT   1,A        ; 
 +03BE 28 02       (.    JR    Z,03C2     ; Wenn gerader Parity: 
 +03C0 CB C7       ..    SET   0,A        ; Parity enablen 
 +03C2 4F          O     LD    C,A        ; C enthaelt OR-Wert fuer Register 4
 +03C3 3E F0       >.    LD    A,F0       ; Nur Stopbits und Parity veraendern 
 +03C5 CD 1E 04    ...   CALL  041E       ; SIO-Register 4 veraendern
 +03C8 7C          |     LD    A,H        ; Datenbits ausblenden 
 +03C9 E6 07       ..    AND   07 
 +03CB 47          G     LD    B,A        ; + 1 = Anzahl Datenbits 
 +03CC 04          .     INC   B 
 +03CD 3E 00       >.    LD    A,00 
 +03CF 16 F8       ..    LD    D,F8       ; 11111000
 +03D1 37          7     SCF              ; Maskenbits "AND" fuer ungueltige 
 +03D2 17          .     RLA              ; Datenbits links reinrotieren 
 +03D3 CB 22       ."    SLA   D          ; Bei weniger als 5 Bits zusaetzl. 1
 +03D5 10 FA       ..    DJNZ  03D1 
 +03D7 5F          _     LD    E,A 
 +03D8 CD 18 06    ...   CALL  0618       ; Datenbitsmasken setzen 
 +03DB 16 00       ..    LD    D,00       ; Keine Bits invertieren 
 +03DD CD 1F 06    ...   CALL  061F       ; Datenbitmasken setzen AND/XOR
 +03E0 CD 26 06    .&.   CALL  0626 
 +03E3 06 00       ..    LD    B,00 
 +03E5 CB 54       .T    BIT   2,H 
 +03E7 28 0C       (.    JR    Z,03F5     ; 1,2,3,4,5 datenbits : 00
 +03E9 CB 44       .D    BIT   0,H        ; 6 datenbits : 80H
 +03EB 28 02       (.    JR    Z,03EF     ; 7 datenbits : 40H
 +03ED CB F8       ..    SET   7,B        ; 8 datenbits : C0H
 +03EF CB 4C       .L    BIT   1,H 
 +03F1 28 02       (.    JR    Z,03F5 
 +03F3 CB F0       ..    SET   6,B 
 +03F5 FD 7E 17    .~.   LD    A,(IY+17)  ; Register 3 Wert
 +03F8 E6 3F       .?    AND   3F         ; Bits, die nicht veraendert werden 
 +03FA B0          .     OR    B 
 +03FB FD 77 17    .w.   LD    (IY+17),A  ; Register 3 Wert setzen
 +03FE 16 03       ..    LD    D,03 
 +0400 FD 4E 1A    .N.   LD    C,(IY+1A)  ; Command-Port 
 +0403 F3          .     DI 
 +0404 ED 51       .Q    OUT   (C),D      ; Register 3 selektieren
 +0406 ED 79       .y    OUT   (C),A      ; Neuen Register 3 Wert
 +0408 CB 38       .8    SLR   B          ; Register 5 Bits "tiefer"
 +040A FD 7E 19    .~.   LD    A,(IY+19)  ; Alten Registerwert 
 +040D E6 9F       ..    AND   9F         ; unbenoetigte Bits ausblenden 
 +040F B0          .     OR    B 
 +0410 FD 77 19    .w.   LD    (IY+19),A  ; abspeichern 
 +0413 16 05       ..    LD    D,05       ;
 +0415 ED 51       .Q    OUT   (C),D      ; Register 5 selektieren
 +0417 ED 79       .y    OUT   (C),A      ; Wert in das Register schreiben
 +0419 FB          .     EI 
 +041A 01 00 00    ...   LD    BC,0000    ; "ok"
 +041D C9          .     RET              ;---------- Register 4 setzen -----
 +041E F3          .     DI               ; A enthaelt Maske fuer alte Bits
 +041F FD A6 18    ...   AND   (IY+18)    ; Register 4 Maske 
 +0422 B1          .     OR    C          ; Neuer Clock/Parity/Stopbit Wert
 +0423 FD 77 18    .w.   LD    (IY+18),A  ; In der Tabelle setzen
 +0426 06 04       ..    LD    B,04       ; 
 +0428 FD 4E 1A    .N.   LD    C,(IY+1A)  ; Am Kommandoport ausgeben
 +042B ED 41       .A    OUT   (C),B      ; Register 4 waehlen 
 +042D ED 79       .y    OUT   (C),A      ; Neuen Wert des Registers setzen
 +042F FB          .     EI 
 +0430 C9          .     RET              ; ---------------------------------- 
 +0431 CD CD 04    ...   CALL  04CD       ; Serieller OUTPUT:String in Puffer
 +0434 F5          .     PUSH  AF         ; schreiben fuer IRQ-Ausgabe
 +0435 C5          .     PUSH  BC 
 +0436 C4 3C 04    .<.   CALL  NZ,043C    ; NZ, wenn Puffer gefuellt
 +0439 C1          .     POP   BC 
 +043A F1          .     POP   AF 
 +043B C9          .     RET              ;--------- ggf. XON/XOFF ausgeben-- 
 +043C FD 4E 1A    .N.   LD    C,(IY+1A)  ; Statusportaddresse
 +043F F3          .     DI 
 +0440 ED 78       .x    IN    A,(C)      ; Statusbyte
 +0442 FD A6 12    ...   AND   (IY+12)    ;"Transmitter full"-Bit ausmaskieren
 +0445 FD AE 13    ...   XOR   (IY+13)    ; Umdrehen, falls high-Aktiv
 +0448 20 0A        .    JR    NZ,0454    ; NZ=Puffer noch voll
 +044A CD 45 05    .E.   CALL  0545       ; Flusskontrolle pruefen(XON/XOFF-->A
 +044D FD 4E 1B    .N.   LD    C,(IY+1B)  ; Addresse des Datenports seriell
 +0450 28 02       (.    JR    Z,0454     ; Nichtausgeben, weil Flusskontrolle
 +0452 ED 79       .y    OUT   (C),A      ; Zeichen aus Akku ausgeben
 +0454 FB          .     EI 
 +0455 C9          .     RET              ;--------Transmitbuffer empty IRQ- 
 +0456 FD E3       ..    EX    (SP),IY    ; Ruecksprungaddresse -31
 +0458 C5          .     PUSH  BC         ; = Anfang der Kanalinfotabelle 
 +0459 F5          .     PUSH  AF 
 +045A 01 DF FF    ...   LD    BC,FFDF    ; -31
 +045D FD 09       ..    ADD   IY,BC 
 +045F FD 4E 1A    .N.   LD    C,(IY+1A)  ; Kommandoport des Kanals
 +0462 3E 28       >(    LD    A,28       ; reset interrupt pending 
 +0464 ED 79       .y    OUT   (C),A      ; Kommando ausgeben 
 +0466 CD 3F 04    .?.   CALL  043F       ; Flusskontrolle durchfuehren
 +0469 18 48       .H    JR    04B3       ; Interruptende
 +046B FD E3       ..    EX    (SP),IY    ;------- External/Status Change IRQ 
 +046D C5          .     PUSH  BC 
 +046E F5          .     PUSH  AF 
 +046F 01 DC FF    ...   LD    BC,FFDC    ; IY := Kanaltabelleninfo
 +0472 FD 09       ..    ADD   IY,BC 
 +0474 FD 4E 1A    .N.   LD    C,(IY+1A)  ; Statusportaddresse 
 +0477 ED 78       .x    IN    A,(C)      ; Status einlesen 
 +0479 06 10       ..    LD    B,10       ; reset Ext/Status Interrupts 
 +047B ED 41       .A    OUT   (C),B 
 +047D FC D1 05    ...   CALL  M,05D1     ; break empfangen : bit 7 = 1
 +0480 CD 3C 04    .<.   CALL  043C       ; Flusskontrolle durchfuehren
 +0483 18 2E       ..    JR    04B3       ; interrupt ende
 +0485 FD E3       ..    EX    (SP),IY    ;--------special receive cond. IRQ 
 +0487 C5          .     PUSH  BC 
 +0488 F5          .     PUSH  AF 
 +0489 01 D6 FF    ...   LD    BC,FFD6    ; IY := Kanaltabelleninfo 
 +048C FD 09       ..    ADD   IY,BC 
 +048E FD 4E 1A    .N.   LD    C,(IY+1A)  ; Status- u. Kommandoport 
 +0491 3E 01       >.    LD    A,01       ; Read-Register 1
 +0493 06 30       .0    LD    B,30 
 +0495 ED 79       .y    OUT   (C),A      ; Reg.selekt
 +0497 ED 78       .x    IN    A,(C)      ; Status einlesen
 +0499 ED 41       .A    OUT   (C),B      ; Error-reset
 +049B 47          G     LD    B,A 
 +049C FD B6 15    ...   OR    (IY+15) 
 +049F FD 77 15    .w.   LD    (IY+15),A  ; Fehler vermerken
 +04A2 78          x     LD    A,B 
 +04A3 FD A6 16    ...   AND   (IY+16)    ; Zulaessige Fehler maskieren
 +04A6 28 1B       (.    JR    Z,04C3     ; keine Fehler, normale Eingabe 
 +04A8 FD 4E 1B    .N.   LD    C,(IY+1B)  ; Zeichen vom Datenport einlesen
 +04AB ED 78       .x    IN    A,(C) 
 +04AD CD C9 05    ...   CALL  05C9       ; Zeichen per Inputinterrupt melden 
 +04B0 CC 3C 04    .<.   CALL  Z,043C     ; Flusskontrolle durchfuehren
 +04B3 F1          .     POP   AF 
 +04B4 C1          .     POP   BC 
 +04B5 FD E1       ..    POP   IY 
 +04B7 FB          .     EI 
 +04B8 ED 4D       .M    RETI             ;-------Receive Character avil. IRQ 
 +04BA FD E3       ..    EX    (SP),IY 
 +04BC C5          .     PUSH  BC 
 +04BD F5          .     PUSH  AF 
 +04BE 01 D9 FF    ...   LD    BC,FFD9    ; IY := Pufferanfang
 +04C1 FD 09       ..    ADD   IY,BC 
 +04C3 FD 4E 1B    .N.   LD    C,(IY+1B)  ; Datenport
 +04C6 ED 78       .x    IN    A,(C)      ; Zeichen einlesen 
 +04C8 CD A9 05    ...   CALL  05A9       ; Zeichen per inputinterrupt melden 
 +04CB 18 E3       ..    JR    04B0       ; Interrupt mit Flusskontroller ende 
 +04CD 78          x     LD    A,B        ;--------String in Puffer schreiben 
 +04CE B1          .     OR    C          ; Nichts Auszugeben --> SCF RET
 +04CF 37          7     SCF 
 +04D0 C8          .     RET   Z 
 +04D1 C5          .     PUSH  BC         ; String (HL/BC) in Puffer schreiben 
 +04D2 FD 7E 02    .~.   LD    A,(IY+02)  ; IY - Kanaldescriptor
 +04D5 FD 96 03    ...   SUB   (IY+03)    ; Puffergroesse - Pufferzeigerwrite 
 +04D8 28 51       (Q    JR    Z,052B     ; puffer ist voll 
 +04DA C5          .     PUSH  BC 
 +04DB 5F          _     LD    E,A        ; freier Platz
 +04DC 78          x     LD    A,B        ; Highbyte > 0 ? Laenge 
 +04DD B7          .     OR    A 
 +04DE 28 02       (.    JR    Z,04E2 
 +04E0 0E FF       ..    LD    C,FF       ; Mehr als 255 Bytes Laenge
 +04E2 7B          {     LD    A,E        ; 
 +04E3 B9          .     CP    C 
 +04E4 30 01       0.    JR    NC,04E7    ; Nicht genuegend Platz ?
 +04E6 4F          O     LD    C,A 
 +04E7 FD 7E 02    .~.   LD    A,(IY+02)  ; Puffergroesse- Pufferreadzeiger 
 +04EA FD 96 04    ...   SUB   (IY+04) 
 +04ED 20 05        .    JR    NZ,04F4    ; Noch Platz
 +04EF FD 36 04 00 .6..  LD    (IY+04),00 ; Lesezeiger auf Anfang
 +04F3 79          y     LD    A,C 
 +04F4 B9          .     CP    C 
 +04F5 30 01       0.    JR    NC,04F8 
 +04F7 4F          O     LD    C,A 
 +04F8 06 00       ..    LD    B,00 
 +04FA C5          .     PUSH  BC 
 +04FB FD 56 07    .V.   LD    D,(IY+07)  ; Pufferanfang + Pufferzeiger
 +04FE FD 7E 06    .~.   LD    A,(IY+06) 
 +0501 FD 86 04    ...   ADD   (IY+04) 
 +0504 30 01       0.    JR    NC,0507 
 +0506 14          .     INC   D          ; -->  DE bringen
 +0507 5F          _     LD    E,A        ; und String von HL --> DE bringen 
 +0508 ED B0       ..    LDIR 
 +050A C1          .     POP   BC 
 +050B FD 7E 04    .~.   LD    A,(IY+04) 
 +050E 81          .     ADD   C          ; Pufferzeiger erhoehen
 +050F FD 77 04    .w.   LD    (IY+04),A 
 +0512 F3          .     DI 
 +0513 FD 7E 03    .~.   LD    A,(IY+03)  ; Pufferzeigerwrite erhoehen
 +0516 81          .     ADD   C          ; darf kein IRQ auftreten
 +0517 FD 77 03    .w.   LD    (IY+03),A 
 +051A FB          .     EI 
 +051B E3          .     EX    (SP),HL    ; Stringlaenge (auf Stack) --> HL
 +051C B7          .     OR    A 
 +051D ED 42       .B    SBC   HL,BC      ; Reststringlaenge
 +051F 44          D     LD    B,H 
 +0520 4D          M     LD    C,L 
 +0521 E1          .     POP   HL 
 +0522 20 AE        .    JR    NZ,04D2    ; Reststring ggf. ausgeben
 +0524 C1          .     POP   BC         ; Alle Zeichen uebernommen 
 +0525 37          7     SCF 
 +0526 FD CB 01 46 ...F  BIT   0,(IY+01) 
 +052A C9          .     RET              ;----------------------------------
 +052B E1          .     POP   HL 
 +052C B7          .     OR    A 
 +052D ED 42       .B    SBC   HL,BC 
 +052F 44          D     LD    B,H 
 +0530 4D          M     LD    C,L 
 +0531 FD CB 01 46 ...F  BIT   0,(IY+01) 
 +0535 C9          .     RET              ;----------- "frout" -------------- 
 +0536 F3          .     DI               ; keine zeichen annehmen 
 +0537 FD 7E 02    .~.   LD    A,(IY+02)  ; Puffergroesse - Pufferzeigerwrite 
 +053A 47          G     LD    B,A        ; Pufferzeiger Write = anzahl Z. 
 +053B FD 96 03    ...   SUB   (IY+03) 
 +053E FB          .     EI 
 +053F B8          .     CP    B          ; SCF, wenn Puffer leer
 +0540 3F          ?     CCF 
 +0541 06 00       ..    LD    B,00 
 +0543 4F          O     LD    C,A 
 +0544 C9          .     RET              ;---------------------------------- 
 +0545 FD CB 01 66 ...f  BIT   4,(IY+01)  ; Flusskontrolle ?
 +0549 20 37        7    JR    NZ,0582    ; ja 
 +054B FD CB 01 4E ...N  BIT   1,(IY+01) 
 +054F C8          .     RET   Z 
 +0550 FD CB 01 C6 ....  SET   0,(IY+01)  ; Zeichen aus Puffer lesen (IY+05)
 +0554 FD 7E 03    .~.   LD    A,(IY+03) 
 +0557 B7          .     OR    A          ; Writezeiger am Anfang (leer)
 +0558 C8          .     RET   Z          ; Zurueck
 +0559 FD CB 01 86 ....  RES   0,(IY+01) 
 +055D FD 35       .5    DEC   (IY+03)    ; Writezeiger DEC 1
 +055F 03          .     INC   BC 
 +0560 FD 46 07    .F.   LD    B,(IY+07)  ; Pufferanfang High
 +0563 FD 7E 05    .~.   LD    A,(IY+05) 
 +0566 FD BE 02    ...   CP    (IY+02) 
 +0569 20 02        .    JR    NZ,056D 
 +056B 3E 00       >.    LD    A,00 
 +056D 3C          <     INC   A 
 +056E FD 77 05    .w.   LD    (IY+05),A 
 +0571 3D          =     DEC   A 
 +0572 FD 86 06    ...   ADD   (IY+06)    ; Pufferanfang low
 +0575 30 01       0.    JR    NC,0578 
 +0577 04          .     INC   B          ; BC = Pufferzeiger
 +0578 4F          O     LD    C,A 
 +0579 0A          .     LD    A,(BC)     ; Zeichen aus Puffer (zeiger)
 +057A FD A6 0C    ...   AND   (IY+0C)    ; Bit 8 ggf ausblenden
 +057D FD AE 0D    ...   XOR   (IY+0D)    ;
 +0580 04          .     INC   B 
 +0581 C9          .     RET              ; Flusskontrolle
 +0582 FD CB 01 A6 ....  RES   4,(IY+01) 
 +0586 FD CB 01 6E ...n  BIT   5,(IY+01)  ; XON oder XOFF ?
 +058A 28 08       (.    JR    Z,0594 
 +058C FD CB 01 AE ....  RES   5,(IY+01) 
 +0590 FD 7E 10    .~.   LD    A,(IY+10)  ; XON (CTRL-Q) stattdessen ausgeben
 +0593 C9          .     RET              ;-----------------------------------
 +0594 F6 01       ..    OR    01 
 +0596 FD 7E 0F    .~.   LD    A,(IY+0F)  ; XOFF stattdessen ausgeben
 +0599 C9          .     RET              ;----------------------------------
 +059A FD CB 01 4E ...N  BIT   1,(IY+01)  ; XON empfangen
 +059E FD CB 01 CE ....  SET   1,(IY+01) 
 +05A2 C9          .     RET              ;--------------------------------- 
 +05A3 FD CB 01 8E ....  RES   1,(IY+01)  ; XOFF-empfangen
 +05A7 18 1D       ..    JR    05C6 
 +05A9 FD A6 08    ...   AND   (IY+08)    ;------- Zeichen per 'inputinterrupt'
 +05AC FD AE 09    ...   XOR   (IY+09)    ; masken fuer fehlerfreien receive 
 +05AF FD CB 01 56 ...V  BIT   2,(IY+01)  ; XON/XOFF ? 
 +05B3 28 0A       (.    JR    Z,05BF 
 +05B5 FD BE 10    ...   CP    (IY+10)    ; XON-Zeichen ?
 +05B8 28 E0       (.    JR    Z,059A 
 +05BA FD BE 0F    ...   CP    (IY+0F)    ; XOFF-Zeichen ?
 +05BD 28 E4       (.    JR    Z,05A3 
 +05BF 47          G     LD    B,A        ; Zeichen in B verlangt
 +05C0 FD 7E 00    .~.   LD    A,(IY+00)  ; Kanalnummer 
 +05C3 CD 13 1E    ...   CALL  1E13       ; Inputinterrupt aufrufen
 +05C6 F6 01       ..    OR    01 
 +05C8 C9          .     RET              ;-------- fehlerhafter receive
 +05C9 FD A6 0A    ...   AND   (IY+0A)    ; masken fuer fehlerhaften receive 
 +05CC FD AE 0B    ...   XOR   (IY+0B) 
 +05CF 18 DE       ..    JR    05AF       ; weiter wie normal 
 +05D1 FD 7E 0E    .~.   LD    A,(IY+0E)  ;--------- fehlerhafter receive ---- 
 +05D4 18 D9       ..    JR    05AF       ; '?' ausgeben 
 +05D6 F3          .     DI               ;---------------------------------- 
 +05D7 FD 7E 01    .~.   LD    A,(IY+01) 
 +05DA CB 5F       ._    BIT   3,A 
 +05DC 28 09       (.    JR    Z,05E7 
 +05DE F6 30       .0    OR    30         ; Bit 4 + 5 setzen (XON/XOFF) 
 +05E0 FD 77 01    .w.   LD    (IY+01),A 
 +05E3 FD CB 01 46 ...F  BIT   0,(IY+01) 
 +05E7 FB          .     EI 
 +05E8 C9          .     RET              ;---------------------------------- 
 +05E9 F3          .     DI               ; von RTS/DTR - XON/XOFF Routine 
 +05EA FD 7E 01    .~.   LD    A,(IY+01)  ; aufgerufen
 +05ED CB 5F       ._    BIT   3,A 
 +05EF 28 0B       (.    JR    Z,05FC     ; Unbekannte Flusskontrolle
 +05F1 F6 10       ..    OR    10 
 +05F3 E6 DF       ..    AND   DF 
 +05F5 FD 77 01    .w.   LD    (IY+01),A 
 +05F8 FD CB 01 46 ...F  BIT   0,(IY+01) 
 +05FC FB          .     EI 
 +05FD C9          .     RET              ;----------- XON/XOFF setzen --------
 +05FE FD CB 01 DE ....  SET   3,(IY+01) 
 +0602 FD CB 01 D6 ....  SET   2,(IY+01) 
 +0606 C9          .     RET              ;--------- IO-Stop d. Flow loeschen 
 +0607 FD CB 01 9E ....  RES   3,(IY+01)  ; XON/XOFF loeschen
 +060B FD CB 01 96 ....  RES   2,(IY+01) 
 +060F FD CB 01 4E ...N  BIT   1,(IY+01)  ; XON Modus ?
 +0613 FD CB 01 CE ....  SET   1,(IY+01)  ; XON-setzen
 +0617 C9          .     RET              ;--------- Datenbitmasken --------- 
 +0618 FD 73 0C    .s.   LD    (IY+0C),E  ; AND-maske fuer Datenbits setzen 
 +061B FD 72 0D    .r.   LD    (IY+0D),D  ; Bei weniger als 5 Bits links 1er
 +061E C9          .     RET              ;--------- Datenbitmasken setzen-- 
 +061F FD 73 08    .s.   LD    (IY+08),E  ; AND  fuer fehlerfreien reiceive
 +0622 FD 72 09    .r.   LD    (IY+09),D  ; XOR
 +0625 C9          .     RET              ;--------- Datenbitmasken setzen 
 +0626 FD 73 0A    .s.   LD    (IY+0A),E  ; AND fuer fehlerhaften receive
 +0629 FD 72 0B    .r.   LD    (IY+0B),D  ; XOR
 +062C C9          .     RET              ;-----------------------------------
 +;======================== Illegaler Kanal ================================= 
 +062D 01 5F 06                           ; 1, IOCONTROL "typ"
 +0630 02 50 06                           ; 2, IOCONTROL "frout"
 +0633 05 46 06                           ; 5, IOCONTROL "size"
 +0636 FF 4C 06                           ; -1, IOCONTROL ill.
 +0639 FF 55 06                           ; -1, Aufg. 5 Nicht moeglich
 +063C FF 4C 06                           ; -1, BLOCKIN/BLOCKOUT nicht moegl. 
 +063F 59 06                              ; Illegaler Kanal : OUTPUT 0659 
 +0641 FD                                 ; BLOCKIN : 063C
 +0642 FD                                 ; BLOCKOUT : 063C
 +0643 EE                                 ; IOCONTROL : 062D
 +0644 FA                                 ; Aufg. 5 : 0636
 +0645 00                                 ; Keine I/O moeglich
 +0646 3E 00       >.    LD    A,00       ; ---------- "size" --------------
 +0648 01 00 00    ...   LD    BC,0000    ; Null Bloecke
 +064B C9          .     RET              ;----------- "illegal" -1 ---------
 +064C 01 FF FF    ...   LD    BC,FFFF    ; Kann nicht ausgefuehrt werden
 +064F C9          .     RET              ;------------ "frout" -------------
 +0650 01 C8 00    ...   LD    BC,00C8    ; kann 200 zeichen uebernehmen 
 +0653 37          7     SCF              ; Puffer leer
 +0654 C9          .     RET              ;---------- "nicht moegl" ----------
 +0655 01 01 00    ...   LD    BC,0001    ; Liefert 1
 +0658 C9          .     RET              ;---------- "OUTPUT" --------------
 +0659 37          7     SCF              ; Alle Zeichen uebernommen 
 +065A C9          .     RET              ;------------- "ok" ---------------- 
 +065B 01 00 00    ...   LD    BC,0000 
 +065E C9          .     RET              ; -------- "typ" ------------------ 
 +065F 06 00       ..    LD    B,00       ; Type aus Parameterblock d. Kanals
 +0661 DD 4E 06    .N.   LD    C,(IX+06) 
 +0664 C9          .     RET              ;---------------------------------- 
 +;=========================== Floppykanal ================================== 
 +0665 05 95 06                           ; 5, IOCONTROL "size"
 +0668 01 5F 06                           ; 1, IOCONTROL "typ"
 +066B FF 4C 06                           ; -1, IOCONTROL ill.
 +066E FE 85 06                           ; -2, Aufg. 5 : Kanal init
 +0671 FF 55 06                           ; -1, Aufg. 5 : Geht nicht
 +0674 00 9D 06                           ; 0, BLOCKIN : 069D
 +0677 00 99 06                           ; 0, BLOCKOUT : 0699
 +067A FF 4C 06                           ; -1, BLOCKOUT ill.
 +067D 59 06                              ; Floppy: OUTPUT 0659 
 +067F F7                                 ; BLOCKIN : 0674
 +0680 FA                                 ; BLOCKOUT : 0677
 +0681 E8                                 ; IOCONTROL : 0665
 +0682 F1                                 ; Aufg. 5 : 066E
 +0683 0C                                 ; Typ : BLOCKIO ohne format
 +0684 04 
 +0685 3E 70       >p    LD    A,70       ; ----------- Floppyinit ----------- 
 +0687 D3 0A       ..    OUT   (0A),A     ; Interruptvektor PIOA Floppy = $70
 +0689 11 58 09    .X.   LD    DE,0958    ; Interruptroutine FDC
 +068C ED 57       .W    LD    A,I        ; In die Interruptvektortabelle 
 +068E 67          g     LD    H,A        ; eintragen
 +068F 2E 70       .p    LD    L,70 
 +0691 73          s     LD    (HL),E 
 +0692 23          #     INC   HL 
 +0693 72          r     LD    (HL),D 
 +0694 C9          .     RET              ;------------ "size" ---------------
 +0695 01 D0 04    ...   LD    BC,04D0    ; 1232 Bloecke = 616K
 +0698 C9          .     RET              ;----------- "BLOCKOUT" ----------- 
 +0699 3E 01       >.    LD    A,01       ; A=1 : Write
 +069B 18 01       ..    JR    069E       ; BLOCKIO
 +069D AF          .     XOR   A          ;------------ "BLOCKIN" ---------- 
 +069E E5          .     PUSH  HL         ; Hauptspeicheraddresse
 +069F 21 CF 04    !..   LD    HL,04CF    ; Mit Max. Blocknummer
 +06A2 B7          .     OR    A 
 +06A3 ED 52       .R    SBC   HL,DE 
 +06A5 E1          .     POP   HL 
 +06A6 DA C9 0B    ...   JP    C,0BC9     ; Block zu hoch = 3
 +06A9 E5          .     PUSH  HL 
 +06AA 21 11 08    !..   LD    HL,0811    ; Floppysemaphor reservieren
 +06AD CD 47 0C    .G.   CALL  0C47 
 +06B0 E1          .     POP   HL 
 +06B1 EB          .     EX    DE,HL      ; DE = Hauptspeicheraddresse
 +06B2 4F          O     LD    C,A        ; A= Read/Write,HL = Blocknummer
 +06B3 7D          }     LD    A,L 
 +06B4 E6 0F       ..    AND   0F         ; A = Sektornummer 0..15
 +06B6 CB 25       .%    SLA   L 
 +06B8 CB 14       ..    RL    H          ; HL = Tracknummer 
 +06BA CB 25       .%    SLA   L          ; Track = (Blocknr * 16) DIV 256
 +06BC CB 14       ..    RL    H          ;       = Blocknr DIV 16
 +06BE CB 25       .%    SLA   L 
 +06C0 CB 14       ..    RL    H 
 +06C2 CB 25       .%    SLA   L 
 +06C4 CB 14       ..    RL    H 
 +06C6 6F          o     LD    L,A        ; L = Sektor, H = Track
 +06C7 79          y     LD    A,C        ; A = Read/Write
 +06C8 B7          .     OR    A 
 +06C9 FD 7E 08    .~.   LD    A,(IY+08) 
 +06CC 28 05       (.    JR    Z,06D3     ; Z, wenn Read
 +06CE CD CA 09    ...   CALL  09CA       ; Write Floppy (Interrupt anstossen)
 +06D1 18 03       ..    JR    06D6       ; Skip
 +06D3 CD BE 09    ...   CALL  09BE       ; Read Floppy (Interrupt anstossen)
 +06D6 FD E5       ..    PUSH  IY 
 +06D8 CD 19 1E    ...   CALL  1E19       ; Zur Sicherheit einmal 'warte'
 +06DB FD E1       ..    POP   IY 
 +06DD FD 7E 05    .~.   LD    A,(IY+05)  ; Return von Floppy-IRQ-Routine
 +06E0 3C          <     INC   A 
 +06E1 28 F3       (.    JR    Z,06D6     ; FF = Busy, IRQ noch nicht beendet
 +06E3 21 11 08    !..   LD    HL,0811    ; Semaphor wieder freigeben
 +06E6 CD 61 0C    .a.   CALL  0C61 
 +06E9 3D          =     DEC   A          ; Muss = 0 sein, sonst fehler
 +06EA C2 AE 0B    ...   JP    NZ,0BAE    ; Fehler ggf. melden
 +06ED 01 00 00    ...   LD    BC,0000    ; Return: ok
 +06F0 C9          .     RET              ;-----------------------------------
 +;========================= Hintergrundkanal (Harddisk) ===================== 
 +06F1 05 34 07                           ; 5, IOCONTROL "size"
 +06F4 01 5F 06                           ; 1, IOCONTROL "typ"
 +06F7 FF 4C 06                           ; -1, IOCONTROL ill.
 +06FA FE 19 07                           ; -2, Aufg. 5 : kanal Init
 +06FD 9C 3C 07                           ; -100, Aufg.5:Anz.HG-Bloecke setzen
 +0700 FF 55 06                           ; -1, Aufg. 5 : BC = 1
 +0703 00 4D 07                           ; 0, BLOCKIN
 +0706 00 49 07                           ; 0, BLOCKOUT
 +0709 FF 4C 06                           ; -1, BLOCKIO illg. 
 +070C 59                                 ; Hintergrund : OUTPUT 0659
 +070D 06 
 +070E F7                                 ; BLOCKIN : 0703
 +070F FA                                 ; BLOCKOUT : 0706
 +0710 E5                                 ; IOCONTROL : 06F1
 +0711 EE                                 ; Aufg. 5 : 06FA
 +0712 0C                                 ; Typ : BLOCKIN/BLOCKOUT
 +0713 00          .     NOP 
 +0714 01 00 00    ...   LD    BC,0000 
 +0717 00          .     NOP 
 +0718 FF          .     RST   38         ;----------"HD-Init" --------------- 
 +0719 21 DA 0F    !..   LD    HL,0FDA    ; Bei Floppy (0FDA) = 46H
 +071C 22 0F 08    "..   LD    (080F),HL  ; Harddisktransferbufferaddresse
 +071F DD 7E 0A    .~.   LD    A,(IX+0A)  ; New Cylinder Number
 +0722 D3 22       ."    OUT   (22),A 
 +0724 3E 70       >p    LD    A,70       ; Interruptvektor FDC+HDC
 +0726 D3 0A       ..    OUT   (0A),A 
 +0728 11 58 09    .X.   LD    DE,0958    ; Interruptserviceroutinenaddresse
 +072B ED 57       .W    LD    A,I 
 +072D 67          g     LD    H,A 
 +072E 2E 70       .p    LD    L,70 
 +0730 73          s     LD    (HL),E 
 +0731 23          #     INC   HL 
 +0732 72          r     LD    (HL),D 
 +0733 C9          .     RET              ;------------ "size" --------------- 
 +0734 FD 4E 01    .N.   LD    C,(IY+01)  ; HG-Maxblock Low
 +0737 FD 46 02    .F.   LD    B,(IY+02)  ; High
 +073A 03          .     INC   BC         ; +1 = Anzahl Bloecke
 +073B C9          .     RET              ;------ Anzahl-HG-Bloecke setzen ---
 +073C FD 75 01    .u.   LD    (IY+01),L  ; Letzter HD-Block 
 +073F FD 74 02    .t.   LD    (IY+02),H 
 +0742 FD 73 03    .s.   LD    (IY+03),E  ; Erster HD-Block
 +0745 FD 72 04    .r.   LD    (IY+04),D 
 +0748 C9          .     RET              ;-------- Hintergrund-Write --------- 
 +0749 3E 01       >.    LD    A,01       ; 
 +074B 18 01       ..    JR    074E       ;--------- Hintergrund-Read -------- 
 +074D AF          .     XOR   A 
 +074E E5          .     PUSH  HL         ; Blocknummer in DE
 +074F FD 6E 01    .n.   LD    L,(IY+01)  ; Anzahl Hintergrundbloecke
 +0752 FD 66 02    .f.   LD    H,(IY+02) 
 +0755 B7          .     OR    A 
 +0756 ED 52       .R    SBC   HL,DE 
 +0758 E1          .     POP   HL 
 +0759 DA C9 0B    ...   JP    C,0BC9     ; Block zu hoch
 +075C E5          .     PUSH  HL 
 +075D 21 11 08    !..   LD    HL,0811    ; Harddisksemaphor reservieren
 +0760 CD 47 0C    .G.   CALL  0C47 
 +0763 FD 6E 03    .n.   LD    L,(IY+03)  ; Erster Harddiskblock
 +0766 FD 66 04    .f.   LD    H,(IY+04) 
 +0769 19          .     ADD   HL,DE      ; + Blocknummer
 +076A EB          .     EX    DE,HL 
 +076B E1          .     POP   HL         ; DE=Blocknummer neu
 +076C E5          .     PUSH  HL         ; HL=Hauptspeicherzieladdresse
 +076D F5          .     PUSH  AF         ; Wird spaeter als BC gepopt
 +076E B7          .     OR    A 
 +076F 20 03        .    JR    NZ,0774    ; NZ=Write
 +0771 2A 0F 08    *..   LD    HL,(080F)  ; Harddiskbufferaddresse
 +0774 CD A5 07    ...   CALL  07A5       ; HDC fuer Transfer anstossen
 +0777 DD E5       ..    PUSH  IX 
 +0779 CD 19 1E    ...   CALL  1E19       ; 'warte' EUMEL0 aufrufen
 +077C DD E1       ..    POP   IX 
 +077E DD 7E 07    .~.   LD    A,(IX+07)  ; Harddisk ready ?
 +0781 3C          <     INC   A          ; FF = not ready
 +0782 28 F3       (.    JR    Z,0777     ; weiter warten
 +0784 21 11 08    !..   LD    HL,0811    ; Semaphor freigeben
 +0787 CD 61 0C    .a.   CALL  0C61 
 +078A 3D          =     DEC   A          ; Fehlercode
 +078B C1          .     POP   BC 
 +078C E1          .     POP   HL 
 +078D C2 AE 0B    ...   JP    NZ,0BAE    ; Bei Fehler melden 
 +0790 78          x     LD    A,B        ; A=1 : Write
 +0791 B7          .     OR    A 
 +0792 20 0C        .    JR    NZ,07A0    ; Bei Write kein Transfer mehr
 +0794 EB          .     EX    DE,HL      ; DE = Hauptspeicherzieladdresse
 +0795 2A 0F 08    *..   LD    HL,(080F)  ; Hauptspeicher fuer HD-Transfer
 +0798 23          #     INC   HL         ; Vorweg Status etc.
 +0799 23          #     INC   HL 
 +079A 23          #     INC   HL 
 +079B 01 00 02    ...   LD    BC,0200    ; Vom HD-Buffer --> EUMEL-Block
 +079E ED B0       ..    LDIR 
 +07A0 01 00 00    ...   LD    BC,0000    ; "ok"
 +07A3 C9          .     RET              ;----------------------------------
 +07A4 C9          .     RET 
 +07A5 E5          .     PUSH  HL         ;----------- HD-Transfer anstoss. --
 +07A6 F5          .     PUSH  AF         ; A=1:Write,0=Read,HL=Mem.Addresse
 +07A7 D5          .     PUSH  DE         ; DE=Blocknummer
 +07A8 06 00       ..    LD    B,00       ; Cachesize = 21 max.
 +07AA 3A 05 00    :..   LD    A,(0005)   ; (5) = Cachegroesse
 +07AD B7          .     OR    A 
 +07AE 28 26       (&    JR    Z,07D6     ; Nicht in Cache, neu berechnen
 +07B0 4F          O     LD    C,A 
 +07B1 7A          z     LD    A,D        ; D = Blocknummer High zum suchen
 +07B2 21 05 00    !..   LD    HL,0005    ; Tabellenanfang = 6
 +07B5 09          .     ADD   HL,BC      ; + Cachegroesse
 +07B6 ED B9       ..    CPDR             ; Blocknummerhigh suchen 
 +07B8 20 1C        .    JR    NZ,07D6    ; Nicht gefunden, Tabelle durch
 +07BA F5          .     PUSH  AF         ; gefunden, test, ob Blocknummerlow 
 +07BB E5          .     PUSH  HL         ; auch stimmt
 +07BC 21 1A 00    !..   LD    HL,001A    ; Tabellenanfang = 27
 +07BF 09          .     ADD   HL,BC 
 +07C0 7B          {     LD    A,E        ; Blocknummer Low
 +07C1 BE          .     CP    (HL) 
 +07C2 28 07       (.    JR    Z,07CB     ; Ja, Block gefunden in Cache
 +07C4 E1          .     POP   HL 
 +07C5 F1          .     POP   AF 
 +07C6 EA B6 07    ...   JP    PE,07B6    ; Noch nicht die ganze Tabelle durch
 +07C9 18 0B       ..    JR    07D6       ; Ganz durch, neu berechnen 
 +07CB E1          .     POP   HL         ; Aus Cache entnehmen
 +07CC F1          .     POP   AF 
 +07CD 21 44 00    !D.   LD    HL,0044 
 +07D0 09          .     ADD   HL,BC 
 +07D1 C1          .     POP   BC 
 +07D2 EB          .     EX    DE,HL 
 +07D3 C3 A7 07    ...   JP    07A7       ;---------------------------------- 
 +07D6 E1          .     POP   HL 
 +07D7 F1          .     POP   AF 
 +07D8 D1          .     POP   DE 
 +07D9 01 40 04    .@.   LD    BC,0440    ; 1088 Bloecke subtrahieren
 +07DC F5          .     PUSH  AF         ; fuer Cylindernrhigh
 +07DD AF          .     XOR   A 
 +07DE ED 42       .B    SBC   HL,BC      ; 1088 = 17(sektoren)*4(heads)*16
 +07E0 3C          <     INC   A 
 +07E1 30 FB       0.    JR    NC,07DE    ; cylindernrh = blocknr DIV 1088
 +07E3 09          .     ADD   HL,BC 
 +07E4 3D          =     DEC   A          ; restbloecke in HL
 +07E5 07          .     RLCA             ; ins hoeherwertige Nibble bringen 
 +07E6 07          .     RLCA             ; (*16)
 +07E7 07          .     RLCA 
 +07E8 07          .     RLCA 
 +07E9 F5          .     PUSH  AF 
 +07EA 01 44 00    .D.   LD    BC,0044    ; Cylindernummerlow
 +07ED AF          .     XOR   A          ; restblocknr DIV 68 = cylindernrl
 +07EE ED 42       .B    SBC   HL,BC 
 +07F0 3C          <     INC   A 
 +07F1 30 FB       0.    JR    NC,07EE 
 +07F3 09          .     ADD   HL,BC 
 +07F4 3D          =     DEC   A 
 +07F5 67          g     LD    H,A       ; Cylinder = cylinderl*16+cylinderh
 +07F6 F1          .     POP   AF 
 +07F7 B4          .     OR    H 
 +07F8 67          g     LD    H,A       ; H = Cylinder
 +07F9 7D          }     LD    A,L       ; Head = Blocknr MOD 4
 +07FA E6 03       ..    AND   03 
 +07FC 07          .     RLCA            ; Head ins Highnibble bringen
 +07FD 07          .     RLCA 
 +07FE 07          .     RLCA 
 +07FF 07          .     RLCA 
 +0800 CB 3D       .=    SLR   L         ; Sektor = restblocknr DIV 4
 +0802 CB 3D       .=    SLR   L         ; 17. Sektor ist ungenutzt
 +0804 4F          O     LD    C,A 
 +0805 F1          .     POP   AF 
 +0806 FE 01       ..    CP    01 
 +0808 79          y     LD    A,C 
 +0809 CA 6B 08    .k.   JP    Z,086B     ; Z, wenn Write
 +080C C3 5C 08    .\.   JP    085C       ; Read
 +080F 00          .     NOP              ; HD-Transferpuffer
 +0810 00          .     NOP 
 +0811 00          .     NOP 
 +;=============================== Timerinterrupt ===========================
 +0812 11 2D 08    .-.   LD    DE,082D    ;-------- Timer Init ----------------
 +0815 ED 57       .W    LD    A,I 
 +0817 67          g     LD    H,A 
 +0818 2E C6       ..    LD    L,C6       ; HL = 00C6 Interruptserviceroutine 
 +081A 3E 33       >3    LD    A,33       ; Fuer alle Kanaele einen programm. 
 +081C E6 FC       ..    AND   FC         ; C0=0, C2=1, C4=2, C6=3(timer)
 +081E 4F          O     LD    C,A 
 +081F ED 69       .i    OUT   (C),L      ; Interruptvektor setzen
 +0821 73          s     LD    (HL),E     ; Addresse der Serviceroutine 
 +0822 23          #     INC   HL         ; --> (00C6) fuer CTC-Kanal 3 
 +0823 72          r     LD    (HL),D 
 +0824 3E B5       >.    LD    A,B5       ; IRQ,Timer,DIV256,pos.flanke,kein
 +0826 D3 33       .3    OUT   (33),A     ; externer trigger, timeconst folgt
 +0828 3E FA       >.    LD    A,FA       ; 250 = Zeitkonstante: 
 +082A D3 33       .3    OUT   (33),A     ; Hz=4000000/256/250=62.5 ^ 16ms
 +082C C9          .     RET              ;------ Timer-Service-IRQ --------- 
 +082D F5          .     PUSH  AF 
 +082E 3E 10       >.    LD    A,10       ; Alle 16ms Interrupt 
 +0830 CD 16 1E    ...   CALL  1E16       ; "timerinterrupt" 
 +0833 3A 5B 08    :[.   LD    A,(085B) 
 +0836 3C          <     INC   A 
 +0837 FE 3E       .>    CP    3E         ; Alle 62 Timerdurchlaeufe ~ 1s 
 +0839 28 07       (.    JR    Z,0842 
 +083B 32 5B 08    2[.   LD    (085B),A   ; Zaehler INCR 1
 +083E F1          .     POP   AF 
 +083F FB          .     EI 
 +0840 ED 4D       .M    RETI             ;-------------IRQ-Ende-------------- 
 +0842 AF          .     XOR   A          ; Sekundenzaehler auf 0
 +0843 32 5B 08    2[.   LD    (085B),A 
 +0846 DD E5       ..    PUSH  IX 
 +0848 FD E5       ..    PUSH  IY 
 +084A E5          .     PUSH  HL 
 +084B D5          .     PUSH  DE 
 +084C C5          .     PUSH  BC 
 +084D C3 50 08    .P.   JP    0850       ; Wird jede Sekunde aufgerufen 
 +0850 C1          .     POP   BC 
 +0851 D1          .     POP   DE 
 +0852 E1          .     POP   HL 
 +0853 FD E1       ..    POP   IY 
 +0855 DD E1       ..    POP   IX 
 +0857 F1          .     POP   AF 
 +0858 FB          .     EI 
 +0859 ED 4D       .M    RETI             ;-----------IRQ-Ende---------------- 
 +085B 00          .     NOP              ; Sekundenzaehler
 +;============================= Harddisk I/O ===============================
 +085C 0E 01       ..    LD    C,01       ;----------- HD-Read-Routine-------- 
 +085E DD 36 09 01 .6..  LD    (IX+09),01 ; Read-Kommando fuer HDC
 +0862 ED 53 AB 09 .S..  LD    (09AB),DE  ; Zieladdresse
 +0866 11 02 02    ...   LD    DE,0202    ; 515 Bytes
 +0869 18 0D       ..    JR    0878 
 +086B 0E 05       ..    LD    C,05       ;---------- HD-Write-Routine ------- 
 +086D DD 36 09 02 .6..  LD    (IX+09),02 ; (09BA) = Track(High),Sektor(Low)
 +0871 ED 53 AB 09 .S..  LD    (09AB),DE  ; Sourceaddresse, 02 = WriteCMD HDC
 +0875 11 FF 01    ...   LD    DE,01FF    ; 512 Bytes
 +0878 DD 22 BC 09 ."..  LD    (09BC),IX  ; IX retten
 +087C ED 53 AD 09 .S..  LD    (09AD),DE  ; Anzahl Bytes zu uebertragen
 +0880 DD 36 0C 05 .6..  LD    (IX+0C),05 
 +0884 22 BA 09    "..   LD    (09BA),HL 
 +0887 DD 36 07 FF .6..  LD    (IX+07),FF 
 +088B 2A BA 09    *..   LD    HL,(09BA) 
 +088E F6 01       ..    OR    01         ; HD-Drive 1 auswaehlen
 +0890 D3 20       .     OUT   (20),A     ; Head und Drive selektieren
 +0892 57          W     LD    D,A 
 +0893 79          y     LD    A,C 
 +0894 32 B7 09    2..   LD    (09B7),A   ; Read or Write 01/05
 +0897 DB 23       .#    IN    A,(23)     ; Status einlesen
 +0899 CB 77       .w    BIT   6,A 
 +089B 28 07       (.    JR    Z,08A4 
 +089D 3E 02       >.    LD    A,02       ; NZ = "write fault"
 +089F D3 20       .     OUT   (20),A     ; Drive 2 selektieren
 +08A1 7A          z     LD    A,D        ; Headnummer setzen
 +08A2 D3 20       .     OUT   (20),A 
 +08A4 7C          |     LD    A,H        ; Cylindernummer
 +08A5 DD BE 0A    ...   CP    (IX+0A)    ; = Alter Cylinder
 +08A8 CA C4 08    ...   JP    Z,08C4     ; ja, kein neuer Cylinderseek
 +08AB DD 7E 0A    .~.   LD    A,(IX+0A)  ; alten Cylinder holen --> HDC
 +08AE D3 21       .!    OUT   (21),A     ; last significant Bits of CYL
 +08B0 AF          .     XOR   A          ; most significant Bits of CYL = 0
 +08B1 D3 21       .!    OUT   (21),A 
 +08B3 7C          |     LD    A,H        ; Neue Cylindernummer
 +08B4 D3 22       ."    OUT   (22),A     ; ausgeben und 
 +08B6 DD 77 0A    .w.   LD    (IX+0A),A  ; vermerken
 +08B9 AF          .     XOR   A          ; Most significant Bits = 0
 +08BA D3 22       ."    OUT   (22),A 
 +08BC 3E 10       >.    LD    A,10       ; Seek-Kommando an HDC
 +08BE CD 5B 09    .[.   CALL  095B 
 +08C1 2A BA 09    *..   LD    HL,(09BA)  ; Sektornummer
 +08C4 7D          }     LD    A,L        ; ausgeben
 +08C5 D3 21       .!    OUT   (21),A 
 +08C7 21 A9 09    !..   LD    HL,09A9    ; DMA-Init-Tabelle
 +08CA C5          .     PUSH  BC 
 +08CB 01 00 11    ...   LD    BC,1100    ; DMA-Transfer vorbereiten
 +08CE ED B3       ..    OTIR             ; 17 Bytes an DMA-Controller
 +08D0 C1          .     POP   BC 
 +08D1 DD 7E 09    .~.   LD    A,(IX+09)  ; 01=Read, 02=Write
 +08D4 CD 5B 09    .[.   CALL  095B       ; An HDC-Controller schicken
 +08D7 DD 36 0C FF .6..  LD    (IX+0C),FF ; Status in A
 +08DB 21 40 09    !@.   LD    HL,0940    ; Fehlernummer (in L) --> IX+07 
 +08DE E5          .     PUSH  HL 
 +08DF 21 58 09    !X.   LD    HL,0958    ; HD-IRQ-Serviceroutine
 +08E2 22 70 00    "p.   LD    (0070),HL  ; in Vektortabelle eintragen
 +08E5 2E 00       ..    LD    L,00 
 +08E7 E6 5D       .]    AND   5D         ; HD-Status in A
 +08E9 CA 46 09    .F.   JP    Z,0946     ; "ok"
 +08EC CB 5F       ._    BIT   3,A        ; NZ, wenn "Record not found"
 +08EE C2 11 09    ...   JP    NZ,0911    ; 
 +08F1 CB 67       .g    BIT   4,A        ; NZ, wenn "CRC error"
 +08F3 28 03       (.    JR    Z,08F8 
 +08F5 2E 02       ..    LD    L,02       ; 2 = "crc err"
 +08F7 C9          .     RET              ;------------------------------- 
 +08F8 CB 57       .W    BIT   2,A        ; NZ, wenn "bad sector"
 +08FA 28 03       (.    JR    Z,08FF 
 +08FC 2E 03       ..    LD    L,03       ; "bad sect"
 +08FE C9          .     RET              ;-------------------------------
 +08FF CB 77       .w    BIT   6,A        ; NZ, wenn "write fault"
 +0901 28 0B       (.    JR    Z,090E 
 +0903 2E 04       ..    LD    L,04       ; "write fault"
 +0905 3E 02       >.    LD    A,02       ; Drive 2 selektieren
 +0907 D3 20       .     OUT   (20),A 
 +0909 E6 3F       .?    AND   3F 
 +090B D3 20       .     OUT   (20),A     ; Heads 4..15 gibt es nicht
 +090D C9          .     RET              ;-------------------------------
 +090E 2E 05       ..    LD    L,05       ; "write fault" 
 +0910 C9          .     RET              ;------------------------------ 
 +0911 2E 07       ..    LD    L,07       ; "rec not fnd"
 +0913 DD 35       .5    DEC   (IX+08)    ; Noch einmal
 +0915 08          .     EX    AF,AF' 
 +0916 C0          .     RET   NZ         ; Nach 8 Versuchen:
 +0917 E1          .     POP   HL 
 +0918 DD 36 0B 07 .6..  LD    (IX+0B),07 ; Register fuer Cylinderpos etc. 
 +091C DD 36 08 08 .6..  LD    (IX+08),08 
 +0920 DD 36 07 FF .6..  LD    (IX+07),FF 
 +0924 DD 36 0C FF .6..  LD    (IX+0C),FF 
 +0928 DD 36 0A 00 .6..  LD    (IX+0A),00 
 +092C 3E 20       >     LD    A,20       ; Recalibrate Head
 +092E CD 5B 09    .[.   CALL  095B       ; Kommando ausgeben
 +0931 DD 7E 0B    .~.   LD    A,(IX+0B) 
 +0934 DD 77 07    .w.   LD    (IX+07),A 
 +0937 21 58 09    !X.   LD    HL,0958    ; Dummy-IRQ-Vektor (EI, RETI)
 +093A 22 70 00    "p.   LD    (0070),HL 
 +093D C3 A4 07    ...   JP    07A4       ; RET
 +0940 DD 75 07    .u.   LD    (IX+07),L 
 +0943 C3 A4 07    ...   JP    07A4       ; NOP oder RET (i.d.R RET)
 +0946 3E BB       >.    LD    A,BB       ; Lesemaske setzen 
 +0948 D3 00       ..    OUT   (00),A     ; DMA-Kommando
 +094A 3E 01       >.    LD    A,01       ; BIT0 = Register 0 wird gelesen
 +094C D3 00       ..    OUT   (00),A     ; Register 0 ist Statusregister
 +094E DB 00       ..    IN    A,(00)     ; DMA-Status einlesen (Readregister0)
 +0950 E6 21       .!    AND   21         ; Test, ob DMA laeuft
 +0952 EE 01       ..    XOR   01         ; Kein Blockende und DMA erhielt BCK
 +0954 C8          .     RET   Z          ; DMA- angestossen = 0
 +0955 36 06       6.    LD    (HL),06    ; DMA-failed
 +0957 C9          .     RET 
 +0958 FB          .     EI 
 +0959 ED 4D       .M    RETI             ;--------- Kommando an HDC -------- 
 +095B E1          .     POP   HL         ; in A
 +095C 22 7F 09    "..   LD    (097F),HL  ; Returnaddresse --> CALL Fehler 
 +095F 21 68 09    !h.   LD    HL,0968    ; Interruptserviceroutine
 +0962 22 70 00    "p.   LD    (0070),HL 
 +0965 D3 23       .#    OUT   (23),A     ; Kommando ausgeben
 +0967 C9          .     RET              ;-------- IRQ-Serviceroutine HDC-----
 +0968 F5          .     PUSH  AF 
 +0969 DD E5       ..    PUSH  IX 
 +096B DD 2A BC 09 .*..  LD    IX,(09BC) 
 +096F E5          .     PUSH  HL 
 +0970 DB 08       ..    IN    A,(08)     ; HDC-IRQ ?
 +0972 CB 7F       ..    BIT   7,A 
 +0974 F5          .     PUSH  AF 
 +0975 DB 23       .#    IN    A,(23)     ; Status lesen (wird geloescht)
 +0977 67          g     LD    H,A 
 +0978 3E 00       >.    LD    A,00 
 +097A D3 23       .#    OUT   (23),A     ; Null (quiescent state) Kommando
 +097C F1          .     POP   AF 
 +097D 7C          |     LD    A,H 
 +097E C4 67 09    .g.   CALL  NZ,0967   ; Fehler --> L bringen
 +0981 DB 04       ..    IN    A,(04)    ; Drive/Controller Status FDC 
 +0983 E1          .     POP   HL 
 +0984 DD E1       ..    POP   IX 
 +0986 F1          .     POP   AF 
 +0987 FB          .     EI 
 +0988 ED 4D       .M    RETI             ;----------------------------------- 
 +098A F5          .     PUSH  AF 
 +098B E5          .     PUSH  HL 
 +098C DD E5       ..    PUSH  IX 
 +098E DB 23       .#    IN    A,(23)     ; Status einlesen (dummy)
 +0990 DD 2A BC 09 .*..  LD    IX,(09BC) 
 +0994 3E 40       >@    LD    A,40       ; Welches Kommando ist das ???!!!
 +0996 D3 23       .#    OUT   (23),A 
 +0998 DB 04       ..    IN    A,(04)     ; FDC-Status einlesen
 +099A DD 36 07 08 .6..  LD    (IX+07),08 
 +099E 21 58 09    !X.   LD    HL,0958    ; Dummy-IRQ-Vektor
 +09A1 22 70 00    "p.   LD    (0070),HL 
 +09A4 DD E1       ..    POP   IX 
 +09A6 E1          .     POP   HL 
 +09A7 F1          .     POP   AF 
 +09A8 C9          .     RET              ; DMA-Initialisierungstabelle -HDC-
 +                            ;-DMA-Register 6 (Kommandoregister) "RESET"
 +09A9 C3                                 ; Softreset an DMA-Controller
 +                            ;-DMA-Register 0 (Port A Addressregister) 
 +09AA 7D                                 ; A --> B uebertragen, BL & Adr folgt
 +09AB 00 00                              ; Startaddresse Port A 
 +09AD FF 01                              ; Anzahl Bytes -1 (Bytecount) 
 +                            ;-DMA-Register 1 (Port A Modus)
 +09AF 14                                 ; Port A ist Speicher, INCR Adress
 +                            ;-DMA-Register 2 (Port B Modus) 
 +09B0 28                                 ; Port B ist IO-Port, Adr. konstant 
 +                            ;-DMA-Register 4 (Betriebsart & Port B Adr.reg.)
 +09B1 A5                                 ; Blockmodus, IO-Port B folgt 
 +09B2 21                                 ; 21 = Data I/O-Port fuer HDC
 +                            ;-DMA-Register 5 (Pin-Control)
 +09B3 8A                                 ; Stop am Blockende,Pin16=-CE,RDYakt1
 +                            ;-DMA-Register 6 (Kommando) "LOAD"
 +09B4 CF                                 ; Adresse & BL aus WR0/WR4 laden 
 +09B5 01                                 ; Wegen Maskenfehler: Direction umk. 
 +09B6 CF                                 ;        "         Kommando "LOAD"
 +09B7 01                                 ; 01 : B-->A, 05 : A-->B
 +09B8 CF                                 ; Kommando : "LOAD"
 +09B9 87                                 ; DMA-Freigabe       ------ bis hier
 +09BA 00          .     NOP              ; Bereich fuer IX (retten) 
 +09BB 00          .     NOP 
 +09BC 00          .     NOP              ; Sektornummer, 09BD = Tracknummer 
 +09BD 00          .     NOP              ;------- Floppy-Read anstoss.------ 
 +;============================= Floppy I/O ==================================
 +09BE FD 36 01 9F .6..  LD    (IY+01),9F ; AND-Maske fuer FDC-Status-ready
 +09C2 0E 01       ..    LD    C,01       ; DMA-Read-Kommando
 +09C4 FD 36 02 88 .6..  LD    (IY+02),88 ; FDC-Kommando read
 +09C8 18 0A       ..    JR    09D4 
 +09CA FD 36 01 FF .6..  LD    (IY+01),FF ;------- Floppy-Write anstoss.------ 
 +09CE 0E 05       ..    LD    C,05       ; AND-Maske fuer FDC-Status-ready
 +09D0 FD 36 02 A8 .6..  LD    (IY+02),A8 ; ^ DMA-Write-Kommando,FDC-Kommandowrite 
 +09D4 FD 22 B1 0A ."..  LD    (0AB1),IY  ; IY retten
 +09D8 FB          .     EI 
 +09D9 E5          .     PUSH  HL 
 +09DA 21 C1 0A    !..   LD    HL,0AC1    ; DMA-Direction-Byte
 +09DD 71          q     LD    (HL),C 
 +09DE E1          .     POP   HL 
 +09DF FD 36 0A 46 .6.F  LD    (IY+0A),46 
 +09E3 ED 53 B5 0A .S..  LD    (0AB5),DE  ; Zieladdresse fuer DMA 
 +09E7 FD 36 05 FF .6..  LD    (IY+05),FF 
 +09EB CB BF       ..    RES   7,A 
 +09ED DD BE 07    ...   CP    (IX+07) 
 +09F0 28 1C       (.    JR    Z,0A0E 
 +09F2 DD 77 07    .w.   LD    (IX+07),A 
 +09F5 22 C4 0A    "..   LD    (0AC4),HL  ; track/sektor retten
 +09F8 FD 7E 06    .~.   LD    A,(IY+06) 
 +09FB D3 05       ..    OUT   (05),A     ;  Tracknummer
 +09FD D3 07       ..    OUT   (07),A     ;  Output to FDC
 +09FF 3E 12       >.    LD    A,12       ; FDC-Kommando
 +0A01 CD 76 0A    .v.   CALL  0A76 
 +0A04 FD 7E 09    .~.   LD    A,(IY+09)  ; Floppydrive (Headselect)
 +0A07 CB C7       ..    SET   0,A        ; Single Density
 +0A09 D3 08       ..    OUT   (08),A     ; Floppy Format + Headselect
 +0A0B 2A C4 0A    *..   LD    HL,(0AC4)  ; geretteter Sektor 
 +0A0E 7D          }     LD    A,L        ; Sektornumber
 +0A0F D3 06       ..    OUT   (06),A 
 +0A11 7C          |     LD    A,H        ; Tracknummer
 +0A12 FD BE 06    ...   CP    (IY+06) 
 +0A15 28 0A       (.    JR    Z,0A21 
 +0A17 FD 77 06    .w.   LD    (IY+06),A 
 +0A1A D3 07       ..    OUT   (07),A     ; Outputdatabyte Track setzen
 +0A1C 3E 1A       >.    LD    A,1A       ; FDC-Kommando
 +0A1E CD 76 0A    .v.   CALL  0A76 
 +0A21 DB 08       ..    IN    A,(08)     ; Headloadinput testen
 +0A23 CB 4F       .O    BIT   1,A 
 +0A25 FD 7E 02    .~.   LD    A,(IY+02)  ; Read/Write-Kommando an FDC
 +0A28 20 02        .    JR    NZ,0A2C    ; Head ist auf der Floppy
 +0A2A CB D7       ..    SET   2,A        ; Head muss noch auf Floppy
 +0A2C 21 B3 0A    !..   LD    HL,0AB3    ; DMA-Tabelle 
 +0A2F 01 00 11    ...   LD    BC,1100    ; 17 Bytes in DMA schreiben
 +0A32 ED B3       ..    OTIR 
 +0A34 CD 76 0A    .v.   CALL  0A76       ; FDC-Kommando ausgeben (starten)
 +0A37 FD 36 0A FF .6..  LD    (IY+0A),FF 
 +0A3B 21 AE 0A    !..   LD    HL,0AAE 
 +0A3E 22 70 00    "p.   LD    (0070),HL 
 +0A41 DB 04       ..    IN    A,(04)     ; FDC - Status
 +0A43 FD A6 01    ...   AND   (IY+01)    ; maske fuer 'fehler'
 +0A46 CB 7F       ..    BIT   7,A 
 +0A48 20 11        .    JR    NZ,0A5B    ; ist noch busy
 +0A4A B7          .     OR    A          ; Irgendwelche Fehler ?
 +0A4B 20 05        .    JR    NZ,0A52 
 +0A4D FD 36 05 00 .6..  LD    (IY+05),00 ; Kein Fehler, "ok"
 +0A51 C9          .     RET 
 +0A52 CB 67       .g    BIT   4,A        ; CRC ?
 +0A54 20 0A        .    JR    NZ,0A60 
 +0A56 FD 36 05 02 .6..  LD    (IY+05),02 ; Fehler "crc err"
 +0A5A C9          .     RET 
 +0A5B FD 36 05 01 .6..  LD    (IY+05),01 ; Fehler 1 : "busy"
 +0A5F C9          .     RET 
 +0A60 FD 36 05 FF .6..  LD    (IY+05),FF ; Interrupt noch nicht beendet setz.
 +0A64 3E 0A       >.    LD    A,0A       ; Kommando 10 an FDC
 +0A66 CD 76 0A    .v.   CALL  0A76 
 +0A69 FD 36 05 02 .6..  LD    (IY+05),02 ; Fehler 2 : "crc err"
 +0A6D DB 04       ..    IN    A,(04)     ; FDC-Status
 +0A6F 21 AE 0A    !..   LD    HL,0AAE    ; Dummy-IRQ Vektor (EI, RETI)
 +0A72 22 70 00    "p.   LD    (0070),HL  ; eintragen
 +0A75 C9          .     RET              ;----------FDC Kommandoausgeben----
 +0A76 E1          .     POP   HL         ; Returnaddresse = Fehlernr.laden
 +0A77 22 A5 0A    "..   LD    (0AA5),HL 
 +0A7A 21 96 0A    !..   LD    HL,0A96 
 +0A7D 22 70 00    "p.   LD    (0070),HL  ; Floppy IRQ-Vektor setzen
 +0A80 D3 04       ..    OUT   (04),A     ; 1797 FDC Command
 +0A82 C9          .     RET              ;----------------------------------
 +0A83 F5          .     PUSH  AF 
 +0A84 FD 2A B1 0A .*..  LD    IY,(0AB1)  ; geretteter IY
 +0A88 FD 36 05 02 .6..  LD    (IY+05),02 ; "crc err"
 +0A8C E5          .     PUSH  HL 
 +0A8D 21 AE 0A    !..   LD    HL,0AAE    ; Dummy-Interrupt-Vektor
 +0A90 22 70 00    "p.   LD    (0070),HL 
 +0A93 E1          .     POP   HL 
 +0A94 F1          .     POP   AF 
 +0A95 C9          .     RET              ;----- IRQ-Service-Routine ---------
 +0A96 FB          .     EI               ; 
 +0A97 FD E5       ..    PUSH  IY 
 +0A99 E5          .     PUSH  HL 
 +0A9A C5          .     PUSH  BC 
 +0A9B F5          .     PUSH  AF 
 +0A9C FD 2A B1 0A .*..  LD    IY,(0AB1)  ; geretteter IY
 +0AA0 DB 08       ..    IN    A,(08)     ; IRQ-Anford.Register
 +0AA2 CB 77       .w    BIT   6,A        ; BIT6=FDC IRQ aufgetreten
 +0AA4 C4 82 0A    ...   CALL  NZ,0A82    ; Returnaddresse in CALL-Addresse
 +0AA7 DB 23       .#    IN    A,(23)     ; Statusbyte Harddisk loeschen
 +0AA9 F1          .     POP   AF 
 +0AAA C1          .     POP   BC 
 +0AAB E1          .     POP   HL 
 +0AAC FD E1       ..    POP   IY 
 +0AAE FB          .     EI 
 +0AAF ED 4D       .M    RETI             ;-----------------------------------
 +0AB1 00          .     NOP              ; Platz zum retten von IY 
 +0AB2 00          .     NOP              ;- DMA-Initialisierung fuer FDC --- 
 +0AB3 C3                                 ; Softreset an DMA-Controller
 +                            ;-DMA-Register 0 (Port A Addressregister) 
 +0AB4 7D                                 ; A --> B uebertragen, BL & Adr folgt
 +0AB5 00 00                              ; Startaddresse Port A 
 +0AB7 FF 01                              ; Anzahl Bytes -1 (Bytecount) 
 +                            ;-DMA-Register 1 (Port A Modus)
 +0AB9 14                                 ; Port A ist Speicher, INCR Adress
 +                            ;-DMA-Register 2 (Port B Modus) 
 +0ABA 28                                 ; Port B ist IO-Port, Adr. konstant 
 +                            ;-DMA-Register 4 (Betriebsart & Port B Adr.reg.)
 +0ABB 85                                 ; Einzelbytemodus(!) IO-Port B folgt 
 +0ABC 07                                 ; 01 = Data I/O-Port fuer FDC
 +                            ;-DMA-Register 5 (Pin-Control)
 +0ABD 8A                                 ; Stop am Blockende,Pin16=-CE,RDYakt1
 +                            ;-DMA-Register 6 (Kommando) "LOAD"
 +0ABE CF                                 ; Adresse & BL aus WR0/WR4 laden 
 +0ABF 01                                 ; Wegen Maskenfehler: Direction umk. 
 +0AC0 CF                                 ;        "         Kommando "LOAD"
 +0AC1 01                                 ; 01 : B-->A, 05 : A-->B
 +0AC2 CF                                 ; Kommando : "LOAD"
 +0AC3 87                                 ; DMA-Freigabe       ------ bis hier
 +0AC4 00 00                              ;---------------------------------- 
 +;=========================== Parallel Kanaele =============================
 +0AC6 01 5F 06                           ; 1 IOCONTROL "typ"
 +0AC9 02 7B 0B                           ; 2 IOCONTROL "frout"
 +0ACC 05 46 06                           ; 5 IOCONTROL "size"
 +0ACF FD 07 0B                           ; -3 IOCONTROL "Printerstat --> BC" 
 +0AD2 FC FF 0A                           ; -4 IOCONTROL"code2 --> Printerport" 
 +0AD5 FB 03 0B                           ; -5 IOCONTROL"code2 --> Pstatusport"
 +0AD8 FF 4C 06                           ; -1 IOCONTROL ill.
 +0ADB E2 0D 0B                           ; -30 Aufg. 5, Maske fuer Busy-Status
 +0ADE E1 14 0B                           ; -31 Aufg. 5, Maske fuer Printerstb.
 +0AE1 FE F1 0A                           ; -2  Aufg. 5 = Kanal init
 +0AE4 FF 55 06                           ; -1, Aufg. 5 --> BC = 1 
 +0AE7 FF 4C 06                           ; -1, BLOCKIN, BLOCKOUT ill.
 +0AEA 1E                                 ; Parallel 0B1E = OUTPUT
 +0AEB 0B          .     DEC   BC 
 +0AEC FD          .                      ; BLOCKIN : 0AE7
 +0AED FD          .                      ; BLOCKOUT : 0AE7
 +0AEE DC                                 ; IOCONTROL : 0AC6
 +0AEF F1                                 ; Aufg. 5 : 0ADB
 +0AF0 03                                 ; Typ : Input/Ouput (Stream)
 +0AF1 DB 10       ..    IN    A,(10)     ;-------- Kanal Init --------------- 
 +0AF3 FD A6 03    ...   AND   (IY+03)    ; Printer selektieren
 +0AF6 FD AE 04    ...   XOR   (IY+04) 
 +0AF9 FD AE 05    ...   XOR   (IY+05) 
 +0AFC D3 10       ..    OUT   (10),A     ; Ausgabe an Printerstatusport
 +0AFE C9          .     RET              ;----------- "IOCONTROL -4" --------
 +0AFF 7B          {     LD    A,E        ; Printerdata direkt ausgeben 
 +0B00 D3 11       ..    OUT   (11),A 
 +0B02 C9          .     RET              ;---------- "IOCONTROL -5"- --------
 +0B03 7B          {     LD    A,E        ; datastrobe, input prime, control 
 +0B04 D3 10       ..    OUT   (10),A     ; An Statusport (printer) ausgeben 
 +0B06 C9          .     RET              ;-------- "IOCONTROL -3" -----------
 +0B07 DB 10       ..    IN    A,(10)     ; Liest der Printerstatus ein 
 +0B09 4F          O     LD    C,A 
 +0B0A 06 00       ..    LD    B,00 
 +0B0C C9          .     RET              ;----- Aufg. 5, "-14" -------------- 
 +0B0D FD 73 01    .s.   LD    (IY+01),E  ; code2 --> AND/XOR Masken "Busy"
 +0B10 FD 72 02    .r.   LD    (IY+02),D 
 +0B13 C9          .     RET              ;----- Aufg. 5, "-15" ------------- 
 +0B14 FD 73 03    .s.   LD    (IY+03),E  ; code2, code3 --> Maske "selekt" 
 +0B17 FD 72 04    .r.   LD    (IY+04),D 
 +0B1A FD 74 05    .t.   LD    (IY+05),H 
 +0B1D C9          .     RET              ;--------- "OUTPUT" --------------- 
 +0B1E 78          x     LD    A,B        ; Nichts auszugeben ? 
 +0B1F B1          .     OR    C 
 +0B20 37          7     SCF 
 +0B21 C8          .     RET   Z 
 +0B22 C5          .     PUSH  BC 
 +0B23 DB 10       ..    IN    A,(10)     ; Status einelsen
 +0B25 FD A6 03    ...   AND   (IY+03)    ; Printerselekt.
 +0B28 FD AE 04    ...   XOR   (IY+04) 
 +0B2B 57          W     LD    D,A 
 +0B2C FD AE 05    ...   XOR   (IY+05) 
 +0B2F 5F          _     LD    E,A 
 +0B30 E5          .     PUSH  HL 
 +0B31 09          .     ADD   HL,BC      ; Ende des Textes
 +0B32 E3          .     EX    (SP),HL 
 +0B33 41          A     LD    B,C        ; Textlaenge Low (Pbuffersize < 256)
 +0B34 0E 11       ..    LD    C,11       ; Dataport = 11H
 +0B36 DB 10       ..    IN    A,(10)     ; Printer busy ?
 +0B38 FD A6 01    ...   AND   (IY+01) 
 +0B3B FD AE 02    ...   XOR   (IY+02) 
 +0B3E 20 1B        .    JR    NZ,0B5B    ; testen, ob printer da
 +0B40 ED A3       ..    OUTI             ; Ein Zeichen ausgeben
 +0B42 7A          z     LD    A,D 
 +0B43 D3 10       ..    OUT   (10),A     ; Printer Strobe an
 +0B45 7B          {     LD    A,E 
 +0B46 D3 10       ..    OUT   (10),A     ; printer Strobe aus
 +0B48 20 EC        .    JR    NZ,0B36    ; Naechstes Zeichen
 +0B4A 44          D     LD    B,H 
 +0B4B 4D          M     LD    C,L 
 +0B4C E1          .     POP   HL 
 +0B4D E5          .     PUSH  HL 
 +0B4E B7          .     OR    A          ; Anzahl Restzeichen --> BC
 +0B4F ED 42       .B    SBC   HL,BC 
 +0B51 E5          .     PUSH  HL 
 +0B52 C5          .     PUSH  BC 
 +0B53 E1          .     POP   HL 
 +0B54 C1          .     POP   BC 
 +0B55 20 DC        .    JR    NZ,0B33    ; Nochmal mit dem rest aufrufen
 +0B57 E1          .     POP   HL 
 +0B58 C1          .     POP   BC 
 +0B59 37          7     SCF              ; Alles uebernommen 
 +0B5A C9          .     RET              ;----------
 +0B5B CD 72 0B    .r.   CALL  0B72       ; test,. ob printer bereit
 +0B5E 28 E0       (.    JR    Z,0B40 
 +0B60 CD 72 0B    .r.   CALL  0B72 
 +0B63 28 DB       (.    JR    Z,0B40     
 +0B65 54          T     LD    D,H 
 +0B66 5D          ]     LD    E,L        
 +0B67 E1          .     POP   HL 
 +0B68 B7          .     OR    A 
 +0B69 ED 52       .R    SBC   HL,DE 
 +0B6B EB          .     EX    DE,HL 
 +0B6C E1          .     POP   HL         
 +0B6D ED 52       .R    SBC   HL,DE      ; Nicht alles uebernommen
 +0B6F 44          D     LD    B,H 
 +0B70 4D          M     LD    C,L 
 +0B71 C9          .     RET              ; ----------- "printerstatus" ----- 
 +0B72 DB 10       ..    IN    A,(10)     ; Status einlesen
 +0B74 FD A6 01    ...   AND   (IY+01)    ; Maskieren 
 +0B77 FD AE 02    ...   XOR   (IY+02)    ; Kanal 7..9 selektieren 
 +0B7A C9          .     RET              ;-------------- "frout" ------------ 
 +0B7B CD 72 0B    .r.   CALL  0B72       ; Puffer voll ?
 +0B7E CA 50 06    .P.   JP    Z,0650     ; Nein, kann 200 Zeichen uebernehmen 
 +0B81 B7          .     OR    A 
 +0B82 01 00 00    ...   LD    BC,0000    ; Druckerpuffer voll --> 0 Zeichen 
 +0B85 C9          .     RET              ;--------- Aufg. 5 -2 ------------- 
 +;================== Sonstige Shard-Routinen (Non I/O) =====================
 +0B86 C3 12 08    ...   JP    0812       ; Init Parameterkanal = Timerinit 
 +0B89 ED B0       ..    LDIR             ;------------ "LONGMOVE" ----------- 
 +0B8B C9          .     RET              ;------------- "LIMIT" ------------- 
 +0B8C 11 FF FF    ...   LD    DE,FFFF    ; Geht bis zum RAM-Ende
 +0B8F C9          .     RET              ;------------ "SCHINF" ------------- 
 +0B90 01 00 00    ...   LD    BC,0000    ; Kein Schattenspeicher vorhanden ? 
 +0B93 C9          .     RET              ;------------ "SCHACC" --------------
 +0B94 F5          .     PUSH  AF 
 +0B95 E5          .     PUSH  HL 
 +0B96 CB 2C       .,    SRA   H 
 +0B98 CB 1D       ..    RR    L 
 +0B9A 7D          }     LD    A,L 
 +0B9B CD AD 0B    ...   CALL  0BAD 
 +0B9E E1          .     POP   HL                           ?
 +0B9F 7D          }     LD    A,L 
 +0BA0 21 00 FC    !..   LD    HL,FC00 
 +0BA3 CB 47       .G    BIT   0,A 
 +0BA5 28 03       (.    JR    Z,0BAA 
 +0BA7 21 00 FE    !..   LD    HL,FE00 
 +0BAA F1          .     POP   AF 
 +0BAB C9          .     RET 
 +0BAC C9          .     RET              ; -----------"SYSEND"-------------- 
 +0BAD C9          .     RET              ; ----- SHARD-fehler melden ------ 
 +0BAE E1          .     POP   HL         ; Ruecksprungaddresse 
 +0BAF E3          .     EX    (SP),HL 
 +0BB0 21 CD 0B    !..   LD    HL,0BCD    ; Tabellenanfang Fehlernummer + text
 +0BB3 16 00       ..    LD    D,00 
 +0BB5 4E          N     LD    C,(HL)     ; Textnummer aus Tabelle 
 +0BB6 23          #     INC   HL 
 +0BB7 B9          .     CP    C          ; gesucht und gefunden ?
 +0BB8 28 09       (.    JR    Z,0BC3     ; Ja, gefunden. Nummer melden
 +0BBA 0C          .     INC   C          ; Naechste Fehlernummer
 +0BBB 28 06       (.    JR    Z,0BC3 
 +0BBD 23          #     INC   HL 
 +0BBE 5E          ^     LD    E,(HL) 
 +0BBF 23          #     INC   HL 
 +0BC0 19          .     ADD   HL,DE 
 +0BC1 18 F2       ..    JR    0BB5       ; Naechsten nehmen
 +0BC3 4E          N     LD    C,(HL)     ; Fehlernummer in BC
 +0BC4 06 00       ..    LD    B,00 
 +0BC6 23          #     INC   HL 
 +0BC7 E3          .     EX    (SP),HL    ; Zur Rueckspungaddresse
 +0BC8 E9          .     JP    (HL) 
 +0BC9 3E 09       >.    LD    A,09       ; Block zu hoch
 +0BCB 18 E1       ..    JR    0BAE       ; melden ------------------------
 +0BCD 01 01 09    ...   LD    BC,0901    ; #1 : "not ready", Typ 1
 +0BD0 6E          n     LD    L,(HL) 
 +0BD1 6F          o     LD    L,A 
 +0BD2 74          t     LD    (HL),H 
 +0BD3 20 72        r    JR    NZ,0C47 
 +0BD5 65          e     LD    H,L 
 +0BD6 61          a     LD    H,C        
 +0BD7 64          d     LD    H,H 
 +0BD8 79          y     LD    A,C 
 +0BD9 02          .     LD    (BC),A     ; #2 : "crc err". Typ 2
 +0BDA 02          .     LD    (BC),A 
 +0BDB 07          .     RLCA 
 +0BDC 63          c     LD    H,E 
 +0BDD 72          r     LD    (HL),D 
 +0BDE 63          c     LD    H,E        
 +0BDF 20 65        e    JR    NZ,0C46 
 +0BE1 72          r     LD    (HL),D     
 +0BE2 72          r     LD    (HL),D 
 +0BE3 03          .     INC   BC         ; #3 : "bad sect". Typ 2
 +0BE4 02          .     LD    (BC),A 
 +0BE5 08          .     EX    AF,AF' 
 +0BE6 62          b     LD    H,D 
 +0BE7 61          a     LD    H,C 
 +0BE8 64          d     LD    H,H 
 +0BE9 20 73        s    JR    NZ,0C5E 
 +0BEB 65          e     LD    H,L 
 +0BEC 63          c     LD    H,E 
 +0BED 74          t     LD    (HL),H 
 +0BEE 04          .     INC   B          ; #4 : "write fault". Typ 2
 +0BEF 02          .     LD    (BC),A 
 +0BF0 0B          .     DEC   BC 
 +0BF1 77          w     LD    (HL),A 
 +0BF2 72          r     LD    (HL),D 
 +0BF3 69          i     LD    L,C 
 +0BF4 74          t     LD    (HL),H 
 +0BF5 65          e     LD    H,L 
 +0BF6 20 66        f    JR    NZ,0C5E    
 +0BF8 61          a     LD    H,C 
 +0BF9 75          u     LD    (HL),L 
 +0BFA 6C          l     LD    L,H 
 +0BFB 74          t     LD    (HL),H 
 +0BFC 05          .     DEC   B          ; #5 : "busy". Typ 2
 +0BFD 02          .     LD    (BC),A 
 +0BFE 04          .     INC   B 
 +0BFF 62          b     LD    H,D        
 +0C00 75          u     LD    (HL),L 
 +0C01 73          s     LD    (HL),E     
 +0C02 79          y     LD    A,C        
 +0C03 06 02       ..    LD    B,02       ; #6 : "dma failed". Typ 2
 +0C05 0A          .     LD    A,(BC) 
 +0C06 64          d     LD    H,H 
 +0C07 6D          m     LD    L,L 
 +0C08 61          a     LD    H,C        
 +0C09 20 66        f    JR    NZ,0C71 
 +0C0B 61          a     LD    H,C        
 +0C0C 69          i     LD    L,C 
 +0C0D 6C          l     LD    L,H 
 +0C0E 65          e     LD    H,L 
 +0C0F 64          d     LD    H,H 
 +0C10 07          .     RLCA             ; #7 : "rec not fnd". Typ 2
 +0C11 02          .     LD    (BC),A 
 +0C12 0B          .     DEC   BC 
 +0C13 72          r     LD    (HL),D     
 +0C14 65          e     LD    H,L 
 +0C15 63          c     LD    H,E 
 +0C16 20 6E        n    JR    NZ,0C86 
 +0C18 6F          o     LD    L,A 
 +0C19 74          t     LD    (HL),H     
 +0C1A 20 66        f    JR    NZ,0C82 
 +0C1C 6E          n     LD    L,(HL) 
 +0C1D 64          d     LD    H,H 
 +0C1E 08          .     EX    AF,AF'     ; #8 : "timeout". Typ 2
 +0C1F 02          .     LD    (BC),A 
 +0C20 07          .     RLCA 
 +0C21 74          t     LD    (HL),H 
 +0C22 69          i     LD    L,C 
 +0C23 6D          m     LD    L,L        
 +0C24 65          e     LD    H,L 
 +0C25 6F          o     LD    L,A 
 +0C26 75          u     LD    (HL),L 
 +0C27 74          t     LD    (HL),H 
 +0C28 09          .     ADD   HL,BC      ; #9 : "block zu hoch". Typ 3
 +0C29 03          .     INC   BC 
 +0C2A 0D          .     DEC   C 
 +0C2B 62          b     LD    H,D 
 +0C2C 6C          l     LD    L,H 
 +0C2D 6F          o     LD    L,A 
 +0C2E 63          c     LD    H,E 
 +0C2F 6B          k     LD    L,E 
 +0C30 20 7A        z    JR    NZ,0CAC 
 +0C32 75          u     LD    (HL),L 
 +0C33 20 68        h    JR    NZ,0C9D 
 +0C35 6F          o     LD    L,A        
 +0C36 63          c     LD    H,E 
 +0C37 68          h     LD    L,B 
 +0C38 FF          .     RST   38         ; #255 : "wrg err code". Typ 1 
 +0C39 01 0C 77    ..w   LD    BC,770C 
 +0C3C 72          r     LD    (HL),D 
 +0C3D 67          g     LD    H,A 
 +0C3E 20 65        e    JR    NZ,0CA5 
 +0C40 72          r     LD    (HL),D 
 +0C41 72          r     LD    (HL),D 
 +0C42 20 63        c    JR    NZ,0CA7 
 +0C44 6F          o     LD    L,A 
 +0C45 64          d     LD    H,H 
 +0C46 65          e     LD    H,L 
 +;=============================== Semaphorhandler =========================== 
 +0C47 35          5     DEC   (HL)       ; --- Semaphor (HL) testen, warte -- 
 +0C48 34          4     INC   (HL) 
 +0C49 36 01       6.    LD    (HL),01    ; Semaphor belegen 
 +0C4B C8          .     RET   Z          ; unbeleget, return
 +0C4C E5          .     PUSH  HL         ; Register fuer 'warte' retten
 +0C4D DD E5       ..    PUSH  IX 
 +0C4F FD E5       ..    PUSH  IY 
 +0C51 C5          .     PUSH  BC 
 +0C52 D5          .     PUSH  DE 
 +0C53 F5          .     PUSH  AF 
 +0C54 CD 19 1E    ...   CALL  1E19       ; "warte" bis Semaphor frei
 +0C57 F1          .     POP   AF 
 +0C58 D1          .     POP   DE 
 +0C59 C1          .     POP   BC 
 +0C5A FD E1       ..    POP   IY 
 +0C5C DD E1       ..    POP   IX 
 +0C5E E1          .     POP   HL 
 +0C5F 18 E6       ..    JR    0C47      ; Semaphor jetzt frei ? 
 +0C61 36 00       6.    LD    (HL),00    ; -------- Sempahor freigeben ------ 
 +0C63 C9          .     RET 
 +;=========================== Kanalpuffer + Kanalstatusbytes ================ 
 + 
 +;----------------------------- Hintergrund Kanal 0 ------------------------
 +0C64 00                                 ; Hintergrund 
 +0C65 FF 43                              ; letzter EUMEL-Block (8,5MB)
 +0C67 00 00                              ; erster EUMEL-Block
 + 
 +;----------------------------- Serieller Kanal 1 ------------------------- 
 +0C69 FF                                 ; 100 Bytes Puffer fuer Kanal 1
 +     ... 
 +0CCC FF 
 +0CCD 01                           IY+00 ; Kanal 1 
 +0CCE 03                              01 ; Flusskontrollen Bits 
 +                                          BIT 0 : 
 +                                          BIT 1 : 0 = XOFF-Status, 1=XON
 +                                          BIT 2 : XON/XOFF bei receive
 +                                          BIT 3 : XON/XOFF bei transmit
 +0CCF 64                              02 ; Puffergroesse = 100 
 +0CD0 00                              03 ; Pufferzeiger Write
 +0CD1 00                              04 ; Pufferzeiger Read 
 +0CD2 00                              05 ; 
 +0CD3 69 0C                           06 ; 0C69 = Pufferanfang 
 +0CD5 7F                              08 ; AND-maske f. fehlerfreien receive 
 +0CD6 00                              09 ; Datenbitmaske XOR   "
 +0CD7 7F                              0A ; AND-maske f. fehlerhaften reiceive 
 +0CD8 00                              0B ; Datenbitmaske XOR  "
 +0CD9 7F                              0C ; Maske fuer Read aus Puffer AND
 +0CDA 00                              0D ;    "                       XOR
 +0CDB 3F        ?                     0E ; Zeichen fuer Fehlerhaften Receive 
 +0CDC 13                              0F ; 19 = Stop (XOFF)
 +0CDD 11                              10 ; 17 = Weiter (XON)
 +0CDE 02                              11 ; BIT 1 = 1 : Baudrateeinst. moegl. 
 +                                        ; BIT 0 = 1 : RTS/CTS 
 +0CDF 04                              12 ; AND-Maske Test Statusport (TxDfull)
 +0CE0 04                              13 ; XOR-Maske f. TxDfull (ggf invert.)
 +0CE1 00                              14 ; DTR/RTS - Bits im Register 5 (82H)
 +0CE2 00                              15 ; OR-Register fuer V24-Errors
 +0CE3 00                              16 ; AND-Maske fuer zulaessige Fehler
 +0CE4 C1                              17 ; Register 3 (Rxbits, Autoenables) 
 +0CE5 44                              18 ; Register 4 (Stopb., Clock, parity) 
 +0CE6 EA                              19 ; Register 5 (Txbits, RTS, DTR)
 +0CE7 1D                              1A ; Port Kanal 1 Status/Command
 +0CE8 1C                              1B ; Datenport Kanal 1 : DART Channel A
 +0CE9 0C                              1C ; BR-Generatorport: CTC1 - Kanal 0
 +0CEA 88                              1D ; Interruptvektor Kanal 1 
 +0CEB CD 56 04          CALL  0456       ; Transmitbuffer empty IRQ 
 +0CEE CD 6B 04          CALL  046B       ; External/Status Change IRQ 
 +0CF1 CD BA 04          CALL  04BA       ; Receive Character available IRQ 
 +0CF4 CD 85 04          CALL  0485       ; Special Receive condition IRQ
 + 
 +;----------------------------- Serieller Kanal 2 -------------------------- 
 +0CF7 FF                                 ; 100 Bytes Puffer Kanal 2 
 +     ...
 +0D5A FF 
 +0D5B 02                                 ; Kanal 2 
 +0D5C 03                                 ; Flusskontrollenbits
 +0D5D 64                                 ; 100 = Puffergroesse
 +0D5E 00 00 00                           ; Pufferzeiger
 +0D61 F7 0C                              ; 0CF7 = Pufferanfang Kanal 2
 +0D63 7F 00                              ; Masken fuer fehlerfreiene Receive
 +0D65 7F 00                              ;          "  fehlerhaften Receive 
 +0D67 7F 00                              ; Masken fuer read aus Puffer 
 +0D69 3F          ?                      ; Zeichen fuer fehlerhaften receive 
 +0D6A 13 11                              ; XOFF/XON Zeichen 
 +0D6C 02                                 ; Baudrateeinstellung moeglich 
 +0D6D 04 04                              ; Masken fuer Test Statusport:TxDfull
 +0D6F 00                                 ; DTR/RTS Bits in Register 5
 +0D70 00 00                              ; Masken fuer zulaessige Fehler 
 +0D72 C1 44 EA                           ; Register 3, 4, 5 Werte
 +0D75 1F                                 ; Port Kanal 2 Status / Command 
 +0D76 1E                                 ; Datenport Kanal 2 : DART Channel B 
 +0D77 0E                                 ; BR-Generatorport: CTC1 - Kanal 1
 +0D78 80                                 ; Interruptvektor Kanal 2
 +0D79 CD 56 04          CALL  0456       ; Interruptroutinen
 +0D7C CD 6B 04          CALL  046B 
 +0D7F CD BA 04          CALL  04BA 
 +0D82 CD 85 04          CALL  0485 
 + 
 +;------------------------------ Serieller kanal 3 -------------------------
 +0D85 FF                                 ; 100 Byte Datenpuffer (Senden)
 +     ... 
 +0DE8 FF 
 +0DE9 03                                 ; Kanal 3 
 +0DEA 03                                 ; Flusskontrollenbits 
 +0DEB 64                                 ; Puffergroesse 
 +0DEC 00 00 00                           ; Pufferzeiger
 +0DEF 85 0D                              ; Pufferanfang Kanal 3 : 0D85 
 +0DF1 7F 00                              ; Datenbitsmasken s.o
 +0DF3 7F 00                              ;   "
 +0DF5 7F 00                              ;   "
 +0DF7 3F        ?                        ; Zeichen bei fehlerhaftem Receive
 +0DF8 13 11                              ; XOFF/XON Zeichen 
 +0DFA 02                                 ; Baudrateeinstellung moeglich 
 +0DFB 04 04                              ; Masken fuer Test Statusport:TxDfull 
 +0DFD 00                                 ; DTR/RTS Bits in register 5 (82H) 
 +0DFE 00 00                              ; Masken fuer zulaessige Fehler 
 +0E00 C1 44 EA                           ; Register 3, 4, 5 Werte 
 +0E03 29                                 ; Port Kanal 3 Status / Command 
 +0E04 28                                 ; Datenport Kanal 3 : SIO 1 Channel A
 +0E05 32                                 ; BR-generatorport: CTC2 - Kanal 2 
 +0E06 98                                 ; Interruptvektor Kanal 3
 +0E07 CD 56 04          CALL  0456       ; Interruptroutinen
 +0E0A CD 6B 04          CALL  046B 
 +0E0D CD BA 04          CALL  04BA 
 +0E10 CD 85 04          CALL  0485 
 + 
 +;--------------------------------- Serieller Kanal 4 ----------------------- 
 +0E13 FF                                 ; 100 Bytes Kanalpuffer 
 +     ... 
 +0E76 FF 
 +0E77 04                                 ; Kanal 4 
 +0E78 03                                 ; Flusskontrollenbits 
 +0E79 64                                 ; Puffergroesse 
 +0E7A 00 00 00                           ; Pufferzeiger 
 +0E7D 13 0E                              ; Pufferanfang Kanal 4 : 0E13
 +0E7F 7F 00                              ; Datenbitmasken s.o. 
 +0E81 7F 00 
 +0E83 7F 00 
 +0E85 3F          ?                      ; Zeichen bei fehlerhaften Receive 
 +0E86 13 11                              ; XOFF/XON Zeichen 
 +0E88 02                                 ; Baudrateeinstellung moeglich 
 +0E89 04 04                              ; Masken fuer TxDfull Status 
 +0E8B 00                                 ; RTS/DTR Bits (82H) 
 +0E8C 00 00                              ; Masken fuer zulaessige Fehler 
 +0E8E C1 44 EA                           ; Register 3, 4, 5 Werter 
 +0E91 2B                                 ; Port Kanal 4 Status/Command 
 +0E92 2A                                 ; Datenport kanal 4 : SIO 1 Channel B
 +0E93 31                                 ; BR-Generatorport: CTC2 - Kanal 1
 +0E94 90                                 ; Interruptvektor Kanal 4
 +0E95 CD 56 04          CALL  0456       ; Interruptroutinen 
 +0E98 CD 6B 04          CALL  046B 
 +0E9B CD BA 04          CALL  04BA 
 +0E9E CD 85 04          CALL  0485 
 + 
 +;-------------------------------- Serieller Kanal 5 -----------------------
 +0EA1 FF                                 ; 100 Bytes Ausgabepuffer
 +     ... 
 +0F04 FF 
 +0F05 05                                 ; Kanal 5 
 +0F06 03                                 ; Flusskontrollenbits 
 +0F07 64                                 ; Puffergroesse 
 +0F08 00 00 00                           ; Pufferzeiger 
 +0F0B A1 0E                              ; Pufferanfang : 0EA1 
 +0F0D 7F 00                              ; Datenbitmasken s.o. 
 +0F0F 7F 00                              ;   "
 +0F11 7F 00                              ;   " 
 +0F13 3F          ?                      ; Zeichen fuer fehlerhaften Receive
 +0F14 13 11                              ; XOFF/XON Zeichen 
 +0F16 02                                 ; Baudrateeinstellung moeglich 
 +0F17 04 04                              ; Maskenbits fuer Status TxDfull
 +0F19 00                                 ; RTS/DTR Bits (82H) 
 +0F1A 00 00                              ; Masken fuer zulaessige fehler 
 +0F1C C1 44 EA                           ; Register 3, 4, 5 Werte 
 +0F1F 2D                                 ; Port Kanal 5 Status / Command 
 +0F20 2C                                 ; Datenport kanal 5 : SIO 2 Channel A
 +0F21 30                                 ; BR-Generatorport: CTC2 - Kanal 0
 +0F22 A8                                 ; Interruptvektor Kanal 5 
 +0F23 CD 56 04          CALL  0456       ; Interruptroutinen
 +0F26 CD 6B 04          CALL  046B 
 +0F29 CD BA 04          CALL  04BA 
 +0F2C CD 85 04          CALL  0485 
 + 
 +;--------------------------- Serieller kanal 6 ---------------------------- 
 +0F2F FF                                 ; 100 Bytes ausgabepuffer 
 +     ... 
 +0F92 FF 
 +0F93 06                                 ; Kanal 6 
 +0F94 03                                 ; Flusskontrollenbits
 +0F95 64                                 ; Puffergroesse
 +0F96 00 00 00                           ; Pufferzeiger 
 +0F99 2F 0F                              ; Pufferanfang Kanal 6 : 0F2F 
 +0F9B 7F 00                              ; Datenbitmasken s.o. 
 +0F9D 7F 00                              ;      " 
 +0F9F 7F 00                              ;      " 
 +0FA1 3F          ?                      ; Zeichen fuer fehlerhaften Receive
 +0FA2 13 11                              ; XOFF/XON Zeichen 
 +0FA4 02                                 ; Baudrateeinstellung moeglich 
 +0FA5 04 04                              ; Maskenbits Status TxDfull 
 +0FA7 00                                 ; RTS/DTR Bits in Register 5 
 +0FA8 00 00                              ; Masken fuer zulaessige Fehler 
 +0FAA C1 44 EA                           ; Register 3, 4, 5 Werte 
 +0FAD 2F                                 ; Port Kanal 6 : Status / Command 
 +0FAE 2E                                 ; Datenport kanal 6 : SIO 2 Channel B
 +0FAF 31                                 ; BR-Generatorport : CTC2 - Kanal 1 
 +0FB0 A0                                 ; Interruptvektor kanal 6 
 +0FB1 CD 56 04          CALL  0456       ; Interruptroutinen
 +0FB4 CD 6B 04          CALL  046B 
 +0FB7 CD BA 04          CALL  04BA 
 +0FBA CD 85 04          CALL  0485 
 + 
 +;------------------------------- Parallelkanal 7 --------------------------
 +0FBD 07                                 ; Kanal 7 
 +0FBE 20                                 ; AND-Maske fuer Printerbusy
 +0FBF 00                                 ; XOR-Maske f. Printer 0 busy
 +0FC0 FE                                 ; AND-Maske fuer Printerstrobe
 +0FC1 00                                 ; XOR-Maske1 fuer Printerstrobe an
 +0FC2 01                                 ; XOR-Maske2 fuer Printerstrobe aus
 + 
 +;------------------------------- Parallel Kanal 8 ------------------------- 
 +0FC3 08                                 ; Kanal 8 
 +0FC4 40                                 ; AND-Maske fuer Printerbusy
 +0FC5 00                                 ; XOR-Maske fuer Printer 1 busy
 +0FC6 FD                                 ; AND-Maske fuer Printerstrobe
 +0FC7 00                                 ; XOR-Maske1 fuer Printerstrobe an
 +0FC8 02                                 ; XOR-Maske2 fuer Printerstrobe aus
 + 
 +;------------------------------ Parallel kanal 9 -------------------------- 
 +0FC9 09                                 ; Kanal 9 
 +0FCA 80                                 ; AND-Maske f. Printerbusy
 +0FCB 00                                 ; XOR-Maske f. Printer 2 busy
 +0FCC FB                                 ; AND-Maske fuer Printerstrobe
 +0FCD 00                                 ; XOR-Maske1 fuer Printerstrobe an
 +0FCE 04                                 ; XOR-maske2 fuer Printerstrobe aus
 + 
 +;----------------------------- Floppy Kanal 31 ---------------------------- 
 +0FCF 1F                                 ; Kanal 31 
 +0FD0 00                                 ; IY+00
 +0FD1 00                                 ; IY+01 FDC-AND-Maske Status-ready
 +0FD2 00                                 ; 02 FDC-Kommando Read/Write
 +0FD3 00                                 ; 03
 +0FD4 00                                 ; 04 
 +0FD5 00                                 ; 05 : Returncode aus Floppy-IRQ
 +0FD6 00                                 ; 06 : Alter Sektor 
 +0FD7 00                                 ; 07
 +0FD8 04                                 ; 08
 +0FD9 FF                                 ; 09 Floppydrive (f. Headselect)
 +0FDA 00                                 ; 0A  - 46H = "F"
 +;============================== SHARD ENDE ================================= 
 | 
