software:diy:assembler:int14h
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
| software:diy:assembler:int14h [03/04/2006 16:04] – erweitert ROM-BIOS micha | software:diy:assembler:int14h [Unbekanntes Datum] (aktuell) – Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Interrupt 14H für das serielle Modul ====== | ||
| + | --- Rückübersetzung des internen Ablaufes (ROM-BIOS) für den DOS-Interrupt 14H zu Lehrzwecken --- | ||
| + | |||
| + | ; | ||
| + | ; | ||
| + | ; | ||
| + | <code asm> | ||
| + | 24DA: STI | ||
| + | 24DB: PUSH BX | ||
| + | 24DC: PUSH CX | ||
| + | 24DD: PUSH DX | ||
| + | 24DE: PUSH DS | ||
| + | 24DF: PUSH SI | ||
| + | 24E0: CMP DX,+03 | ||
| + | 24E3: JA | ||
| + | |||
| + | 24E5: MOV BX,0040 | ||
| + | 24E8: MOV DS,BX | ||
| + | 24EA: MOV SI,DX | ||
| + | 24EC: MOV DX, | ||
| + | 24F0: OR DX,DX | ||
| + | 24F2: JZ | ||
| + | |||
| + | 24F4: CMP DX, | ||
| + | 24F8: JNZ 2501 ;nein | ||
| + | 24FA: CALL | ||
| + | 24FD: JZ | ||
| + | 24FF: JMP 252F ; | ||
| + | |||
| + | 2501: OR AH,AH | ||
| + | 2503: JNZ 250A | ||
| + | 2505: CALL | ||
| + | 2508: JMP 2531 ;Ende | ||
| + | |||
| + | 250A: DEC AH | ||
| + | 250C: JNZ 2513 | ||
| + | 250E: CALL | ||
| + | 2511: JMP 2531 ;Ende | ||
| + | |||
| + | 2513: DEC AH | ||
| + | 2515: JNZ 251C | ||
| + | 2517: CALL | ||
| + | 251A: JMP 2531 ;Ende | ||
| + | |||
| + | 251C: DEC AH | ||
| + | 251E: JNZ 2525 | ||
| + | 2520: CALL | ||
| + | 2523: JMP 2531 ;Ende | ||
| + | |||
| + | 2525: CMP AH,FC ;Fun. 0FFh | ||
| + | 2528: JNZ 2531 ;Ende | ||
| + | 252A: CALL | ||
| + | 252D: JMP 2531 ;Ende | ||
| + | |||
| + | 252F: MOV AH,80 ;ErrorEnde | ||
| + | 2531: POP SI ;Ende | ||
| + | 2532: POP DS | ||
| + | 2533: POP DX | ||
| + | 2534: POP CX | ||
| + | 2535: POP BX | ||
| + | 2536: IRET | ||
| + | ;Ende des Hauptprogrammes | ||
| + | ; | ||
| + | |||
| + | ; | ||
| + | 2633: PUSH AX | ||
| + | 2634: CALL | ||
| + | 2637: OR | ||
| + | 2639: JNZ 263D | ||
| + | 263B: MOV AH,FF | ||
| + | 263D: CMP AH,00 | ||
| + | 2640: JZ 264B | ||
| + | 2642: CMP AH,01 | ||
| + | 2645: JZ 264B | ||
| + | 2647: CMP AH,[0197] | ||
| + | 264B: POP AX | ||
| + | 264C: RET ;Z | ||
| + | |||
| + | ; | ||
| + | 1D65: PUSH DX | ||
| + | 1D66: MOV DX,8051 | ||
| + | 1D69: IN AL,DX | ||
| + | 1D6A: AND AL,20 ;bit 5 gesetzt mit Modul | ||
| + | 1D6C: JZ | ||
| + | 1D6E: MOV DX,807F | ||
| + | 1D71: IN | ||
| + | 1D72: MOV AH,AL | ||
| + | 1D74: AND AL,80 | ||
| + | 1D76: JZ 1D7A | ||
| + | 1D78: MOV AH,AL ;Time out setzen | ||
| + | 1D7A: MOV AL,FF | ||
| + | 1D7C: POP DX | ||
| + | 1D7D: RET | ||
| + | ; | ||
| + | |||
| + | ; | ||
| + | 258C: MOV DX, | ||
| + | 2590: ADD DX, | ||
| + | 2593: IN AL,DX | ||
| + | 2594: MOV AH,AL | ||
| + | 2596: INC DX ; | ||
| + | 2597: IN AL,DX | ||
| + | 2598: RET | ||
| + | ; | ||
| + | |||
| + | ; | ||
| + | 2537: PUSH AX | ||
| + | 2538: MOV CL,05 | ||
| + | 253A: SHR AL,CL ; | ||
| + | 253C: JZ 2546 ;BBB = 0, 110 Baud | ||
| + | |||
| + | 253E: MOV CL,AL ; | ||
| + | ;0000 0BBB | ||
| + | 2540: MOV CH,06 ;0000 0110 | ||
| + | 2542: SHR CX,CL ;0000 0011 0000 0000 bis | ||
| + | ;0000 0000 0000 1100 moeglich! | ||
| + | 2544: JMP 2549 | ||
| + | |||
| + | 2546: MOV CX, | ||
| + | 2549: MOV DX, | ||
| + | 254D: ADD DX, | ||
| + | 2550: MOV AL,80 | ||
| + | 2552: OUT DX,AL | ||
| + | |||
| + | 2553: MOV DX, | ||
| + | 2557: MOV AL,CL | ||
| + | 2559: OUT DX,AL ; | ||
| + | |||
| + | 255A: INC DX ; | ||
| + | 255B: MOV AL,CH | ||
| + | 255D: OUT DX,AL | ||
| + | |||
| + | 255E: POP AX | ||
| + | 255F: AND AL,1F ; | ||
| + | 2561: MOV DX, | ||
| + | 2565: ADD DX, | ||
| + | 2568: OUT DX,AL | ||
| + | |||
| + | 2569: CALL 258C ; | ||
| + | 256C: RET | ||
| + | ;Ende der Initialisierung | ||
| + | ; | ||
| + | ;fr beide UP's BH = Line-Maske und BL = Modem-Maske | ||
| + | ;UP senden eines Zeichens | ||
| + | 256D: MOV CH,03 ;DTR + RTS on | ||
| + | 256F: MOV BX, | ||
| + | ; | ||
| + | 2572: CALL 25E2 ;bei Zeitueberschreitung | ||
| + | ; | ||
| + | 2575: MOV DX, | ||
| + | 2579: OUT DX,AL | ||
| + | 257A: RET | ||
| + | ; | ||
| + | |||
| + | ;UP empfangen eines Zeichens | ||
| + | 257B: MOV CH,01 ;DTR | ||
| + | 257D: MOV BX, | ||
| + | 2580: CALL 25E2 ;bei Zeitueberschreitung | ||
| + | ; | ||
| + | 2583: MOV DX, | ||
| + | 2587: IN DX,AL | ||
| + | 2588: AND AH,1E | ||
| + | 258B: RET | ||
| + | ; | ||
| + | |||
| + | ;UP zur Bedienung der seriellen Schnittstelle | ||
| + | ; | ||
| + | ; | ||
| + | ; | ||
| + | ; | ||
| + | 25E2: MOV CL,AL : | ||
| + | 25E4: PUSH CX | ||
| + | 25E5: MOV DX, | ||
| + | 25E9: ADD DX, | ||
| + | 25EC: MOV AL,CH | ||
| + | 25EE: OUT DX,AL ;DTR on | ||
| + | 25EF: INC DX | ||
| + | 25F0: INC DX ; | ||
| + | 25F1: XOR CH,CH | ||
| + | 25F3: MOV CL, | ||
| + | |||
| + | ; | ||
| + | 25F7: PUSH CX | ||
| + | 25F8: XOR CX,CX | ||
| + | 25FA: IN AL,DX ; | ||
| + | 25FB: AND AL,BL | ||
| + | 25FD: CMP AL,BL ;DSR? | ||
| + | 25FF: JZ 2608 ;ja | ||
| + | 2601: LOOP 25FA ;nein | ||
| + | 2603: POP CX | ||
| + | 2604: LOOP 25F7 | ||
| + | 2606: JMP 2621 ; | ||
| + | |||
| + | ;DSR on | ||
| + | 2608: ADD SP,+02 | ||
| + | 260B: DEC DX ; | ||
| + | 260C: XOR CH,CH | ||
| + | 260E: MOV CL, | ||
| + | 2612: PUSH CX | ||
| + | 2613: XOR CX,CX | ||
| + | |||
| + | ; | ||
| + | 2615: IN AL,DX ; | ||
| + | 2616: AND AL,BH | ||
| + | 2618: CMP AL,BH ;Zeichen da? | ||
| + | 261A: JZ 262A ;ja | ||
| + | 261C: LOOP 2615 ; | ||
| + | 261E: POP CX | ||
| + | 261F: LOOP 2612 | ||
| + | |||
| + | 2621: POP CX | ||
| + | 2622: MOV AL,CL | ||
| + | 2624: ADD SP,+04 | ||
| + | 2627: JMP 252F ; | ||
| + | |||
| + | 262A: ADD SP, | ||
| + | 262D: POP CX | ||
| + | 262E: MOV AH,AL | ||
| + | 2630: MOV AL,CL | ||
| + | 2632: RET | ||
| + | ;Ende Bedienung ser. Schnittst. | ||
| + | ; | ||
| + | |||
| + | ; | ||
| + | 2599: MOV DX, | ||
| + | 259D: ADD DX, | ||
| + | 25A0: IN AL,DX ; | ||
| + | 25A1: MOV AH,AL | ||
| + | 25A3: OR AL,80 ; | ||
| + | 25A5: OUT DX,AL | ||
| + | |||
| + | 25A6: SUB DX, | ||
| + | 25A9: IN AL,DX ; | ||
| + | 25AA: MOV CL,AL ; | ||
| + | 25AC: INC DX ; | ||
| + | 25AD: IN AL,DX ; | ||
| + | |||
| + | 25AE: MOV CH,AL | ||
| + | 25B0: MOV DX, | ||
| + | 25B4: ADD DX, | ||
| + | 25B7: MOV AL,AH ; | ||
| + | 25B9: OUT DX,AL | ||
| + | |||
| + | 25BA: XOR AL,AL | ||
| + | 25BC: CMP CX, | ||
| + | 25C0: JZ 25D8 | ||
| + | 25C2: JB 25CA | ||
| + | 25C4: ADD SP,+02 | ||
| + | 25C7: JMP 252F ; | ||
| + | |||
| + | 25CA: INC AL | ||
| + | 25CC: SHL CX,1 | ||
| + | 25CE: TEST CX,0400 | ||
| + | 25D2: JZ 25CA | ||
| + | 25D4: MOV CL,05 | ||
| + | 25D6: SHL AL,CL | ||
| + | |||
| + | ;110 Baud | ||
| + | 25D8: MOV CL,AL | ||
| + | 25DA: IN AL,DX ; | ||
| + | 25DB: AND AL,1F | ||
| + | 25DD: OR AL,CL | ||
| + | 25DF: XOR AH,AH | ||
| + | 25E1: RET | ||
| + | ; | ||
| + | | ||
| + | </ | ||
