|
DataMuseum.dkPresents historical artifacts from the history of: Christian Rovsing CR7, CR8 & CR16 CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Christian Rovsing CR7, CR8 & CR16 CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 4480 (0x1180) Types: TextFile Names: »CONBAUD.A86«
└─⟦98758eebd⟧ Bits:30004394 CP/M-86 sources for adaptation to CR8 release 1 └─ ⟦this⟧ »CONBAUD.A86«
TITLE 'CONSOLE BAUDRATE SETUP UTILITY' PAGESIZE 56 PAGEWIDTH 111 ; AUTHOR: LARS WINTHER DATE: 830208 ;****************************************************************************** ; CHRISTIAN ROVSING A/S, CR8 - CP/M-86 BAUDRATE SETUP UTILITY ;****************************************************************************** ; CONIN EQU 01H CONOUT EQU 02H PRSTRING EQU 09H ;PRINT STRING FUNCTION CODE ; SIMPIO EQU 222 ;PRIMITIVE I/O SYSTEM CALL INTERRUPT SYSTEM EQU 224 ;NORMAL SYSTEM CALL INTERRUPT ; LOOKQ EQU 1 ;GET QUEUE BUFFER COUNT FUNCTION CODE DEQ EQU 2 ;DEQ BUFFER FUNCTION CODE ENQ EQU 3 ;ENQ BUFFER FINCTION CODE ; COCHA EQU 80A0H ;CHANNEL COMMUNICATON AREA BASE ADDRESS COEQ EQU COCHA+00H ;TX EMPTY QUEUE COFQ EQU COCHA+10H ;TX FULL QUEUE CIFQ EQU COCHA+20H ;RX FULL QUEUE CIEQ EQU COCHA+30H ;RX EMPTY QUEUE ; CR EQU 0DH LF EQU 0AH ; OPEN EQU 04H ;OPEN COMMAND CODE ENTCLDU EQU 07H ;ENTIRE COMMAND LDU TYPE CODE ; EJECT ; CSEG ORG 0 ; JMP ENTRY ; BADENT: MOV DX,OFFSET ERRMSG MOV CL,PRSTRING INT SYSTEM ;TELL HIM ABOUT HIS SLOW BRAIN ENTRY: MOV DX,OFFSET MENU ;POINTER TO MESSAGE MOV CL,PRSTRING INT SYSTEM ;OUTPUT MESSAGE TO CONSOLE MOV CL,CONIN INT SYSTEM ;GET SELECTED VALUE CMP AL,'1' ;CHECK IF OUT OF RANGE JC BADENT ; CMP AL,'8' JNC BADENT ; AND AL,07H ;OK - MASK TO BINARY VALUE DEC AL MOV BX,OFFSET TABLE ;GET TABLE BASE ADDRESS XLAT BX ;TRANSLATA VIA TABLE MOV BAUDVAL,AL ;SAVE IN PARAMETER BLOCK PUSH ES MOV AX,2000H ;SETUP SEGMENT FOR MP2/Z80 COMM MOV ES,AX ; EJECT BFWAIT: MOV BX,COEQ MOV SI,LOOKQ INT SIMPIO ;POLL TX EMPTY QUEUE A FOR BUFFER AND AL,AL JZ BFWAIT ;WAIT TILL AVAILABLE ; MOV BX,COEQ MOV SI,DEQ INT SIMPIO ;GO GET BUFFER MOV BX,12 ADD BX,DX MOV DI,BX ;DI=FIRST BUFFER DATA ADDRESS MOV SI,OFFSET COPEN MOV CX,ENDCOP-COPEN REP MOVSB ;BLOCKMOVE PARAMETER BLOCK INTO BUFFER XCHG BX,DX MOV ES:4ÆBXÅ,DX ;SET DATA POINTER IN BUFFER HEAD MOV ES:WORD PTR ÆBXÅ+2,ENDCOP-COPEN ;SET ALSO BYTECOUNT IN BUFFER XCHG BX,DX MOV BX,COFQ MOV SI,ENQ ;SEND BUFFER INT SIMPIO ; EJECT ; ; OPEN COMMAND SEND, NOW WAIT FOR RESPONCE ; RESPWAIT: MOV BX,CIFQ MOV SI,LOOKQ INT SIMPIO ;GO SEE IF RESPONCE ARIVED AND AL,AL JZ RESPWAIT ;WAIT FOR RESPONCE ; MOV BX,CIFQ MOV SI,DEQ INT SIMPIO ;GO GET RESPONCE BUFFER XCHG BX,DX MOV DX,ES:4ÆBXÅ ;GET DATA POINTER FROM BUFFERHEAD XCHG BX,DX CMP ES:BYTE PTR ÆBXÅ,ENTCLDU;TEST IF TYPE=STATUS JNE SKIPIT ;SKIP IF NOT (MIGHT BE A KEYSTROKE) ; INC BX CMP ES:BYTE PTR ÆBXÅ,OPEN ;MUST BE OPEN STATUS JE OKTYPE ; MOV AL,07H ;COMPLAIN IF NOT OK JMP CBEXIT ; SKIPIT: MOV BX,CIEQ MOV SI,ENQ INT SIMPIO ;RELEASE SKIPPED BUFFER JMP RESPWAIT ;WAIT FOR PROPPER RESPONCE ; EJECT OKTYPE: INC BX MOV AL,ES:ÆBXÅ ;GET STATUS BYTE FROM BUFFER CBEXIT: MOV BX,CIEQ MOV SI,ENQ PUSH AX INT SIMPIO ;RELEASE BUFFER POP AX POP ES ;RESTORE SEGMENT AND AL,07 JZ DONE ;EXIT OF STATUS=OK ; PUSH AX MOV DX,OFFSET ERRMSG1 MOV CL,PRSTRING INT SYSTEM ;SEND ERROR MESSAGE TO CONSOLE POP DX ADD DL,'0' MOV CL,CONOUT INT SYSTEM ;OUTPUT ERROR STATUS DONE: RETF ;BACK TO CPM - YEEEA-BIIII ; EJECT ; DSEG ORG 100H ; MENU DB CR,LF,' SELECT CONSOLE BAUDRATE' DB CR,LF DB CR,LF,' 1) 19200 BAUD' DB CR,LF,' 2) 9600 BAUD' DB CR,LF,' 3) 4800 BAUD' DB CR,LF,' 4) 2400 BAUD' DB CR,LF,' 5) 1200 BAUD' DB CR,LF,' 6) 600 BAUD' DB CR,LF,' 7) 300 BAUD' DB CR,LF DB CR,LF,' SELECT (1-7):' DB '$' ; ERRMSG DB CR,LF DB CR,LF,' OUT OF RANGE USE 1 THRU 7' DB CR,LF,'$' ; ERRMSG1 DB CR,LF DB CR,LF,'SETUP ERROR CODE #','$' ; TABLE DB 0FH ;19200 BAUD COUNTER VALUE DB 0EH ; 9600 BAUD COUNTER VALUE DB 0DH ; 4800 BAUD COUNTER VALUE DB 0CH ; 2400 BAUD COUNTER VALUE DB 03H ; 1200 BAUD COUNTER VALUE DB 04H ; 600 BAUD COUNTER VALUE DB 02H ; 300 BAUD COUNTER VALUE ; COPEN EQU OFFSET $ DB 7 ;ENTIRE COMMAND LDU DB 4 ;OPEN COMMAND DB 10H ;FORMAT OF COMMAND SIOP1 DB 0C4H SIOP2 DB 060H BAUDVAL DB 0EH ENDCOP EQU OFFSET $ ; END «eof»