DataMuseum.dk

Presents historical artifacts from the history of:

Jet Computer Jet80

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

See our Wiki for more about Jet Computer Jet80

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦7a3b6c9f8⟧ TextFile

    Length: 3328 (0xd00)
    Types: TextFile
    Names: »BYTIN.SRC«

Derivation

└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80)
    └─ ⟦this⟧ »BYTIN.SRC« 

TextFile

;RETURNS BYTE FROM FILE ONE BYTE AT A TIME
;
	NAME BYTIN
	ENTRY BYTIN
	EXT SELDSK,POPHDB,PUSHBD
	INCLUDE DEFLT.SRC
;
;
BYTIN	CALL	PUSHBD		;SAVE ALL REGISTERS EXCEPT A
	LXI	D,BYTPT
	DAD	D
	MOV	A,M
	INX	H
	CMP	M
	CMC			; MAKE CARRY 0 UNLESS END OF BLOCK.
	JNZ	NTEMPT		; BRANCH AROUND BLOCK READ IF NOT EMPTY.

;THIS READS A 256 BYTE BLOCK INTO THE DATA AREA OF THE FILE DESCRIPTOR
;POINTED TO HL - LSBYT. IT MODIFIES BYTPT, LSBYT, ALL REGISTERS EXCEPT HL AND A.
	PUSH	PSW
	PUSH	H
	LXI	D,-LSBYT-3
	DAD	D		;FLAGS BYTE
	BIT	4,M		;'RANDOMLY ACCESSED' BIT
	JZ	BYTIN1		;NOT RANDOMLY ACCESSED

	IF	NOT COMPILER	;COMPILER DOESN'T USE DIRECT ACCESS
;RANDOMLY ACCESSED.  FILL BUFFER USING RANDOM READ FUNCTION
	INX	H
	INX	H
	INX	H		;FCB
	CALL	SELDSK		;SELECT PROPER DRIVE
	POP	D
	PUSH	D
	INX	D		;START OF DATA BUFFER
	MVI	C,26		;CP/M CODE FOR SETTING DMA ADDRESS
	CALL	CPM
	POP	H
	PUSH	H
	LXI	D,-LSBYT+RANREC  ;LOW BYTE OF RANDOM RECORD NUMBER
	DAD	D
	INR	M		;INCREMENT COUNT
	MOV	A,M
	CPI	1
	JRNC	RRDSET	
	INX	H		;CARRY TO HIGH BYTE
	INR	M
	JRNZ	RRDSET
	INX	H		;CARRY TO OVERFLOW BYTE
	INR	M
RRDSET	POP	H
	PUSH	H
	LXI	D,-LSBYT	;FBA
	DAD	D
	XCHG
	MVI	C,33		;RANDOM READ
	CALL	CPM
;READ SECOND SECTOR
	POP	H
	PUSH	H
	LXI	D,128+DATAB-LSBYT
	DAD	D		;SECOND HALF OF DATA BUFFER
	XCHG
	MVI	C,26		; SET DMA ADDRESS
	CALL	CPM
	POP	H
	PUSH	H
	LXI	D,-LSBYT+RANREC
	DAD	D
	INR	M		;INCREMENT RANDOM RECORD COUNT
	MOV	A,M
	CPI	1
	JRNC	RRESET
	INX	H		;CARRY TO HIGH BYTE OF RECORD COUNT
	INR	M
	JRNZ	RRESET
	INX	H		;CARRY TO OVERFLOW BYTE OF RECORD COUNT
	INR	M
RRESET:	POP	H
	PUSH	H
	LXI	D,-LSBYT
	DAD	D		;FCB
	XCHG
	MVI	C,33		;RANDOM READ
	CALL	CPM
	POP	H
	POP	PSW
	ORA	A		;CLEAR CARRY FOR NOT EOF 
	JMP	NTEMPT
	ENDIF

;DOING SEQUENTIAL READS
BYTIN1:	POP	H
	PUSH	H
	MOV	A,M
	ADI	1		; TEST LSBYT FOR FFH
	JNC	BEOF		; END OF FILE HAS BEEN REACHED.
	LXI	D,FCB-LSBYT
	DAD	D		; HL NOW POINTS TO FCB.
	CALL	SELDSK		; SELECT PROPER DRIVE.

	POP	D
	PUSH	D
	INX	D		; DE NOW POINTS TO START OF DATA BUFFER.
	MVI	C,26		; CP/M CODE FOR SETTING DMA ADDRESS.
	CALL	CPM
	POP	H
	PUSH	H
	LXI	D,FCB-LSBYT
	DAD	D
	XCHG
	MVI	C,20		; CP/M CODE FOR READ SECTOR.
	CALL	CPM
	ORA	A
	JRNZ	EOF99

;READ SECOND SECTOR TO FILL 256 BYTE BLOCK.
	POP	H
	PUSH	H
	LXI	D,128+DATAB-LSBYT
	DAD	D		; HL NOW POINTS TO SECOND HALF OF DATA BUFFER.
	XCHG
	MVI	C,26		; CP/M CODE FOR SETTING S_DMA ADDRESS.
	CALL	CPM
	POP	H
	PUSH	H
	LXI	D,FCB-LSBYT
	DAD	D		; HL NOW POINTS TO FCB.
	XCHG
	MVI	C,20		; CP/M CODE FOR READ SECTOR.
	CALL	CPM
	ORA	A
	JRNZ	EOF360
	POP	H
	POP	PSW
	ORA	A		; CLEAR CARRY FOR NOT EOF INDICATION.
	JMPR	NTEMPT

EOF99
BEOF	POP	H
	POP	PSW
	STC			; SET CARRY FOR EOF INDICATION.
	JMPR	NTEMPT

EOF360	POP	H
	MVI	M,7FH		; CODE FOR HALF FULL BUFFER.
	POP	PSW
	ORA	A		; NOT EOF QUITE YET.

NTEMPT	PUSH	PSW		; SAVE CARRY (CARRY = 1 ===> EOF).
	INR	A		; INCREMENT BYTE POINTER/COUNTER.
	DCX	H
	MOV	M,A		; STORE UPDATED BYTE POINTER.COUNTER.
	MOV	E,A
	MVI	D,0		; MAKE HIGH BYTE OF OFFSET INTO DATA BLOCK ZERO.
	INX	H
	INX	H
	DAD	D		; HL NOW POINTS TO DATA BYTE.
	POP	PSW		; RESTORE CARRY.
	MOV	A,M
	JMP	POPHDB
;
«eof»