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

⟦b8a626847⟧ TextFile

    Length: 4224 (0x1080)
    Types: TextFile
    Names: »BOOT.Z80«

Derivation

└─⟦7303e23ba⟧ Bits:30003507 JET80 System diskette
    └─ ⟦this⟧ »BOOT.Z80« 
└─⟦a844860b7⟧ Bits:30002858 CP/M Plus (tm) Version 3.0 for JET80
    └─ ⟦this⟧ »BOOT.Z80« 
└─⟦c10cc8855⟧ Bits:30002859 CP/M Plus med Hit & Dit filoverførsel for JET80
    └─ ⟦this⟧ »BOOT.Z80« 

TextFile

	TITLE	'BOOT.Z80'

;***********************************************************
;*  THIS MODULE PATCHES THE IO-PARAMETERS FROM THE LOADER  *
;*  TO THE SCB.ASM AND CHARIO.Z80.                         *
;*  IT ALSO LOADS CCP.COM ON COLDBOOT TO A RESERVED AREA   *
;*  IN BANK0 0000H - 0DFFH, FROM WHERE IT WILL BE RELOADED *
;*  TO BANK1 ADDRESS 0100H ON WARMBOOT.                    *
;***********************************************************
; LATEST CHANGE: 1984-06-20.  PSW.
; BIOSREVSION D.

	.Z80
	PAGE	42
FALSE	EQU	0
TRUE	EQU	NOT FALSE

SWITCH	EQU	1CH		; BIT5: TERMINAL TYPE

CR	EQU	13
LF	EQU	10
BDOS	EQU	5		; HOPP-VEKTOR TO CP/M 
BASE1	EQU	100H		; CCP I BANK 1
BASE0	EQU	000H		; CCP I BANK 0.

CIVC	EQU	20H		; IN LOADER, BUT SWITCH DEPENDING
COVC	EQU	22H		;  -"-     ,       -"-
LOVC	EQU	24H		; IN LOADER
AIVC	EQU	26H		;   -"-
AOVC	EQU	28H		;   -"-
C0BD	EQU	2AH		; BAUD DEV#0
C1BD	EQU	2BH		; BAUD DEV#1
S1STRT	EQU	30H		; SIO TABLES 
SILEN	EQU	23H		; LENGTH

	EXTRN	INTVECT,?PMSG
	EXTRN	?BNKSL,?MOV,?XMOV
	EXTRN	@COVEC,@CIVEC,@LOVEC,@AOVEC,@AIVEC
	EXTRN	C0BAUD,C1BAUD,SI1ATBL

	ENTRY	?INIT,?PATCH,?LDCCP,?RLCCP

	EXTRN	?TITEL

	PAGE
	DSEG			;; BANK 0.
; ?PATCH -- THIS ROUTINE PATCHES THE IO-PARAMETERS 
;           FROM THE LOADER.

?PATCH:	LD	HL,(CIVC)	;; CONSOLE INPUT VECTOR
	LD	(@CIVEC),HL
	LD	HL,(COVC)	;; CONSOLE OUTPUT VECTOR
	LD	(@COVEC),HL
	IN	A,(SWITCH)	;; 
	AND	00100000B	;; GRAPHIC TERMINAL ?
	JR	Z,PATCH1	;; NO...JUMP
	LD	HL,1000H	;; SET DEVICE GRAPH:
	LD	(@CIVEC),HL	;; FOR CONSOLE INPUT
	LD	(@COVEC),HL	;; FOR CONSOLE OUTPUT.
PATCH1:	LD	HL,(LOVC)	;; LIST OUTPUT VECTOR
	LD	(@LOVEC),HL
	LD	HL,(AIVC)	;; AUX INPUT VECTOR
	LD	(@AIVEC),HL
	LD	HL,(AOVC)	;; AUX OUTPUT VECTOR
	LD	(@AOVEC),HL
	LD	A,(C0BD)	;; BAUD DEV#0
	LD	(C0BAUD),A
	LD	A,(C1BD)	;; BAUD DEV#1
	LD	(C1BAUD),A
	LD	HL,S1STRT	;; MOVE SIO TABLES
	LD	DE,SI1ATBL
	LD	BC,SILEN
	LDIR
	RET

; ?INIT -- SET UP INTERRUP VECTOR ENABLE INTERRUPT AND
;          WRITE A PART OF SIGNON MESSAGE.

?INIT:	LD	HL,INTVECT
	LD	A,H		;; LOAD INTERRUPT VECTOR PAGE
	LD	I,A		;; INTO Z80 REGISTER I.
	EI			;; MUST GO IF GRAPHIC TERM. 
	LD	HL,SIGNON	;; WRITE 1/2 ROW IN SIGNON.
	CALL	?PMSG
	LD	HL,?TITEL	;; WRITE 1/2 ROW IN SIGNON.
	CALL	?PMSG		;; IS IN DRIVES.ASM
	RET

	CSEG			; BANK1
; ?LDCCP -- IS CALLED FROM BIOSKRNL.Z80 TO LOAD CCP FROM
;           THE FILE CCP.COM. IT WILL BE STORED IN A BUFFER
;           AREA IN BANK1 AND WHEN ?RLCCP IS CALLED IT WILL
;           BE RELOADED TO BANK1 FOR EXECUTION.
; NOTE:     WHEN ?RLCCP IS CALLED BANK1 IS ACTIVE.

?LDCCP:	XOR	A
	LD	(CCP$FCB+15),A
	LD	HL,0
	LD	(FCB$NR),HL
	LD	DE,CCP$FCB	; OPEN FILE 'CCP.COM'
	LD	C,15
	CALL	BDOS
	INC	A		; FILE OPEN?
	JR	NZ,CCPOPEN	; YES...JUMP
CCPERR:	LD	HL,ERRCCP
	LD	A,0		; SET BANK0
	CALL	?BNKSL
	CALL	?PMSG		; WRITE ERROR MESSAGE
	LD	A,1
	CALL	?BNKSL
	LD	C,1		; GET CONSOLE INPUT
	CALL	BDOS
	LD	HL,CRLF
	CALL	?PMSG		; NEW LINE.
	JR	?LDCCP		; TRY AGAIN.

; LOAD CCP FROM 'CCP.COM'

CCPOPEN:
	LD	DE,26		; UP TO 26 SECT. READ
	LD	C,44		; MULTI-SECTOR-COUNT
	CALL	BDOS
	LD	DE,BASE1	; ADDRESS IN BANK1.
	LD	C,26
	CALL	BDOS		; SET DMA ADDRESS
	LD	DE,CCP$FCB
	LD	C,20
	CALL	BDOS		; READ RECORDS.
	CP	1		; ANY ERRORS?
	JR	NZ,CCPERR	; YES...JUMP
CCPOP3:	LD	B,0		; DEST.-BANK
	LD	C,1		; SOURCE-BANK
	CALL	?XMOV
	LD	DE,BASE1	; SOURCE-ADDRESS
	LD	HL,BASE0	; DEST.-ADDRESS
	JR	RLOOP1

; ?RLCCP -- RELOADS CCP FROM BANK0 0000H - 0DFFH TO
;           BANK1 0100H -
;           ?LDCCP USES THE MAIN PART OF THIS ROUTINE
;           TO MOVE CCP FROM BANK1 TO BANK0 ON COLDBOOT.

?RLCCP:	LD	B,1		; DEST.-BANK
	LD	C,0		; SOURCE-BANK
	CALL	?XMOV
	LD	DE,BASE0	; SOURCE-ADDRESS
	LD	HL,BASE1	; DEST.-ADDRESS
RLOOP1:	LD	BC,13*256	; COUNT
	CALL	?MOV
	LD	A,1		; SET BANK1
	JP	?BNKSL

CCP$FCB:
	DEFB	1		; DRIVE A
	DEFB	'CCP     COM'
	DEFB	0		; EX
	DEFB	0		; S1
	DEFB	0		; S2
	DEFB	0		; RC
	DEFW	0,0,0,0		; D0 --
	DEFW	0,0,0,0		; --DN
FCB$NR:	DB	0
	DB	0,0,0
CRLF:	DEFB	CR,LF,0
 

	DSEG

; MESSAGES IN BANK0.

ERRCCP:	DEFB	'CCP.COM-error. Press <RET> to retry',0
SIGNON:	DEFB	CR,CR,LF
	DEFB	'CP/M Plus Version 3.0 - Jet-',0

	END
«eof»