|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 4480 (0x1180) Types: TextFile Names: »LPBAUD.A86«
└─⟦98758eebd⟧ Bits:30004394 CP/M-86 sources for adaptation to CR8 release 1 └─ ⟦this⟧ »LPBAUD.A86«
TITLE 'LINE-PRINTER 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 ; LPCHA EQU 80E0H ;CHANNEL COMMUNICATON AREA BASE ADDRESS LPOEQ EQU LPCHA+00H ;TX EMPTY QUEUE LPOFQ EQU LPCHA+10H ;TX FULL QUEUE LPIFQ EQU LPCHA+20H ;RX FULL QUEUE LPIEQ EQU LPCHA+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,LPOEQ MOV SI,LOOKQ INT SIMPIO ;POLL TX EMPTY QUEUE A FOR BUFFER AND AL,AL JZ BFWAIT ;WAIT TILL AVAILABLE ; MOV BX,LPOEQ 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,LPOFQ MOV SI,ENQ ;SEND BUFFER INT SIMPIO ; EJECT ; ; OPEN COMMAND SEND, NOW WAIT FOR RESPONCE ; RESPWAIT: MOV BX,LPIFQ MOV SI,LOOKQ INT SIMPIO ;GO SEE IF RESPONCE ARIVED AND AL,AL JZ RESPWAIT ;WAIT FOR RESPONCE ; MOV BX,LPIFQ 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 (MUST BE GARBAGE) ; INC BX CMP ES:BYTE PTR ÆBXÅ,OPEN ;MUST BE OPEN STATUS JE OKTYPE ; MOV AL,07H ;COMPLAIN IF NOT OK JMP LPBEXIT ; SKIPIT: MOV BX,LPIEQ 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 LPBEXIT: MOV BX,LPIEQ 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 PRINTER 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»