terug.gif
;**************************************************************************
;                        R E M A T O M . I N C
; **************************************************************************
; Use this module if you use REMOTE ATOM and connect by a shared file.
; All entries are supported, although some routines have No Operation.
; Entries:  AUTO_DETECT   opens the file "atomcomm" in the current directory
;           NEW_ADDRESS   no operation
;           HW_INIT       no operation
;           HW_RESET      resets the hardware
;           LEESBYTE      reads a byte from the Atom-in-PC board
;           ZENDBYTE      sends a byte to the Atom-in-PC board
;           SW_VERSION    returns the version to the Atom-in-PC board
;           INFOPAR       is the routine used by the /? parameter
;           error0        holds your copyright line and textual version info
;           SHUTDOWN      closes the file used for communication
; **************************************************************************
; Author:   Roland Leurs
; Date:     july 10th, 1999
; **************************************************************************
AUTO_DETECT     PROC    NEAR
                MOV     AX,3D42H        ; OPEN FILE R/W SH_DENYNONE
                LEA     DX,ATOMCOMM     ; ADRES VAN FILENAAM
                INT     21H             ; OPEN DE FILE
                JNC     AUTO_DET1       ; SPRING INDIEN GELUKT
                MOV     AH,09H          ; DRUK FOUTMELDING AF
                LEA     DX,COMMNFOUND   ; LAADT ADRES FOUTMELDING
                INT     21H             ; DRUK FOUTMELDING AF
                MOV     AX,4C02H        ; PROGRAMMA EINDIGEN MET FOUTCODE 2
                INT     21H             ; EXIT(2)
AUTO_DET1:      MOV     ATOMHANDLE,AX   ; BERG HANDLE OP
                MOV     PPI_ADDR,AX     ; GEEF AAN DAT "ATOM" GEVONDEN IS
                RET                     ; EINDE ROUTINE
AUTO_DETECT     ENDP
NEW_ADDRESS     PROC    NEAR
                RET                     ; GEEN FUNCTIE
NEW_ADDRESS     ENDP
HW_INIT         PROC    NEAR
                RET                     ; GEEN FUNCTIE
HW_INIT         ENDP
HW_RESET        PROC    NEAR
                PUSH    AX              ; BEWAAR GEBRUIKTE REGISTERS
                PUSH    BX
                PUSH    CX
                PUSH    DX
                MOV     DX,4            ; LAADT POSITIE VAN COMMAND REGISTER
                CALL    SETATOMHANDLE   ; ZET POINTER GOED
                MOV     AL,01H          ; LAADT RESET COMMANDO
                CALL    WRITEATOMHANDLE ; SCHRIJF NAAR FILE
HW_RESET_WAIT:  MOV     DX,4            ; HERLAADT POSITIE VAN COMM REGISTER
                CALL    SETATOMHANDLE   ; ZET POINTER
                CALL    READATOMHANDLE  ; LEES "POORT"
                CMP     AL,00H          ; TEST OF GELEZEN
                JNE     HW_RESET_WAIT   ; WACHT INDIEN NOG NIET VERWERKT
                POP     DX              ; HERSTEL GEBRUIKTE REGISTERS
                POP     CX
                POP     BX
                POP     AX
                RET                     ; EINDE RESET OPDRACHT
HW_RESET        ENDP
LEESBYTE        PROC    NEAR
                PUSH    AX              ; BEWAAR GEBRUIKTE REGISTERS
                PUSH    BX
                PUSH    CX
                PUSH    DX
LEESBYTE_WAIT:  MOV     DX,0            ; LAADT POSITIE VAN INPUT STATUS
                CALL    SETATOMHANDLE   ; ZET POINTER GOED
                CALL    READATOMHANDLE  ; LEES STATUS
                CMP     AL,00H          ; DATA AANWEZIG?
                JE      LEESBYTE_WAIT   ; WACHT INDIEN GEEN DATA AANWEZIG IS
                CALL    READATOMHANDLE  ; LEES DATA
                PUSH    AX              ; BEWAAR EFFE OP STACK
                MOV     DX,0            ; ZET POINTER WEER NAAR INPUT STATUS
                CALL    SETATOMHANDLE   ; ZET POINTER
                XOR     AL,AL           ; LAADT ACKNOWLEDGE CODE
                CALL    WRITEATOMHANDLE ; SCHRIJF NAAR FILE
                POP     AX              ; HERSTEL DATA
                MOV     ATOMBUFFER,AL   ; ZET WEER TERUG IN BUFFER
                POP     DX              ; HERSTEL GEBRUIKTE REGISTERS
                POP     CX
                POP     BX
                POP     AX
                MOV     AL,ATOMBUFFER   ; ZET GELEZEN DATA IN AL
                RET                     ; EINDE ROUTINE
LEESBYTE        ENDP
ZENDBYTE        PROC    NEAR
                PUSH    AX              ; BEWAAR GEBRUIKTE REGISTERS
                PUSH    BX
                PUSH    CX
                PUSH    DX
                PUSH    AX              ; ZET DATA OP EFFE STACK
ZENDBYTE_WAIT:  MOV     DX,2            ; LAADT POSITIE VAN OUTPUT STATUS
                CALL    SETATOMHANDLE   ; ZET POINTER GOED
                CALL    READATOMHANDLE  ; LEES STATUS
                CMP     AL,00H          ; DATA AANWEZIG?
                JNE     ZENDBYTE_WAIT   ; WACHT INDIEN NOG DATA AANWEZIG IS
                POP     AX              ; HAAL DATA VAN STACK
                CALL    WRITEATOMHANDLE ; SCHRIJF DATA
                MOV     DX,2            ; HERLAADT POSITIE VAN OUTPUT STATUS
                CALL    SETATOMHANDLE   ; ZET POINTER
                MOV     AL,01H          ; LAADT DATA VALID CODE
                CALL    WRITEATOMHANDLE ; SCHRIJF NAAR FILE
                POP     DX              ; HERSTEL REGISTERS
                POP     CX
                POP     BX
                POP     AX
                RET                     ; EINDE ROUTINE
ZENDBYTE        ENDP
SW_VERSION      PROC    NEAR
                MOV     AL,25           ; STUUR LAGE DEEL NAAR ATOM
                CALL    ZENDBYTE
                MOV     AL,04           ; STUUR HOGE DEEL NAAR ATOM
                CALL    ZENDBYTE
                RET
SW_VERSION      ENDP
INFOPAR         PROC    NEAR
                MOV     DX,OFFSET INFOTEKST1
                MOV     AH,09H          ; DRUK TEKST AF MET INT 21 FN 9
                INT     21H
                MOV     DX,OFFSET INFOTEKST2
                MOV     AH,09H
                INT     21H
                XOR     AH,AH
                MOV     AL,VIDEOKAART   ; LAADT CODE MET VIDEO KAART
                SHR     AL,1
                SHR     AL,1
                MOV     DX,OFFSET INFOTEKST3
                ADD     DX,AX
                MOV     AH,09H
                INT     21H
                MOV     DX,OFFSET INFOTEKST4
                MOV     AH,09H
                INT     21H
                LEA     DX,ENDSTACK
                MOV     AL,DH
                CALL    HEX
                MOV     AL,DL
                CALL    HEX
                RET
INFOPAR         ENDP
SHUTDOWN        PROC    NEAR
                MOV     AH,3EH          ; LAADT DOS FUNCTIE
                MOV     BX,ATOMHANDLE   ; LAADT HANDLE
                INT     21H             ; BESTAND SLUITEN
                RET                     ; EINDE ROUTINE
SHUTDOWN        ENDP
SETATOMHANDLE   PROC    NEAR
                MOV     AX,4200H        ; DOS FUNCTIE LADEN
                MOV     BX,ATOMHANDLE   ; HANDLE LADEN
                XOR     CX,CX           ; HIGH WORD POINTER IS 0
                INT     21H             ; VERPLAATS DE POINTER
                RET                     ; EINDE ROUTINE
SETATOMHANDLE   ENDP
READATOMHANDLE  PROC    NEAR            ; BX = HANDLE (!)
                MOV     AH,3FH          ; LAADT DOS FUNCTIE
                MOV     CX,1            ; AANTAL TE LEZEN BYTES
                LEA     DX,ATOMBUFFER   ; ADRES VAN DATABUFFER
                INT     21H             ; LEES DATA
                MOV     AL,ATOMBUFFER   ; LAADT GELEZEN DATA IN AL
                RET                     ; EINDE ROUTINE
READATOMHANDLE  ENDP
                
WRITEATOMHANDLE PROC    NEAR            ; BX = HANDLE (!)
                MOV     ATOMBUFFER,AL   ; ZET DATA IN BUFFER
                MOV     AH,40H          ; LAADT DOS FUNCTIE
                MOV     CX,1            ; AANTAL TE SCHRIJVEN BYTES
                LEA     DX,ATOMBUFFER   ; ADRES VAN DATABUFFER
                INT     21H             ; SCHRIJF DATA
                RET                     ; EINDE ROUTINE
WRITEATOMHANDLE ENDP
ATOMCOMM        DB      "ATOMCOMM",00H
ATOMHANDLE      DW      ?
ATOMBUFFER      DB      ?
COMMNFOUND:     DB      10,10,13
                DB      "File `ATOMCOMM' is niet gevonden in de huidige directory; controleer"
                DB      "of de Remote Atom server actief is.",10,10,13,'$'
INFOTEKST1:
db      10,10,13
db      'Aanroep: ATOM [/V:vvv] [/R:rrr] [/X:xxx]',10,10,13
db      'Waarbij vvv = video kaart: CGA, EGA, VGA of HGC',10,13
db      '        rrr = DEL, ESC of F12 voor CTRL-ALT-rrr als Atom reset',10,13
db      '        xxx = hoeveelheid XMS memory in kB (max 4096)',10,10,13
db      '$'
INFOTEKST2:
DB      10,13
DB      'Automatisch gedetecteerde videokaart is $'
INFOTEKST3:
DB      'CGA$EGA$VGA$Hercules$'
INFOTEKST4:
DB      10,13,'Benodigd geheugen in bytes (hex) is $'
error0:
DB      'Acorn Atom Terminal V4.25 - (c) Roland Leurs'
DB      '       servicecode APC4259907272FIL$'
terug.gif