PofoWiki

Die ultimative Informationsquelle zum ATARI Portfolio

Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:diy:assembler:int14h

Interrupt 14H für das serielle Modul

— Rückübersetzung des internen Ablaufes (ROM-BIOS) für den DOS-Interrupt 14H zu Lehrzwecken —

 ;Anlage 25, INT 14h PF
 ;Interrupt 14H des Atari Portfolio
 ;Bearbeitungsstand 18.5.92
   24DA: STI
   24DB: PUSH   BX
   24DC: PUSH   CX
   24DD: PUSH   DX
   24DE: PUSH   DS
   24DF: PUSH   SI
   24E0: CMP    DX,+03
   24E3: JA     252F                 ;ErrorEnde
 
   24E5: MOV    BX,0040
   24E8: MOV    DS,BX
   24EA: MOV    SI,DX
   24EC: MOV    DX,[SI+0000]         ;Portadresse
   24F0: OR     DX,DX
   24F2: JZ     252F                 ;ErrorEnde
 
   24F4: CMP    DX,8070                 ;PF-Modul-Adr.?
   24F8: JNZ    2501                 ;nein
   24FA: CALL   2633                 ;ser. Modul da?
   24FD: JZ     2501                 ;ja
   24FF: JMP    252F                 ;nein, ErrorEnde
 
   2501: OR     AH,AH
   2503: JNZ    250A
   2505: CALL   2537                 ;Initialisierung
   2508: JMP    2531                 ;Ende
 
   250A: DEC    AH
   250C: JNZ    2513
   250E: CALL   256D                ;Senden
   2511: JMP    2531                 ;Ende
 
   2513: DEC    AH
   2515: JNZ    251C
   2517: CALL   257B                ;Empfangen
   251A: JMP    2531                 ;Ende
 
   251C: DEC    AH
   251E: JNZ    2525
   2520: CALL   258C                 ;Status
   2523: JMP    2531                 ;Ende
 
   2525: CMP    AH,FC                 ;Fun. 0FFh
   2528: JNZ    2531                 ;Ende
   252A: CALL   2599                 ;?
   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
   ;----------------------------------------------------------
 
   ;Modultest
   2633: PUSH   AX
   2634: CALL   1D65                ;Moduladr. u. IV-Reg. lesen
   2637: OR     AL,AL                 ;kein Modul AL = 0
   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
 
   ;Abfrage ob serielles Modul angeschlossen
   1D65: PUSH   DX
   1D66: MOV    DX,8051
   1D69: IN     AL,DX
   1D6A: AND    AL,20                ;bit 5 gesetzt mit Modul
   1D6C: JZ     1D7C                 ;kein ser. Mod.
   1D6E: MOV    DX,807F
   1D71: IN     AL,DX                 ;IV lesen
   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
   ;----------------------------------------------------------
 
   ;Status abfragen
   258C: MOV    DX,[SI+0000]
   2590: ADD    DX,+05                ;Line-Status-Reg.
   2593: IN     AL,DX
   2594: MOV    AH,AL
   2596: INC    DX                 ;Modem-Status-Reg.
   2597: IN     AL,DX
   2598: RET
   ;----------------------------------------------------------
 
   ;Initialisierung der UART
   2537: PUSH        AX
   2538: MOV        CL,05
   253A: SHR        AL,CL                 ;Ergebnis 0000 0BBB
   253C: JZ        2546                 ;BBB = 0, 110 Baud
 
   253E: MOV        CL,AL                 ;Bitmuster Baudrate (1-7)
   ;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,0417         ;Steuerwort f. 110 Baud
   2549: MOV        DX,[SI+0000]
   254D: ADD        DX,+03                 ;Line-Control-Reg.
   2550: MOV        AL,80
   2552: OUT        DX,AL
 
   2553: MOV        DX,[SI+0000]         ;Daten-Reg.
   2557: MOV        AL,CL
   2559: OUT        DX,AL                 ;Baudrate init.
 
   255A: INC        DX                 ;Int.-Enable-Reg.
   255B: MOV        AL,CH
   255D: OUT        DX,AL
 
   255E: POP        AX
   255F: AND        AL,1F                 ;Steuerbits fuer Paritaet u.s.w.
   2561: MOV        DX,[SI+0000]
   2565: ADD        DX,+03                 ;Line-Control-Reg.
   2568: OUT        DX,AL
 
   2569: CALL        258C                 ;Status
   256C: RET
   ;Ende der Initialisierung
   ;----------------------------------------------------------
   ;fr beide UP's BH = Line-Maske und BL = Modem-Maske
   ;UP senden eines Zeichens
   256D: MOV        CH,03                 ;DTR + RTS on
   256F: MOV        BX,2030         ;Status-Maske:
   ;Sender-Pu. leer, DSR + CTS
   2572: CALL        25E2                 ;bei Zeitueberschreitung
   ;Return-Sprung zu ErrorEnde
   2575: MOV        DX,[SI+0000]
   2579: OUT        DX,AL
   257A: RET
   ;----------------------------------------------------------
 
   ;UP empfangen eines Zeichens
   257B: MOV        CH,01                 ;DTR
   257D: MOV        BX,0120         ;Status-Maske
   2580: CALL        25E2                 ;bei Zeitueberschreitung
   ;Return-Sprung zu ErrorEnde
   2583: MOV        DX,[SI+0000]
   2587: IN        DX,AL
   2588: AND        AH,1E
   258B: RET
   ;----------------------------------------------------------
 
   ;UP zur Bedienung der seriellen Schnittstelle
   ;IN:        CH = Modemsteuersignale
   ;        BX = Maske fuer Modemstatus
   ;OUT:        AH = Modem- und Linestatus
   ;        bei Zeitueberschreitung Sprung zu ErrorEnde
   25E2: MOV        CL,AL                 :Zeichen merken
   25E4: PUSH        CX
   25E5: MOV        DX,[SI+0000]
   25E9: ADD        DX,+04                 ;Modem-Ctrl-Reg.
   25EC: MOV        AL,CH
   25EE: OUT        DX,AL                 ;DTR on
   25EF: INC        DX
   25F0: INC        DX                 ;Modem-Status-Reg.
   25F1: XOR        CH,CH
   25F3: MOV        CL,[SI+007C]         ;Zeitkonst. TimeOut
 
   ;warten auf DSR on
   25F7: PUSH        CX
   25F8: XOR        CX,CX
   25FA: IN        AL,DX                 ;Modem-Status holen
   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                ;Zeitueberschreitung
 
   ;DSR on
   2608: ADD        SP,+02
   260B: DEC        DX                 ;Line-Status-Reg.
   260C: XOR        CH,CH
   260E: MOV        CL,[SI+007C]         ;= 1
   2612: PUSH        CX
   2613: XOR        CX,CX
 
   ;warten auf ein Zeichen
   2615: IN        AL,DX                ;Line-Status holen
   2616: AND        AL,BH
   2618: CMP        AL,BH                ;Zeichen da?
   261A: JZ        262A                 ;ja
   261C: LOOP        2615                 ;nein, warten
   261E: POP        CX
   261F: LOOP        2612
 
   2621: POP        CX
   2622: MOV        AL,CL
   2624: ADD        SP,+04
   2627: JMP        252F                 ;ErrorEnde
 
   262A: ADD        SP,+02                 ;Zeichen empf.
   262D: POP        CX
   262E: MOV        AH,AL
   2630: MOV        AL,CL
   2632: RET
   ;Ende Bedienung ser. Schnittst.
   ;----------------------------------------------------------
 
   ;Funktion 0FFh
   2599: MOV        DX,[SI+0000]
   259D: ADD        DX,+03                 ;LinConReg
   25A0: IN        AL,DX                 ;lesen
   25A1: MOV        AH,AL
   25A3: OR        AL,80                 ;Steuerwort
   25A5: OUT        DX,AL
 
   25A6: SUB        DX,+03                 ;DataReg
   25A9: IN        AL,DX                 ;InitByte lesen
   25AA: MOV        CL,AL                 ;InitByte merken
   25AC: INC        DX                 ;IntEnReg
   25AD: IN        AL,DX                 ;Int.-Freigabe lesen
 
   25AE: MOV        CH,AL
   25B0: MOV        DX,[SI+0000]
   25B4: ADD        DX,+03                ;LinConReg
   25B7: MOV        AL,AH                 ;Line-Status von oben
   25B9: OUT        DX,AL
 
   25BA: XOR        AL,AL
   25BC: CMP        CX,0417         ;110 Baud
   25C0: JZ        25D8
   25C2: JB        25CA
   25C4: ADD        SP,+02
   25C7: JMP        252F                 ;ErrorEnde
 
   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                 ;LinConReg
   25DB: AND        AL,1F
   25DD: OR        AL,CL
   25DF: XOR        AH,AH
   25E1: RET
   ;----------------------------------------------------------
   end        24DA
software/diy/assembler/int14h.txt · Zuletzt geändert: 03/04/2006 00:04 (Externe Bearbeitung)