DataMuseum.dk

Presents historical artifacts from the history of:

Zilog MCZ Floppy Disks

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

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦ded99a380⟧ TextFile

    Length: 5901 (0x170d)
    Types: TextFile
    Names: »WILD.05.S«

Derivation

└─⟦329ff8d5f⟧ Bits:30006811 8" ZilogMCZ floppy NThun_0013 (SYSTEM MCZ 1/05)
    └─ ⟦this⟧ »WILD.05.S« 

TextFile

*H PLOTTER DRIVER
*P 60
;************************************************
;*	RIO DRIVER FOR PLOTTER TABLE	*
;*	J\RGEN KRISTENSEN		*
;*	S/C  METRIC  A/S		*
;*	84 01 13  MCZ 1 / 05  TRIBLE FLOPPY	*
;*	00	INITIALIZE	03	*
;*	02	ASSIGN	03	*
;*	04	OPEN	03	*
;*	06	CLOSE	03	*
;*	0E	WRITE BINARY	04	*
;*	10	WRITE LINE	04	*
;*	44	DEACTIVATE	04	*
;************************************************
;
;	R E Q U E S T   C O D E S
;	-------------------------
INITRQ	EQU	00	; INITIALISATION REQUEST
ASSNRQ	EQU	02	; ASSIGN REQUEST
OPENRQ	EQU	04	; OPEN REQUEST
CLOSRQ	EQU	06	; CLOSE REQUEST
RDBIRQ	EQU	0AH	; READ BINARY
RDASRQ	EQU	0CH	; READ ASCII
WRTBRQ	EQU	0EH	; WRITE BINARY REQUEST
WRTLRQ	EQU	10H	; WRITE ASCII REQUEST
DEACRQ	EQU	44H	; DEACTIVATE REQUEST
;
;	P O R T   A D R E S S E S
;	-------------------------
S_11AD	EQU	04H	; SIO
S_11BD	EQU	05H
S_11AC	EQU	06H
S_11BC	EQU	07H
;
C_11_0	EQU	0CH	; BAUD RATE SIO
C_11_1	EQU	0DH
C_11_2	EQU	0EH
C_11_3	EQU	0FH
;
;	A S C I I   C O D E S
;	---------------------
TAB	EQU	09H
ASCICR	EQU	0DH
ASCILF	EQU	0AH
E_O_F	EQU	0FFH	; END OF FILE MARK
;
;	B I T   D E F I N I T I O N S
;	-----------------------------
RX_RDY	EQU	0	; RECIEVER READY BIT
TX_RDY	EQU	2	; TRANSMITTER READY BIT
ALLSENT	EQU	0	; TRANSMITTER EMPTY BIT
;
;	S Y S T E M   A D R E S S E S
;	-----------------------------
ERCODE	EQU	13BDH	; ERROR CODE ADDRESS
DATE 	EQU	13ABH	; GLOBAL DATE
*H DRIVER START
;	R E Q U E S T   C O D E   D E C O D E
; 	-------------------------------------
	GLOBAL    DRAW
;
	ORG	0FA80H	; START PLOT DRIVER SIO
;
DRAW	CALL	DEC_REQ	; DECODE REQUEST CODE
	DEFB	7	; NUMBER OF VALID REQUEST CODES
;
	DEFB	INITRQ
	DEFW	S_INITRQ	; INITIALIZE 
;
	DEFB	ASSNRQ	; ASSIGN REQUEST ?
	DEFW	S_INITRQ	; INITIALIZE 
;
	DEFB	OPENRQ	; OPEN REQUEST ?
	DEFW	S_OPENRQ
;
	DEFB	CLOSRQ	; CLOSE - JUST RETURN
	DEFW	OKEXIT
;
	DEFB	WRTBRQ	; WRITE BINARY REQUEST ?
	DEFW	S_WRTBRQ
;
	DEFB	WRTLRQ	; WRITE LINE REQUEST ?
	DEFW	S_WRTLRQ
;
	DEFB	DEACRQ	; DEACTIVATE - JUST RETURN
	DEFW	S_DEACRQ
*H INITIALIZE
;	0 0	I N I T I A L I Z E
;	-------------------------
;
S_INITRQ
	LD	HL,I_SIO	; INITIALIZE SIO
	CALL	INIT
	IN	A,(S_11AD)
;
	RET
;
;
;	0 4	O P E N   R E Q U E S T
;	-----------------------------
;
S_OPENRQ
	RET
;
;
; 	0 6	C L O S E   R E Q U E S T
;	-------------------------------
;
S_CLOSRQ
	RET
*H WRITE BINARY
;	0 E   W R I T E   B I N A R Y
;	-----------------------------
;
S_WRTBRQ
	RET	Z	; IF BC = 0 RETURN
;
LOOP_B	LD	A,(HL)	; GET BYTE FOR OUTPUT
;
	CP	E_O_F	; END OF FILE MARK ?
	JP	Z,ENDFIL
;
	CALL	SEND	; SEND 1 CHARACTER TO PLOTTER
	CP	ASCICR	; IF ASCICR SEND LF
	CALL	Z,SEND_LF	; SEND LF AFTER CR
	CPI		; INC HL   DEC BC
	JP	PE,LOOP_B
OKEXIT	RET
;
;
;	1 0   W R I T E   L I N E
;	-------------------------
S_WRTLRQ
	RET	Z	; IF BC = 0 RETURN
;
LOOP_L	LD	A,(HL)	; GET BYTE FOR OUTPUT
;
	CP	E_O_F	; END OF FILE MARK ?
	JP	Z,ENDFIL
;
	CALL	SEND	; SEND 1 CHARACTER TO PLOTTER
	CP	ASCICR	; IF ASCICR SEND LF
	CALL	Z,SEND_LF	; SEND LF AFTER CR
	LD	A,ASCICR	; IS IT A C.RETURN
	CPI		; INC HL   DEC BC
	JR	Z,ENDLIN
;
	JP	PE,LOOP_L
	RET
;
;	-------------------------
;
FILEND	CPI
ENDFIL
ENDLIN	LD	L,(IY+4)	; CALCULATE HOW MANY
	LD	H,(IY+5)	; BYTES HAVE BEEN OUTPUT
	AND	A	; FROM BUFFER
	SBC	HL,BC
	LD	(IY+4),L	; LOAD INTO VECTOR
	LD	(IY+5),H
	RET
;
;	4 4	D E A C T I V A T E   R E Q U E S T
;	-----------------------------------------
;
S_DEACRQ
	RET
*H
;	S E N D   1   C H A R A C T E R   T O   P L O T T E R
;	-----------------------------------------------------
;
SEND_LF	LD	A,ASCILF
;
SEND	PUSH	AF	; SAVE CHARACTER
;
WAITB	LD	A,1	; REG 1
	OUT	(S_11AC),A
	IN	A,(S_11AC)	; READ STATUS SIO
	BIT	ALLSENT,A	; TEST SIO EMPTY
	JR	Z,WAITB	; TEST AGAIN
;
	XOR	A	; A = 0
DELAY	NOP
	DEC	A
	JR	NZ,DELAY
;
	POP	AF	; RESTORE
	OUT	(S_11AD),A
	RET
;
*H INITIALIZE DATA
;	I N I T I A L I Z E   D A T A
;	-----------------------------
;
I_SIO
SI_11A	DEFB	9	; LENGTH INIT SIO 1.1 A
	DEFB	S_11AC	; PORT NUMBER SIO 1.1 A
;
	DEFB	00011000B	; NEXT REG. = 0  RESET
	DEFB	3	; NEXT REG. = 3
	DEFB	11100000B	; 8 BIT  AUTO ENABLE
	DEFB	4	; NEXT REG. = 4
	DEFB	01001100B	; X16 CLOCK 1 STOPBIT NO PARITY
	DEFB	5	; NEXT REG. = 5
	DEFB	11101010B	; DTR, 8 BIT, RTS
	DEFB	1	; NEXT REG. = 1
	DEFB	00000000B	; NO INTERRUPT
;
CTC110	DEFB	2	; LENGTH CTC INITIALIZE
	DEFB	C_11_0	; CTC 1.1 CHANNEL 0
	DEFB	00000111B	; TIMER MODE PRESCALER = 16
	DEFB	1	; 9600 BAUD
;
	DEFB	00	; END OF INITIALIZE
;
*H INIT
;	INITIALIZE SIO'S + CTC'S + PIO'S	
;	--------------------------------
;
;	(HL)   = LENGTH
;	(HL+1) = CONTROL PORT
;	(HL+2) = INITIALIZE DATA
;
;  HL >	DEFB	N
;	DEFB	PORT
;	DEFB	DATA_1
;	DEFB	DATA_2
;	:
;	:
;	DEFB	DATA_N
;  N+1	DEFB	00	; STOP CONDITION
;
INIT	LD	A,(HL)	; A  = LENGTH
	AND	A	; A = 0 FINISH
	RET	Z	; END OF INITIALIZE
	LD	B,A	; B  = LENGTH OF INITIALIZE
	INC	HL
	LD	C,(HL)	; C  = PORT ADDRESS
	INC	HL
	OTIR		; SEND TO DEVICE
	JR	INIT	; REPEAT
;
;
*H REQUEST CODE DECODE
;
	GLOBAL DEC_REQ OKEXIT
;START	CALL	DEC_REQ	; DRIVER EXAMPLE.
;	DEFB	N	; NUMBER OF VALID REQ. CODES
;	DEFB	OP_CODE_1
;	DEFW	START_OP_CODE_1
;	DEFB	OP_CODE_2
;	DEFW	START_OP_CODE_2
;	:
;	:
;	DEFB	OP_CODE_#N
;	DEFW	START_OP_CODE_#N
;
DEC_REQ	LD	HL,IORTN1	; HL = COMMON RETURN  POINT
	EX	HL,(SP)	; HL = OPCODE TABLE START
	LD	(IY+10),80H	; GOOD COMPLETION CODE
	LD	A,(IY+1)	; A  = OPCODE
	LD	B,(HL)	; B  = NUMBER OF OPCODES
	INC	HL
SEARCH	CP	(HL)	; OPCODE FOUND ?
	JR,Z	FOUND	; YES
	INC	HL
	INC	HL
	INC	HL
	DJNZ	SEARCH	; MORE VALID OPCODES ?
;
	LD	(IY+10),0C1H	; INVALID REQUEST CODE
	RET
;
FOUND	INC	HL
	LD	A,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,A
	PUSH	HL	; SAVE REQ. CODE START ON STACK
;
	LD	L,(IY+2)
	LD	H,(IY+3)	; HL = DATA START ADDRESS
;
	LD	C,(IY+4)
	LD	B,(IY+5)	; BC = DATA LENGTH
;
	LD	A,B
	OR	C	; Z = 1  IF BC = 0
	RET
;
IORTN1:	BIT	6,(IY+10)
	JR	Z,IORET
ERRTN:
	LD	H,(IY+9)
	LD	L,(IY+8)
	LD	A,H
	OR	L
	JR	Z,IORET
	JP	(HL)
IORET:
	BIT	0,(IY+1)	; CHECK WHICH RETURN
	RET	Z	
	LD	H,(IY+7)	; RETURN TO COMPLETION ADDRESS
	LD	L,(IY+6)	
	JP	(HL)
	END