; ************************************************************************** ; R A S E R I A L. I N C ; ************************************************************************** ; Use this module if you use REMOTE ATOM and connect by a serial line. ; All entries are supported, although some routines have No Operation. ; Entries: AUTO_DETECT selects COM1 for communication ; NEW_ADDRESS selects another serial port by its base address ; HW_INIT initializes 8250 ACE (115200,n,8,1) ; HW_RESET sends a reset command (no register change!) ; LEESBYTE sends a read byte command (no register change!) ; ZENDBYTE sends a write byte command (no register change!) ; 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 no operation ; ************************************************************************** ; Author: Roland Leurs ; Date: july 10th, 1999 ; ************************************************************************** AUTO_DETECT PROC NEAR MOV PPI_ADDR,3F8H ; ZET ADRES VAN COM1 RET ; EINDE ROUTINE AUTO_DETECT ENDP NEW_ADDRESS PROC NEAR MOV PPI_ADDR,DX ; ZET NIEUW ADRES VOOR COMPOORT RET ; EINDE ROUTINE NEW_ADDRESS ENDP HW_INIT PROC NEAR MOV DX,PPI_ADDR ; LAADT ADRES COMPOORT ADD DX,3 ; LINE CONTROL REGISTER MOV AL,80H ; ZET DLAB OP '1' OUT DX,AL ; SCHRIJF NAAR LCR SUB DL,3 ; DIVISOR LATCH MOV AX,0001H ; LAADT WAARDE VAN DEELTAL OUT DX,AX ; SCHRIJF NAAR LATCH ADD DX,3 ; TERUG NAAR LINE CONTROL REGISTER MOV AL,03H ; NO PARITY, 1 STOPBIT OUT DX,AL ; SCHRIJF NAAR LCR INC DX ; MODEM CONTROL REGISTER MOV AL,03H ; SET DTR EN RTS OUT DX,AL ; SCHRIJF NAAR MCR MOV AL,6 ; LAADT SERVER COMMANDO CALL SERVER ; STUUR NAAR SERVER MOV AL,0B4H ; LAADT DATA CALL SERVER ; STUUR NAAR SERVER MOV AL,6 ; LAADT SERVER COMMANDO CALL SERVER ; STUUR NAAR SERVER MOV AL,0FH ; LAADT DATA CALL SERVER ; STUUR NAAR SERVER RET ; EINDE ROUTINE HW_INIT ENDP HW_RESET PROC NEAR PUSH AX ; SAVE AX REGISTER PUSH CX ; SAVE CX REGISTER PUSH DX ; SAVE DX REGISTER MOV AL,6 ; LAADT SERVER COMMANDO CALL SERVER ; STUUR NAAR SERVER MOV AL,0EH ; LAADT DATA CALL SERVER ; STUUR NAAR SERVER MOV AL,6 ; LAADT SERVER COMMANDO CALL SERVER ; STUUR NAAR SERVER MOV AL,0FH ; LAADT DATA CALL SERVER ; STUUR NAAR SERVER MOV DX,PPI_ADDR ; LAADT ADRES VAN SERIELE POORT ADD DX,4 ; MODEM CONTROL REGISTER MOV AL,00H ; CLEAR DTR EN RTS OUT DX,AL ; SCHRIJF NAAR MCR MOV CX,01H ; LAADT LENGTE VOOR EERSTE TIMER HW_RESET_W1: PUSH CX ; BEWAAR EERSTE TIMER MOV CX,0FFFFH ; LAADT LENGTE VOOR TWEEDE TIMER HW_RESET_W2: LOOP HW_RESET_W2 ; NIEKS DOEN POP CX ; HERSTEL EERSTE TIMER LOOP HW_RESET_W1 ; LUS VOOR EERSTE TIMER MOV AL,03H ; ZET DTR EN RTS OUT DX,AL ; SCHRIJF NAAR MCR INC DX HW_RESET_W3: IN AL,DX ; LEES STATUS TEST AL,01H ; TEST OF BYTE ONTVANGEN IS JZ HW_RESET_W4 ; NEE, DAN VERDER GAAN SUB DX,5 ; RECEIVE BUFFER IN AL,DX ; LEES DATA JMP SHORT HW_RESET_W3 HW_RESET_W4: POP DX ; HERSTEL DX REGISTER POP CX ; HERSTEL CX REGISTER POP AX ; HERSTEL AX REGISTER RET ; EINDE RESET OPDRACHT HW_RESET ENDP LEESBYTE PROC NEAR LEESBYTE1: MOV AL,5 ; LAADT SERVER COMMANDO CALL SERVER ; VOER COMMANDO UIT TEST AL,00100000B ; TEST OP INPUT BUFFER FULL JNZ LEESBYTE2 ; SPRING INDIEN EEN BYTE ONTVANGEN JMP SHORT LEESBYTE1 LEESBYTE2: MOV AL,1 ; LAADT SERVER COMMANDO CALL SERVER ; STUUR NAAR COMMANDO RET ; EINDE ROUTINE LEESBYTE ENDP ZENDBYTE PROC NEAR PUSH AX ZENDBYTE1: MOV AL,5 ; LAADT SERVER COMMANDO CALL SERVER ; STUUR NAAR SERVER TEST AL,00000010B ; TEST OP OUTPUT BUFFER EMPTY JZ ZENDBYTE1 ; SPRING ALS VORIG TEKEN NIET GELEZEN MOV AL,2 ; LAADT SERVER COMMANDO CALL SERVER ; STUUR NAAR SERVER POP AX ; HAAL DATA VAN STACK PUSH AX ; NOG EVEN BEWAREN CALL SERVER ; STUUR DATA NAAR SERVER POP AX ; HERSTEL 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 DX,PPI_ADDR ; LAADT ADRES VAN SERIELE POORT ADD DX,4 ; MODEM CONTROL REGISTER MOV AL,00H ; CLEAR DTR EN RTS OUT DX,AL ; SCHRIJF NAAR MCR RET ; GEEN FUNCTIE SHUTDOWN ENDP SERVER PROC NEAR PUSH DX ; BEWAAR GEBRUIKTE REGISTERS PUSH AX MOV DX,PPI_ADDR ; LAADT ADRES VAN COMPOORT ADD DX,5 ; LINE STATUS REGISTER ; MOV RESETENABLE,0 ; DISABLE RESET TOETS ATOMTX1: IN AL,DX ; LEES STATUS TEST AL,20H ; CONTROLEER OP THRE JZ ATOMTX1 ; SPRING INDIEN NIET GEREED SUB DX,5 ; DATA REGISTER POP AX ; HERSTEL COMMANDO (in al) OUT DX,AL ; VERSTUUR COMMANDO ADD DX,5 ; LINE STATUS REGISTER ATOMTX2: IN AL,DX ; LEES STATUS TEST AL,01H ; TEST OF BYTE ONTVANGEN IS JZ ATOMTX2 ; NEE, DAN NOG FF WACHTEN SUB DX,5 ; RECEIVE BUFFER IN AL,DX ; LEES DATA ; MOV RESETENABLE,1 ; ENABLE RESET TOETS POP DX ; HERSTEL DX REGISTER RET ; EINDE ROUTINE SERVER ENDP INFOTEKST1: db 10,10,13 db 'Aanroep: ATOM [/A:aaa] [/V:vvv] [/R:rrr] [/X:xxx]',10,10,13 db 'Waarbij vvv = video kaart: CGA, EGA, VGA of HGC',10,13 db ' aaa = basisadres van seriele poort',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 APC4259908167COM$'