DataMuseum.dk

Presents historical artifacts from the history of:

CP/M

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about CP/M

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦14b59baf1⟧ TextFile

    Length: 4480 (0x1180)
    Types: TextFile
    Names: »LPBAUD.A86«

Derivation

└─⟦98758eebd⟧ Bits:30004394 CP/M-86 sources for adaptation to CR8 release 1
    └─ ⟦this⟧ »LPBAUD.A86« 

TextFile


	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»