File: BOOT40.MA of Tape: OS8/OS8-Latest/new-9
(Source file text) 

/BOOT FOR KBM V40
/
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1977 BY DIGITAL EQUIPMENT CORPORATION
/		 AND 1979 BY DATAPLAN GMBH
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
/CORPORATION.  DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY
/FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL.
/
/DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE
/OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY
/DIGITAL.
/
/
/
/
/
/
/
/
/
/
/
	/SR

/FIXES MADE FOR MAINTENANCE RELEASE:

/1.	ADDED RX01 (FLOPPY BOOTSTRAP)
/2.	LEFT PATCH SPACE IN NAME TABLE

/	26-DEC-77

/1.	ADDED RL BOOTSTRAP (S.R.)

	/WVDM
/1.	LOWER CASE
/2.	MACREL
/3.	MULTI8
/4.	GERMAN
/5.	SI DISK

/INSTRUCTIONS THAT GENERATE CONSTANTS

AC0001=CLA IAC
AC0002=CLA CLL CML RTL
AC0003=CLA CLL CML IAC RAL
AC0004=CLA CLL IAC RTL
AC0006=CLA CLL CML IAC RTL
AC0100=CLA IAC BSW
AC2000=CLA CLL CML RTR
AC3777=CLA CLL CMA RAR
AC4000=CLA CLL CML RAR
AC5777=CLA CLL CMA RTR
AC6000=CLA CLL CML IAC RTR
AC7775=CLA CLL CMA RTL
AC7776=CLA CLL CMA RAL

	GERMAN=1


	.ASECT BOOT,ROOT
	FIELD 0
	*2000
	.START START,0
	.JSW 7403
START,	CLA		/ALLOW BEING CHAINED TO
	IOF
	TAD I (7600
	SPA CLA
	JMP OS8IN
	ISZ INNER
	JMP .-1
	ISZ OUTR
	JMP .-3
	JMS I (TESTRK
COSIN,	TAD I (7776
COMN,	CIA
	DCA CODE
	TAD (TABLE
	DCA PTR
LOOP,	TAD I PTR
	SNA
	JMP I (OS8
	TAD CODE
	SZA CLA
	JMP NXT
	ISZ PTR
	TAD I PTR
	DCA OLDLOC
	ISZ PTR
	TAD I PTR
	DCA NEWLOC
	ISZ PTR
	TAD I PTR
	CIA
	DCA LENGTH
XXLUP,	TAD I OLDLOC
	DCA I NEWLOC
	ISZ OLDLOC
	ISZ NEWLOC
	ISZ LENGTH
	JMP XXLUP
	ISZ PTR
	TAD I PTR
	DCA TEMP
	TAD HLTSWT
	SNA CLA
	HLT
	CLL
	JMP I TEMP

NXT,	TAD PTR
	TAD (5
	DCA PTR
	JMP LOOP
OS8IN,	TAD I (7600
	TAD (-4207
	SZA CLA
	JMP I (RETRY
	TAD I (1000
	TAD (777
	SNA CLA
	TAD (600
	TAD (1000-1
	DCA SCAN
SKAN,	ISZ SCAN
	TAD I SCAN
	SNA
	JMP I (RETRY
	AND (177
	TAD (-<"/&177>
	SZA CLA
	JMP SKAN
	ISZ SCAN
	TAD I SCAN
	AND (37
	BSW
	DCA TEMP
	ISZ SCAN
	TAD I SCAN
	AND (37
	TAD TEMP
	DCA TEMP
	ISZ SCAN
	TAD I SCAN
	AND (177
	TAD (-<".&177>
	DCA HLTSWT
	TAD TEMP
	JMP COMN
HLTSWT,	1
INNER,	0
OUTR,	-20
CODE,	0
LENGTH,	0
OLDLOC,	0
NEWLOC,	0
PTR,	0
SCAN,	0
TEMP,	0
	PAGE
LV,	"V
V1,	"4
V2,	"0
PTCLEV,	"B

VERS,	TAD LV
	JMS PUT
	TAD V1
	JMS PUT
	TAD V2
	JMS PUT
	TAD PTCLEV
	JMS PUT
	JMP I (RETRY

	DIML=6615
DISK,	CLA IAC
	DIML
	SNA CLA
	JMP GOTRF
	TAD (70
	6732
	SNA CLA
	JMP GOTRK8
	CLA IAC
	6744
	SNA CLA
	JMP	GOTRE
	STA
	6512
	CLA
	6513
	TAD (-17
	SZA CLA
	JMP I	(RETRY
	TAD	('SI
	JMP I	(COMN

GOTRE,	STA		/RE
GOTRF,	TAD ('RF	/RF
	JMP I (COMN
GOTRK8,	TAD ('RK	/RK
	JMP I (COMN
TAPE,	6141		/LINC
	17		/COMPL AC
	2		/PDP
	IAC
	SNA CLA
	JMP GOTLTA
	TAD (70
	6774
	CLA
	6772
	NOP
	TAD (-70
	SNA CLA
	JMP GOTTC
	AC4000
	6774
	CLA
	6776
	SMA CLA
	JMP I (RETRY

GOTTD,	CLA IAC
GOTTC,	TAD ('TC	/TC
	JMP I (COMN
GOTLTA,	TAD ('LT	/LT
	JMP I (COMN
CRLF,	0
	TAD (215
	JMS PUT
	TAD (212
	JMS PUT
	JMP I CRLF

PUT,	0
	TLS
	TSF
	JMP .-1
	CLA
	JMP I PUT

GET,	0
	KSF
	JMP .-1
	KRB
	AND (177
	TLS
	TSF
	JMP .-1
	TAD (-003
	SNA
	JMP I (7605
	TAD (003-177
	SNA
	JMP I (RETRY
	TAD (177-015
	SZA
	ISZ GET
	TAD (015
	JMP I GET
TESTRK,	0
	TAD (70
	6732
	SNA CLA
	JMP I TESTRK
RK05,	TAD (RK8E
	DCA I (RKADR
	JMP I TESTRK
	PAGE
OS8,
.IF NDF GERMAN <
	TAD ("N
	JMS I (PUT
	TAD ("O
	JMS I (PUT
	>
.IF DF GERMAN <
	TAD	("N
	JMS I	(PUT
	TAD	("e
	JMS I	(PUT
	TAD	("i
	JMS I	(PUT
	TAD	("n
	JMS I	(PUT
	>
RETRY,	CLA CLL
	JMS I (CRLF
	TAD ("/
	JMS I (PUT
	JMS I (GET
	JMP RETRY
	AND	(37
	BSW
	DCA I (TEMP
	JMS I (GET
	JMP RETRY
	AND	(37
	TAD I (TEMP
	DCA I (TEMP
RETMOR,	JMS I (GET
	JMP RETEND
	TAD (-<".&177>
	DCA I (HLTSWT
	JMP	RETMOR
RETEND,	CLA CLL
	JMS I (CRLF
	TAD I (TEMP
	JMP I (COMN
/
	PAGE
/FORMAT:
/
/SIXBIT OF 2-CHARACTER NAME
/ADDRESS OF BOOTSTRAP CODE IN BOOT
/ADDRESS WHERE BOOTSTRAP CODE IS TO BE MOVED TO
/LENGTH OF BOOTSTRAP IN WORDS
/STARTING ADDRESS OF BOOTSTRAP

TABLE,	'TC
	DECTAP
	7554
	25
	7554

	'RK
RKADR,	RK8
	21
	11
	21

	'TD
	TD8E
	TD8EST
	34
	TD8EST

	'LT
	LINCTP
	4400
	7
	4400

	'RF
	RF08
	7746
	7
	7746

	'PT
	BINLDR
	7626
	152
	7700

	'ZE
	ZERO
	ZERSTR
	6
	ZERSTR
	'TY
	TYPSET
	7730
	42
	7730

	'DL
	DIAL
	4012
	6
	4012

	'CA
	CAS
	4000
	40
	4000

	'DM
	DSKMON
	171
	16
	174

	'VE
	VERS
	VERS
	1
	VERS

	'DT
	TAPE
	TAPE
	1
	TAPE

	'DK
	DISK
	DISK
	1
	DISK
	'RE
	RK8E
	RK8EST
	11
	RK8EST

	'SI
	SIDK
	SIDKST
	6
	SIDKST

	'RX
	RX01
	RX8E
	42
	RXSTRT

	'RL
	RL01
	RLPRIM
	35
	RLPRIM

	'VX
	VXA0
	VXSTR
	7
	VXSTR

	'MU
	M8
	M8STR
	14
	M8STR

	ZBLOCK 3^5	/PATCH SPACE

	0
	PAGE
DECTAP,	7600
	6774
	1374
	6766
	6771
	5360
	7240
	1354
	3773
	1354
	3772
	1375
	6766
	5376
	7754
	7755
	0600
	0220
	6771
	5376

RK8,	6732
	6751
	6745
	5023
	6742
	6753
	6755
	6733
	5031

RK8E,	RELOC 21
RK8EST,	NOP
	NOP
	NOP
	NOP
	AC0001
	6742
	6742
	6743
	JMP	.
	RELOC
TD8E,	RELOC 7300-1
TD8EST,	6007
	1312
	4312
	4312
	6773
	5303
	6777
	3726
	2326
	5303
	5732
	2000
	1300
	6774
	6771
	5315
	6776
	0331
	1327
	7640
	5315
	2321
	5712
	7354
	7756
	7747
	0077
	7400
	RELOC
LINCTP,	6141
	1020
	0020
	0004
	0700
	0000
	6020

RF08,	6643
	6615
	7600
	6603
	6622
	5352
	5752

SIDK,	RELOC 0
SIDKST,	6502
	0000
	6517
	6512
	6514
	JMP	.
	RELOC

M8,	RELOC 20
M8STR,	CAF
	6254		/SM8
	HLT
	6000		/MULTI8 HANDLER CALL
	JMP	.+4
	200		/2 PAGES
	7400		/IN 7400
	0		/BLOCK 0
	SZA		/AC = 0 OK
	HLT
	JMP I	.+1
	7400		/NEW RESTORE/BOOT 1-MAR-80
	RELOC
BINLDR,	0000
	3212
	4260
	1300
	7750
	5237
	2212
	7040
	5227
	1212
	7640
	5230
	1214
	0274
	1341
	7510
	2226
	7750
	5626
	1214
	0256
	1257
	3213
	5230
	0070
	6201
	0000
	0000
	6031
	5262
	6036
	3214
	1214
	5660
	6011
	5270
	6016
	5265
	0300
	4343
	7041
	1215
	7402
	6032
	6014
	6214
	1257
	3213
	7604
	7700
	1353
	1352
	3261
	4226
	5313
	3215
	1213
	3336
	1214
	3376
	4260
	3355
	4226
	5275
	4343
	7420
	5336
	3216
	1376
	1355
	1215
	5315
	0000
	3616
	2216
	7600
	5332
	0000
	1376
	7106
	7006
	7006
	1355
	5743
	5262
	0006
	0000
	0000
	6014
	6011
	5357
	6016
	7106
	7006
	7510
	5374
	7006
	6011
	5367
	6016
	7420
	3776
	3376
	5357
	0000
	5301
ZERO,	RELOC 4
ZERSTR,	TAD	.+1
	DCA I	ZXR
	JMP	ZERSTR
	JMP I	ZERSTR
ZXR,	.+1
	ISZ	ZXR
	RELOC

DIAL,	6141
	1020
	0020
	0004
	0701
	7300

	LXM=6200
VXA0,	RELOC 0
VXSTR,	CLA
	TAD	VXENA
	LXM
	CIF CDF	4
	JMP I	.+1
	0000
VXENA,	7000
	RELOC
TYPSET,	6774
	1347
	4341
	7240
	1353
	3355
	1352
	4341
	5753
	7777
	6766
	3354
	6771
	5344
	5741
	4600
	7777
	7777
	4220
	7400
	7777
	7777
	7777
	6014
	6011
	5360
	7106
	6012
	7420
	5357
	5756
	4356
	3373
	4356
DSKMON,	7577
	7750
	7751
	1171
	3572
	1172
	3573
	6643
	6615
	6603
	6602
	5203
	5606
	7600

CAS,	1237
	1206
	6704
	6706
	6703
	5204
	7264
	6702
	7610
	3211
	3636
	1205
	6704
	6706
	6701
	5216
	7002
	7430
	1636
	7022
	3636
	7420
	2236
	2235
	5215
	7346
	7002
	3235
	5201
	7737
	3557
	7730
/  DEVICE IOT SYMBOLIC EQUATES
/
LCD=6751		/LOAD COMMAND
XDR=6752		/TRANSFER DATA
STR=6753		/SKIP IF READY TO TRANSFER
SER=6754		/SKIP ON ERROR
SDN=6755		/SKIP ON DONE

RX01,	RELOC 20
RX8E,
READ,	TAD	UNIT	/TRY NEXT COMBINATION OF DENSITY AND UNIT
	TAD	CON360	/ADDING IN 360
	AND	CON420	/KEEPING ONLY 420 BITS
	DCA	UNIT	/CYCLES 400,420,0,20,400,,,,,,,,
	AC0006		/COMMAND TO READ DISK - MUST BE ON OMNIBUS!
	TAD	UNIT	/UNIT AND DENSITY
	LCD		/COMMAND TO CONTROLLER
	AC0001		/TO SET SECTOR AND TRACK TO 1
	JMS	LOAD	/SECTOR TO CONTROLLER, LEAVES AC ALONE
	JMS	LOAD	/AND TRACK
LITRAL,	7004		/LEAVING A 2 IN AC; SERVES AS LITERAL
/
/  FOLLOWING IS PART OF WAIT LOOP, SAME SECONDARY BOOTS, OLD PRIMARY BOOT
/
RXSTRT,
XSTRT,	SDN		/HAS DONE COME UP; CODE STARTS HERE!
	JMP	LOAD+1	/NO, GO CHECK FOR READY TO TRANSFER
/
/  NOW, DONE OR ERROR
/
	SER		/SKIP ON AN ERROR, TRY ANOTHER DENSITY ETC.
	SNA		/NASTY, AC=2 FOR ABOUT TO DO SILO, 0 ON START-UP
	JMP	READ	/START-UP, GO SET UP UNIT, THEN READ TO SILO
	TAD	UNIT	/AC ALREADY 2, PUT IN UNIT, DENSITY
	LCD		/TO EMPTY THE SILO
	TAD	UNIT	/SET UP LOC 60 FOR OLD SECONDARY BOOT
	AND	CON360	/KEEPING UNLY DENSITY BIT
	TAD	LITRAL	/ADDING IN 7004, BECAUSE THAT'S WHAT SYS WANTS
	DCA	RX1SAV	/OLD SECONDARY BOOT MOVES IT TO HANDLER
CON360,	360		/LITERAL; EXECUTES IN LINE AS A NO-OP
/			/FALLS THRU TO NEXT PAGE OF LISTING
/  FOLLOWING CODE SAME AS OLD PRIMARY BOOT
/
	JMS	LOAD	/GRAB NEXT ITEM FROM SILO
	DCA	2	/TRADITION; SECONDARY BOOT STARTS LOADING AT 2 !
	ISZ	50	/INCREMENT LOAD ADDRESS
	JMP	47	/GO BACK FOR ANOTHER
/
/  SECONDARY BOOT LOADS OVER PRIMARY BOOT UNIT LOCATION 47 IS LOADED,
/  THEN CONTROL PASSES TO SECONDARY BOOT
/
LOAD,	0		/SUBROUTINE TO GIVE AND TAKE DATA FROM CONTROLLER
	STR		/IS HE READY TO TALK TO US?
	JMP XSTRT	/NO, IS HE PERHAPS DONE WITH SILO, OR IN ERROR?
	XDR		/YES, DATA IN OR OUT;IF DATA TO CONTROLLER, AC UNCHANGED
	JMP I	LOAD	/NO MAGIC, JUST EXIT FROM SUBROUTINE
/
/  60 GOES TO OLD SECONDARY BOOT
/  61 HAS DENSITY AND UNIT THAT BOOTED SUCCESSFULLY
/
/
CON420,			/USE IT TO HOLD 420 LITERAL TO START OUT
RX1SAV,	420		/UNIT^20+7004 TO GO TO SYS HANDLER
UNIT,	20		/<DENSITY^400>+<UNIT^20> THAT BOOTED OK
/

	RELOC
/RL01 DEFINITIONS

RLIOT=6600
RLDC=RLIOT 0	/CLEAR DEVICE
RLSD=RLIOT 1	/SKIP IF DONE
RLMA=RLIOT 2	/LOAD MEM ADDR
RLCA=RLIOT 3	/LOAD REGISTER "A"
RLCB=RLIOT 4	/LOAD REG "B" AND EXECUTE
RLSA=RLIOT 5	/LOAD SECTOR ADDR
		/RLIOT 6 UNUSED
RLWC=RLIOT 7	/LOAD WORD COUNT
RRER=RLIOT 10	/READ ERROR REG
RRWC=RLIOT 11	/READ WORD COUNT
RRCA=RLIOT 12	/READ REG "A"
RRCB=RLIOT 13	/READ REG "B"
RRSA=RLIOT 14	/READ SECTOR ADDR
RRSI=RLIOT 15	/READ SILO BYTE
		/RLIOT 16 UNUSED
RLSE=RLIOT 17	/SKIP IF ERROR
/RLCB FUNCTION BITS:
	RLMT=0	/MAINTENANCE MODE
	RLRE=1	/RESET DRIVE ERRORS
	RLST=2	/READ STATUS REGS INTO SILO
	RLSK=3	/SEEK
	RLRH=4	/READ HEADER
	RLWR=5	/WRITE
	RLRD=6	/READ
	RLRN=7	/READ WITH NO HEADER CHECK
/BIT DEFINITIONS IN REGISTERS:
BYTE=1000	/BYTE TRANSFER MODE
RL01,	RELOC 1
RLPRIM,	RLDC		/CLEAR DRIVE
	AC0001
	JMS	IOSUB	/RESET DRIVE ERRORS
	TAD	.	/=1004
	JMS	IOSUB	/BYTE READ HEADER TO FIND OUT WHERE WE ARE
	RRSI		/READ HEADER BYTE #1
	BSW
	RTR		/LSB OF CYLINDER
	RRSI		/READ HEADER BYTE #2
	AND	C377
	RAL		/MAKE CYLINDER ADRESS
	RLCA		/USE AS DIFFERENCE FOR SEEK TO 0,0
	AC0003
	JMS	IOSUB	/GO SEEK
	AC2000		/SECTOR 20
	RLSA		/LOAD IT
	TAD	CM200
	RLWC		/ONE PAGE WORD COUNT
	AC0006
	JMS	IOSUB	/READ SECONDARY BOOTSTRAP
C377,	0377		/IOSUB DOES NOT RETURN (OVERLAID)
CM200,	-200
IOSUB,	0
	RLCB		/EXECUTE FINCTION
	RLSD		/WAIT UNTIL DONE
	JMP	.-1	/'IOSUB' IS ALSO IN SEC. BOOT
	RLSE		/KEEP IT HERE
	JMP I	IOSUB
	JMP	RLPRIM	/ERROR : TRY AGAIN
	RELOC
	PAGE