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 | ||
+ | ; | ||
+ | | ||
+ | </ |