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