                PAGE    ,132

TITLE           ACORN ATOM RESIDENT MINITERMINAL V1.00

; --------------- versie 1.xx ----------------- juni 1994 -------------------
; Deze miniterminal laat bij wijze van demo alleen schermuitvoer zien op
; een gedeelte van een herculesscherm. Het aantal regels kan opgegeven
; worden tijdens het assembleren. Ook dient in de source het basisadres
; van de kaart opgegeven te worden.
; Voor systemen met een herculeskaart als tweede video adapter kan dus een
; heel scherm gebruikt worden.
; --------------------------------------------------------------------------

CSEG            SEGMENT PARA PUBLIC 'CODE'
                ASSUME  CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG

                ORG     100H
MINITERM:       JMP     INIT

; ---------------------------------------------------------------------------
; CONSTANTEN EN VARIABELEN
; ---------------------------------------------------------------------------

                INCLUDE ATOM_INT.INC

ONDERGRENS      EQU     REGELS*160      ; AANTAL TE BESCHRIJVEN REGELS

CURSOR          DW      0000H           ; OFFSET ADRES VAN CURSOR POSITIE
INT_1C          EQU     THIS DWORD
INT_1C_OFF      DW      (?)             ; OFFSET ADRES OUDE INT 1C VECTOR
INT_1C_SEG      DW      (?)             ; SEGMENT ADRES OUDE INT 1C VECTOR

; ---------------------------------------------------------------------------
; HOOFDROUTINE (INTERRUPT ROUTINE)
; ---------------------------------------------------------------------------

SCROLL          PROC    NEAR
                MOV     DI,0000H        ; DI WIJST NAAR REGEL 0
                MOV     SI,00A0H        ; SI WIJST NAAR REGEL 1
SCROLL1:        MOV     AL,ES:[SI]      ; LEES DATA
                MOV     ES:[DI],AL      ; SCHRIJF NAAR BOVENLIGGENDE REGEL
                INC     DI              ; VERHOOG POINTERS
                INC     DI              ; ATTRIBUTEN NIET KOPIEREN
                INC     SI
                INC     SI
                CMP     SI,ONDERGRENS   ; TEST OF ALLE REGELS GEHAD
                JNE     SCROLL1         ; NEE, DAN VOLGEND KARAKTER
                MOV     AL,20H          ; ASCII WAARDE VOOR SPATIE
SCROLL2:        MOV     ES:[DI],AL      ; SCHRIJF OP ONDERSTE REGEL
                INC     DI              ; POINTER VERHOGEN
                INC     DI
                CMP     DI,ONDERGRENS   ; TEST OP EINDE REGEL
                JNE     SCROLL2         ; NEE, DAN VOLGENDE SPATIE ZETTEN
                MOV     BX,ONDERGRENS   ; CURSOR OP ONDERSTE REGEL ZETTEN
                SUB     BX,160
                RET
SCROLL          ENDP

CRLF            PROC    NEAR
                MOV     AX,BX           ; DEELTAL NAAR AX
                MOV     BX,160          ; DELEN DOOR 160
                DIV     BL              ; VOER DELING UIT
                XOR     AH,AH           ; WIS AH
                INC     AL              ; VERHOOG RESULTAAT MET 1
                MUL     BX              ; VERMENIGVULDIG MET 160
                MOV     BX,AX           ; ZET NIEUWE POSITIE IN BX
                CMP     BX,ONDERGRENS   ; TEST OP MAX. AANTAL REGELS
                JNE     CRLF1           ; SPRING INDIEN NIET OP ONDERGRENS
                CALL    SCROLL          ; GA SCROLLEN ALS OP ONDERSTE REGEL
CRLF1:          RET                     ; EINDE SUBROUTINE
CRLF            ENDP
      
ATOMTERM        PROC    NEAR

                PUSH    AX              ; ZET ALLE REGISTERS OP STACK
                PUSH    BX
                PUSH    DX
                PUSH    ES
                PUSH    SI
                PUSH    DI
                PUSHF
                MOV     BX,VIDEO        ; LAADT ES MET VIDEO SEGMENT
                MOV     ES,BX
                MOV     BX,CURSOR       ; LEES OFFSET ADRES
                MOV     DX,PPI_ADDR+2   ; LAADT STATUS REGISTER ADRES IN DX
                IN      AL,DX           ; LEES STATUS REGISTER 8255
                TEST    AL,00100000B    ; TEST OP INPUT BUFFER FULL
                JZ      END_TERM        ; SPRING INDIEN GEEN KARAKTER GEREED
                SUB     DX,2            ; POORT ADRES VERLAGEN
                IN      AL,DX           ; LEES DATA
;
;               HIER WORDT GELEZEN DATA OP HET SCHERM GEPLAATST
;
                CMP     AL,13           ; TEST OP CR
                JNE     TEKEN
                CALL    CRLF
                JMP     SHORT END_TERM  ; SPRINT NAAR EINDE ROUTINE
TEKEN:          CMP     AL,10           ; TEST OP LF
                JE      END_TERM        ; JA, DAN NIETS DOEN
                MOV     ES:[BX],AL      ; ZET KARAKTER OP HET SCHERM
                INC     BX              ; VERHOOG SCHERM POINTER
                INC     BX              ; VERHOOG BX NOGMAALS
                CMP     BX,ONDERGRENS   ; TEST OP ONDERGRENS VAN SCHERM
                JNE     END_TERM        ; SPRING INDIEN NIET ALLE REGELS VOL
                CALL    SCROLL          ; EVEN SCROLLEN
END_TERM:       MOV     CURSOR,BX       ; BERG CURSOR POSITIE WEER OP
                POPF                    ; HAAL ALLE REGISTERS WEER TERUG
                POP     DI
                POP     SI
                POP     ES
                POP     DX
                POP     BX
                POP     AX
                JMP     CS:[INT_1C]     ; SPRING NAAR OUDE TIMER INTERRUPT

ATOMTERM        ENDP

INIT            PROC    NEAR
                MOV     AX,351CH        ; OPVRAGEN VECTOR 1C
                INT     21H
                MOV     INT_1C_OFF,BX   ; VECTOR OPSLAAN
                MOV     INT_1C_SEG,ES
                CLI
                MOV     DX,OFFSET ATOMTERM ; LAADT OFFSET ADRES NIEUW ISR 1C
                MOV     AX,251CH        ; ZET NIEUWE VECTOR 1C
                INT     21H
                STI
                MOV     DX,OFFSET INIT  ; BEREKEN AANTAL PARAGRAPHS DAT
                MOV     CL,4
                SHR     DX,CL           ; IN HET GEHEUGEN MOET BLIJVEN
                INC     DX
                MOV     AX,3100H        ; PROGRAMMA BE-EINDIGEN
                INT     21H             ; MAAR RESIDENT BLIJVEN
INIT            ENDP

CSEG            ENDS
                END     MINITERM
