;**************************************************************************
; 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$'