; CPU board memory layout:
; ------------------------
; (valid only if ROM is enabled)
;
; 0000-3FFF	16kB Monitor and Diagnostics ROM
; 7800-7FFF	2kB RAM (for NPSA and stack)
;
;
			SEG	:= %01
			NSEG	:= %02
			TYIN	:= %04
			TYWR	:= %06
			TTY	:= $08
			CRLF	:= %0A
			PUTMSG	:= %0C
			HEX	:= %0E
			OUTMSG	:= %10
			HEXB	:= %12
			ADDSEG	:= %14
			ADDMSG	:= %16

0000	0000		.word   #%0000 ;RST
0002	c000		.word   #%c000 ;RST FCW
0004	8000		.word   #%8000 ;RST SEG
0006	0060		.word   #%0060 ;RST PC
--------------------------------------------------------------------------------

0008	436f7079 	.ascii	"Copyright, Zilog Inc. 1984"
--------------------------------------------------------------------------------

0022	003c		.word	60
			.ascii	"System 8000 HPCPU Monitor 10.1 - Press START to Load System\r"
--------------------------------------------------------------------------------

0060	bde0		ldk     R14,#0
0062	7dec		ldctl   psapseg,R14

0064	21014000 	ld      R1,#%4000	; non-segmented mode
0068	7d1a		ldctl   FCW,R1

006A	8d18		clr     R1
006C	7d1b		ldctl   refresh,R1
006E	3b16ffc1 	out     %ffc1,R1

0072	3a9700f0 	soutb   %00f0,RL1
0076	3a9701f0 	soutb   %01f0,RL1
007A	3a9720f0 	soutb   %20f0,RL1

007E	c980		ldb     RL1,#%80
0080	3a96ffa9 	outb    %ffa9,RL1

0084	8dd8		clr     R13		; clear error

			; calculate ROM checksum
0086	8d18		clr     R1		; clear checksum
0088	21020000 	ld      R2,#%0000	; ROM start address
008C	21033edc 	ld      R3,#%3edc	; ROM end address
0090	8323		sub     R3,R2		; ROM code size (bytes)
0092	b331ffff 	srl     R3,#1		; ROM code size (words)

0096	9724		pop     R4,@R2		; get next ROM word
0098	a145		ld      R5,R4
009A	8cd8		clrb    RL5
009C	acd5		exb     RH5,RL5
009E	8151		add     R1,R5		; add high byte to checksum
00A0	8c48		clrb    RH4
00A2	8141		add     R1,R4		; add low byte to checksum
00A4	f388		djnz    R3,%0096	; loop


00A6	0121		add     R1,@R2		; compare with checksum from ROM
00A8	e608		jr      z,%00ba

00AA	a5d0		set     R13,#0		; error #0010
00AC	3bc4ffc1 	in      R12,%ffc1
00B0	a7ca		bit     R12,#10
00B2	ee03		jr      nz,%00ba
00B4	3a96ff89 	outb    %ff89,RL1
00B8	e8fd		jr      %00b4

			; test CPU board memory (2kb as 4x2114)
00BA	8db8		clr     R11
00BC	210820ae 	ld      R8,#%20ae	; test patterns (AAAA,5555,FFFF,0000)
00C0	21090004 	ld      R9,#%0004	; number of test patterns

00C4	21037800 	ld      R3,#%7800	; start address
00C8	21027802 	ld      R2,#%7802	; next address
00CC	210403ff 	ld      R4,#%03ff	; 1 kword

00D0	978a		pop     R10,@R8		; get next test pattern
00D2	2f3a		ld      @R3,R10
00D4	bb310420 	ldir    @R2,@R3,R4	; fill memory

00D8	21037800 	ld      R3,#%7800	; reset start address
00DC	21040400 	ld      R4,#%0400	; 1 kword
00E0	bb3404ae 	cpir    R10,@R3,R4,nz

00E4	ee01		jr      nz,%00e8	; compare error
00E6	a13b		ld      R11,R3		; 

00E8	f993		djnz    R9,%00c4	; next pattern

00EA	8db4		test    R11
00EC	e608		jr      z,%00fe		; jump if no error found

			; memory error
00EE	a5d1		set     R13,#1		; error #0020
00F0	3bc4ffc1 	in      R12,%ffc1
00F4	a7ca		bit     R12,#10
00F6	ee03		jr      nz,%00fe
00F8	3a96ff91 	outb    %ff91,RL1
00FC	e8fd		jr      %00f8

			; clear string buffer at $7898
00FE	4d0578982020 	ld      %7898,#%2020	; two blanks
0104	21047898 	ld      R4,#%7898
0108	2102789a 	ld      R2,#%789a
010C	2101007f 	ld      R1,#%007f
0110	bb410120 	ldir    @R2,@R4,R1	; fill

			; copy vector table (NPSA) to $7C00
0114	21040324 	ld      R4,#%0324
0118	21027c00 	ld      R2,#%7c00
011C	21010040 	ld      R1,#%0040	; 64 words
0120	bb410120 	ldir    @R2,@R4,R1

			; preset remaining NPSA with same vector
0124	2101006f 	ld      R1,#%006f
0128	540403a0 	ldl     RR4,%03a0
012C	1d24		ldl     @R2,Rr4
012E	a923		inc     R2,#4
0130	f185		djnz    R1,%0128

0132	210403ca 	ld      R4,#%03ca
0136	21027bf2 	ld      R2,#%7bf2
013A	bd17		ldk     R1,#7
013C	bb410120 	ldir    @R2,@R4,R1

0140	210e8000 	ld      R14,#%8000
0144	210f7820 	ld      R15,#%7820
0148	5d0e7bda 	ldl     %7bda,RR14
014C	210f7898 	ld      R15,#%7898

			; set NPSA to $7C00
0150	21017c00 	ld      R1,#%7c00
0154	7d1d		ldctl   psap,R1

0156	6f0e7bea 	ld      %7bea,R14
015A	6f017bec 	ld      %7bec,R1
015E	6f0e7bde 	ld      %7bde,R14
0162	4d057be08000 	ld      %7be0,#%8000
0168	4d057be2c000 	ld      %7be2,#%c000
016E	8d18		clr     R1
0170	6f017be4 	ld      %7be4,R1
0174	64037bf1 	setb    %7bf1,#3
0178	62047bf1 	resb    %7bf1,#4

017C	a7d1		bit     R13,#1
017E	ee0b		jr      nz,%0196

0180	5f0015d4 	call    %15d4		; init and test SCC

0184	a7d2		bit     R13,#2
0186	e607		jr      z,%0196

0188	3bc4ffc1 	in      R12,%ffc1	; read SCR
018C	a7ca		bit     R12,#10
018E	ee03		jr      nz,%0196
0190	3a96ff99 	outb    %ff99,RL1
0194	e8fd		jr      %0190

0196	3b84ffc1 	in      R8,%ffc1	; read SCR
019A	a189		ld      R9,R8
019C	07080030 	and     R8,#%0030	; mask baud rate
01A0	b381fffd 	srl     R8,#3		; shift

01A4	210203d8 	ld      R2,#%03d8
01A8	210aff87 	ld      R10,#%ff87	; SIO ch. 1 control
01AC	8db8		clr     R11

01AE	9723		pop     R3,@R2
01B0	9724		pop     R4,@R2

01B2	2135		ld      R5,@R3
01B4	3ea5		outb    @R10,RH5
01B6	8d07		nop
01B8	3ead		outb    @R10,RL5
01BA	a931		inc     R3,#2
01BC	f406		dbjnz   RH4,%01b2

01BE	8cc4		testb   RL4
01C0	e60e		jr      z,%01de

01C2	61860434 	ld      R6,%0434(R8)
01C6	2135		ld      R5,@R3
01C8	3ea5		outb    @R10,RH5
01CA	8d07		nop
01CC	3eae		outb    @R10,RL6
01CE	8d07		nop
01D0	3ead		outb    @R10,RL5
01D2	8d07		nop
01D4	3ea6		outb    @R10,Rh6
01D6	a931		inc     R3,#2
01D8	acc4		exb     RH4,RL4
01DA	8cc8		clrb    RL4
01DC	e8ea		jr      %01b2

01DE	a9b0		inc     R11,#1
01E0	0b0b0002 	cp      R11,#%0002
01E4	ef03		jr      nc,%01ec
01E6	210aff85 	ld      R10,#%ff85	; SIO ch. 0 control
01EA	e8e1		jr      %01ae

01EC	21020478 	ld      R2,#%0478	; blank+CR
01F0	210a01f8 	ld      R10,#%01f8	; return address
01F4	5e0806a8 	jp      %06a8		; send string

01F8	4d087e80 	clr     %7e80		; clear error flag

01FC	21006000 	ld      R0,#%6000
0200	21010001 	ld      R1,#%0001

0204	bd20		ldk     R2,#0
0206	3a2b0018 	soutdb  @R1,@R2,R0

020A	21027e54 	ld      R2,#%7e54
020E	3a190028 	sindb   @R2,@R1,R0

0212	a920		inc     R2,#1
0214	0c24		testb   @R2
0216	e603		jr      z,%021e
0218	4d057e80ffff 	ld      %7e80,#%ffff	; set error

021E	a911		inc     R1,#2
0220	f08f		djnz    R0,%0204

0222	3b14ffc1 	in      R1,%ffc1
0226	a719		bit     R1,#9
0228	e603		jr      z,%0230
022A	4d057e80ffff 	ld      %7e80,#%ffff

0230	21020022 	ld      R2,#%0022	; "System 8000 HPCPU...
0234	210a023c 	ld      R10,#%023c	; return address
0238	5e0806a8 	jp      %06a8		; send string

023C	a7d0		bit     R13,#0
023E	e606		jr      z,%024c
0240	2102043c 	ld      R2,#%043c	; "ERROR #0010"
0244	210a024c 	ld      R10,#%024c
0248	5e0806a8 	jp      %06a8		; send string

024C	a7d1		bit     R13,#1
024E	e606		jr      z,%025c
0250	21020450 	ld      R2,#%0450	; "ERROR #0020"
0254	210a025c 	ld      R10,#%025c
0258	5e0806a8 	jp      %06a8		; send string

025C	a7d2		bit     R13,#2
025E	e606		jr      z,%026c
0260	21020464 	ld      R2,#%0464	; "ERROR #0030"
0264	210a026c 	ld      R10,#%026c
0268	5e0806a8 	jp      %06a8		; send string

026C	7c05		ei      vi		; enable vectored interrupts

026E	210e8000 	ld      R14,#%8000	; stack segment for system calls (seg. 0)
0272	210f7898 	ld      R15,#%7898	; stack pointer for system calls

0276	7f02		sc      #%02		; system call 2

0278	0df9026e 	push    @R15,#%026e

027C	60097bf0 	ldb     RL1,%7bf0
0280	07010006 	and     R1,#%0006
0284	6e097bf0 	ldb     %7bf0,RL1

0288	60087bfe 	ldb     RL0,%7bfe	; character
028C	5f000c36 	call    %0c36		; send character
0290	5f000c5a 	call    %0c5a
0294	ee04		jr      nz,%029e

0296	66027bf1 	bitb    %7bf1,#2
029A	e601		jr      z,%029e

029C	c84e		ldb     RL0,#%4e

029E	62027bf1 	resb    %7bf1,#2
02A2	21010012 	ld      R1,#%0012
02A6	761202b9 	lda     R2,%02b9(R1)
02AA	ba2c0186 	cpdrb   RL0,@R2,R1,z
02AE	ee1f		jr      nz,%02ee	; unknown command

02B0	b3110001 	sll     R1,#1
02B4	611202cc 	ld      R2,%02cc(R1)
02B8	1e28		jp      @R2

02BA	42434445	.ascii	"BCDEFGIJLMNPQRSTZ", 0

02CC	0de8		.word	#%0de8		; command 'B'
02CE	04c6		.word	#%04c6		; command 'C'
02D0	0546		.word	#%0546		; command 'D'
02D2	2340		.word	#%2340		; command 'E'
02D4	047c		.word	#%047c		; command 'F'
02D6	0d12		.word	#%0d12		; command 'G'
02D8	088a		.word	#%088a		; command 'I'
02DA	0d00		.word	#%0d00		; command 'J'
02DC	0f98		.word	#%0f98		; command 'L'
02DE	049e		.word	#%049e		; command 'M'
02E0	0d74		.word	#%0d74		; command 'N'
02E2	0894		.word	#%0894		; command 'P'
02E4	0da2		.word	#%0da2		; command 'Q'
02E6	0974		.word	#%0974		; command 'R'
02E8	1050		.word	#%1050		; command 'S'
02EA	20bc		.word	#%20bc		; command 'T'
02EC	1ea8		.word	#%1ea8		; command 'Z'
----

02EE    c83f            ldb     RL0,#%3f
02F0    5f000c36        call    %0c36
02F4    4d087b9e        clr     %7b9e
02F8    7c05            ei      vi
02FA    5e08026e        jp      %026e
--------------------------------------------------------------------------------

; This routine gets called on an uninitialized vector

02FE	21f5		ld      R5,@R15		; vector number
0300	340200a0 	ldar    R2,%03a4	; "*** UNINITIALIZED..."
0304	5f000692 	call    %0692		; print string
0308	5f0006f6 	call    %06f6		; convert R5 to hex
030C	5f00074a 	call    %074a		; print vector number

			; Restore stack pointer
0310	210e8000 	ld      R14,#%8000
0314	210f7898 	ld      R15,#%7898

0318	8d28		clr     R2
031A	3b26ffc1 	out	%ffc1,R2

031E	7c05		ei      vi
0320	5e08026e 	jp      %026e		; jump to monitor
--------------------------------------------------------------------------------

			; NPSA (new program status area)
			; Will be copied to <00>7C00

			; Reserved
0324	00000000	.word	#0, #0
0328	00000000	.word	#0, #0

			; Extended Instruction Trap
032C	00004000	.word	#0, #%4000
0330	800002fe	.word	#%8000, #%02fe

			; Privileged Instruction Trap
0334	00004000	.word	#0, #%4000
0338	800002fe	.word	#%8000, #%02fe

			; System Call Trap
033C	0000c000	.word	#0, #%c000	; segmented, system mode
0340	80001236	.word	#%8000, #%1236

			; Segmentation Error Trap
0344	00004000	.word	#0, #%4000
0348	800002fe	.word	#%8000, #%02fe

			; Nonmaskable Interrupt
034C	00004000	.word	#0, #%4000
0350	80001f22	.word	#%8000, #%1f22

			; Nonvectored Interrupt
0354	00004000	.word	#0, #%4000
0358	800002fe	.word	#%8000, #%02fe

			; Vectored Interrupts (Common)
035C	00004000	.word	#0, #%4000

0360	800002fe	.word	#%8000, #%02fe	; vector 0
0364	800002fe	.word	#%8000, #%02fe	; vector 1
0368	800002fe	.word	#%8000, #%02fe	; vector 2
036C	800002fe	.word	#%8000, #%02fe	; vector 3
0370	800002fe	.word	#%8000, #%02fe	; vector 4
0374	800002fe	.word	#%8000, #%02fe	; vector 5
0378	800002fe	.word	#%8000, #%02fe	; vector 6
037C	800002fe	.word	#%8000, #%02fe	; vector 7
0380	800002fe	.word	#%8000, #%02fe	; vector 8
0384	800002fe	.word	#%8000, #%02fe	; vector 9
0388	80000c8a	.word	#%8000, #%0c8a	; vector 10
038C	800013d4	.word	#%8000, #%13d4	; vector 11
0390	800002fe	.word	#%8000, #%02fe	; vector 12
0394	800002fe	.word	#%8000, #%02fe	; vector 13
0398	800013a8	.word	#%8000, #%13a8	; vector 14
039C	800013e8	.word	#%8000, #%13e8	; vector 15

03A0	800002fe	.word	#%8000, #%02fe	; vector 16...
--------------------------------------------------------------------------------

03A4	0024		.word	36
03A6	072a		.ascii	7, "*** UNINITIALIZED VECTOR ENTRY, ID="
--------------------------------------------------------------------------------

03CA	087f		.word	#%087f
03CC	1113		.word	#%1113
03CE	0000		.word	#0
03D0	7f00		.word	#%7f00
03D2	0004		.word	#4
03D4	0001		.word	#1
03D6	2000		.word	#%2000
--------------------------------------------------------------------------------

03D8	03e0 		.word	%03e0
03DA	0b0a		.word	#%0b0a

03DC	040c		.word	%040c
03DE	080b		.word	#080b

03E0	09c0 	xorb    RL3,#%c0
03E2	0000
0eE4	044c 	addb    RH0,#%4c
03E6	0210		subb    RH0,@R1
03E8	03c0		sub     R0,@R12
03EA	05e2		or      R2,@R14
03EC	0600
03EE	0700 	andb    RH0,#%00
03F0	0901
03F2	0a00 	xor     R1,#%0a00
03F4	0b56		cp      R6,@R5

03F6	0c0d		.word   #%0c0d

03F8	0e00
03FA	03c1 	ext0e   #%0e0003c1
03FC	05ea		or      R10,@R14
03FE	0080		addb    RH0,@R8
0400	0e01
0402	0110 	ext0e   #%0e010110
0404	0f00
0406	0010 	ext0f   #%0f000010
0408	0010		addb    RH0,@R1
040A	0110		add     R0,@R1
--------------------------------------------------------------------------------

040C	044c		orb     RL4,@R4
040E	03c0		sub     R0,@R12
0410	05e2		or      R2,@R14
0412	0600
0414	0700 	andb    RH0,#%00
0416	0901
0418	0a00 	xor     R1,#%0a00
041A	0b56		cp      R6,@R5

041C	0c0d		.word   #%0c0d

041E	0e00
0420	03c1 	ext0e   #%0e0003c1
0422	05ea		or      R10,@R14
0424	0080		addb    RH0,@R8
0426	0e01
0428	0110 	ext0e   #%0e010110
042A	0f00
042C	0010 	ext0f   #%0f000010
042E	0010		addb    RH0,@R1
0430	0110		add     R0,@R1
0432	0909
--------------------------------------------------------------------------------

			; baud rate constants
0434	0002 		.word	#%0002, #%0006, #%003e, #%00fe
--------------------------------------------------------------------------------

043C	0011		.word	#17
043E	072a		.ascii	7, "*** ERROR #0010", 13, 0

0450	0011		.word	#17
0452	072a		.ascii	7, "*** ERROR #0020", 13, 0

0464	0011		.word	#17
0466	072a		.ascii	7, "*** ERROR #0030", 13, 0

0478	0002		.word	#2
047A	200d		.ascii	" ", 13
--------------------------------------------------------------------------------

047C	ded1		calr    %06dc
047E	e704		jr      c,%0488
0480	a770		bit     R7,#0
0482	5e0e02ee 	jp      nz,%02ee
0486	8375		sub     R5,R7
0488	5e0702ee 	jp      c,%02ee
048C	b351ffff 	srl     R5,#1
0490	a950		inc     R5,#1
0492	7f01		sc      #%01
0494	2f63		ld      @R6,R3
0496	a971		inc     R7,#2
0498	f583		djnz    R5,%0494
049A	7f02		sc      #%02
049C	9e08		ret     
049E	dee2		calr    %06dc
04A0	e7f3		jr      c,%0488
04A2	8b64		cp      R4,R6
04A4	ee02		jr      nz,%04aa
04A6	8b57		cp      R7,R5
04A8	e705		jr      c,%04b4
04AA	7f01		sc      #%01
04AC	ba610340 	ldirb  @R4,@R6,R3
04B0	7f02		sc      #%02
04B2	9e08		ret     
04B4	8137		add     R7,R3
04B6	ab70		dec     R7,#1
04B8	8135		add     R5,R3
04BA	ab50		dec     R5,#1
04BC	7f01		sc      #%01
04BE	ba690340 	lddrb  @R6,@R4,R3
04C2	7f02		sc      #%02
04C4	9e08		ret     
04C6	def6		calr    %06dc
04C8	e7df		jr      c,%0488
04CA	9448		ldl     RR8,Rr4
04CC	a13a		ld      R10,R3
04CE	8d34		test    R3
04D0	5e0602ee 	jp      z,%02ee
04D4	7f01		sc      #%01
04D6	2069		ldb     RL1,@R6
04D8	ba800a96 	cpib    RL1,@R8,R10,z
04DC	7f02		sc      #%02
04DE	e606		jr      z,%04ec
04E0	9484		ldl     RR4,Rr8
04E2	ab50		dec     R5,#1
04E4	dff9		calr    %04f4
04E6	9464		ldl     RR4,Rr6
04E8	dffb		calr    %04f4
04EA	ded1		calr    %074a
04EC	8da4		test    R10
04EE	9e06		ret     z
04F0	a970		inc     R7,#1
04F2	e8f0		jr      %04d4
04F4	dfeb		calr    %0520
04F6	a152		ld      R2,R5
04F8	a04d		ldb     RL5,Rh4
04FA	dfe7		calr    %052e
04FC	a125		ld      R5,R2
04FE	df05		calr    %06f6
0500	93f4		push    @R15,R4
0502	61047b9e 	ld      R4,%7b9e
0506	c93d		ldb     RL1,#%3d
0508	6e497918 	ldb     %7918(R4),RL1
050C	69007b9e 	inc     %7b9e,#1
0510	97f4		pop     R4,@R15
0512	7f01		sc      #%01
0514	204d		ldb     RL5,@R4
0516	7f02		sc      #%02
0518	df10		calr    %06fa
051A	69017b9e 	inc     %7b9e,#2
051E	9e08		ret     
--------------------------------------------------------------------------------

0520	21013c20 	ld      R1,#'< '
0524	df56		calr    %067a		; add two characters
0526	6b007b9e 	dec     %7b9e,#1
052A	9e08		ret     

; *** ADDSEG ***
; Add segment number in hex to message string

052C	d007		calr    %0520
052E	a2d7		resb    RL5,#7
0530	df1c		calr    %06fa		; HEXB

0532	21013e20 	ld      R1,#'> '
0536	e8f6		jr      %0524
--------------------------------------------------------------------------------

; *** ADDMSG ***
; Add character in RL1 to message string

0538	61027b9e 	ld      R2,%7b9e
053C	6e297918 	ldb     %7918(R2),RL1
0540	69007b9e 	inc     %7b9e,#1
0544	9e08		ret     
--------------------------------------------------------------------------------

0546	62017bf1 	resb    %7bf1,#1
054A	de91		calr    %082a
054C	21070202 	ld      R7,#%0202
0550	610a7bde 	ld      R10,%7bde
0554	ee02		jr      nz,%055a
0556	a13b		ld      R11,R3
0558	e849		jr      %05ec
055A	decc		calr    %07c4
055C	ee02		jr      nz,%0562
055E	64017bf1 	setb    %7bf1,#1
0562	942a		ldl     RR10,RR2
0564	66017bf1 	bitb    %7bf1,#1
0568	ee3d		jr      nz,%05e4
056A	df95		calr    %0642
056C	e63b		jr      z,%05e4
056E	deb5		calr    %0806
0570	a13d		ld      R13,R3
0572	e603		jr      z,%057a
0574	df9a		calr    %0642
0576	5e0e02ee 	jp      nz,%02ee
057A	8dd4		test    R13
057C	5e0602ee 	jp      z,%02ee
0580	21060010 	ld      R6,#%0010
0584	d033		calr    %0520
0586	a1a5		ld      R5,R10
0588	a05d		ldb     RL5,RH5
058A	d02f		calr    %052e
058C	a1b5		ld      R5,R11
058E	df4d		calr    %06f6
0590	69017b9e 	inc     %7b9e,#2
0594	2108003b 	ld      R8,#%003b
0598	7f01		sc      #%01
059A	20ad		ldb     RL5,@R10
059C	7f02		sc      #%02
059E	6e8d7918 	ldb     %7918(R8),RL5
05A2	0a0d2020 	cpb     RL5,#%20
05A6	e703		jr      c,%05ae
05A8	0a0d7f7f 	cpb     RL5,#%7f
05AC	e703		jr      c,%05b4
05AE	4c8579182e2e 	ldb     %7918(R8),#%2e
05B4	a980		inc     R8,#1
05B6	df5f		calr    %06fa
05B8	a9b0		inc     R11,#1
05BA	ab60		dec     R6,#1
05BC	ee08		jr      nz,%05ce
05BE	a980		inc     R8,#1
05C0	6f087b9e 	ld      %7b9e,R8
05C4	df3e		calr    %074a
05C6	a07f		ldb     RL7,Rh7
05C8	abd0		dec     R13,#1
05CA	eeda		jr      nz,%0580
05CC	9e08		ret     
05CE	ff1c		dbjnz   RL7,%0598
05D0	69007b9e 	inc     %7b9e,#1
05D4	a07f		ldb     RL7,Rh7
05D6	abd0		dec     R13,#1
05D8	eedf		jr      nz,%0598
05DA	a980		inc     R8,#1
05DC	6f087b9e 	ld      %7b9e,R8
05E0	df4c		calr    %074a
05E2	9e08		ret     
05E4	0a0f0101 	cpb     RL7,#%01
05E8	e601		jr      z,%05ec
05EA	a3b0		res     R11,#0
05EC	94a8		ldl     RR8,RR10
05EE	d068		calr    %0520
05F0	a1a5		ld      R5,R10
05F2	a05d		ldb     RL5,RH5
05F4	d064		calr    %052e
05F6	a1b5		ld      R5,R11
05F8	df82		calr    %06f6
05FA	69007b9e 	inc     %7b9e,#1
05FE	7f01		sc      #%01
0600	20ad		ldb     RL5,@R10
0602	7f02		sc      #%02
0604	df86		calr    %06fa
0606	a9b0		inc     R11,#1
0608	ff06		dbjnz   RL7,%05fe
060A	69007b9e 	inc     %7b9e,#1
060E	a07f		ldb     RL7,Rh7
0610	dfd0		calr    %0672
0612	ef09		jr      nc,%0626
0614	0a085151 	cpb     RL0,#%51
0618	9e06		ret     z
061A	93f7		push    @R15,R7
061C	8c78		clrb    RH7
061E	837b		sub     R11,R7
0620	837b		sub     R11,R7
0622	97f7		pop     R7,@R15
0624	e8e3		jr      %05ec
0626	e6e2		jr      z,%05ec
0628	aaf0		decb    RL7,#1
062A	7f01		sc      #%01
062C	ee02		jr      nz,%0632
062E	2e8b		ldb     @R8,RL3
0630	e805		jr      %063c
0632	aaf0		decb    RL7,#1
0634	ee02		jr      nz,%063a
0636	2f83		ld      @R8,R3
0638	e801		jr      %063c
063A	1d82		ldl     @R8,RR2
063C	7f02		sc      #%02
063E	a07f		ldb     RL7,Rh7
0640	e8d5		jr      %05ec
0642	21070202 	ld      R7,#%0202
0646	0a080d0d 	cpb     RL0,#%0d
064A	9e06		ret     z
064C	0a085757 	cpb     RL0,#%57
0650	9e06		ret     z
0652	21070101 	ld      R7,#%0101
0656	0a084242 	cpb     RL0,#%42
065A	9e06		ret     z
065C	21070404 	ld      R7,#%0404
0660	0a084c4c 	cpb     RL0,#%4c
0664	9e06		ret     z
0666	21070202 	ld      R7,#%0202
066A	9e08		ret     
066C	dfbc		calr    %06f6
066E	69007b9e 	inc     %7b9e,#1
0672	df8e		calr    %0758
0674	5f000b60 	call    %0b60
0678	9e08		ret     
--------------------------------------------------------------------------------

; Add two characters in R1 to message string

067A	93f4		push    @R15,R4

067C	61047b9e 	ld      R4,%7b9e
0680	6e417918 	ldb     %7918(R4),RH1
0684	a940		inc     R4,#1
0686	6e497918 	ldb     %7918(R4),RL1
068A	69017b9e 	inc     %7b9e,#2

068E	97f4		pop     R4,@R15
0690	9e08		ret     
--------------------------------------------------------------------------------

; *** PUTMSG ***

0692	9720		pop     R0,@R2
0694	8d04		test    R0
0696	9e06		ret     z

0698	6f007b9e 	ld      %7b9e,R0
069C	21047918 	ld      R4,#%7918
06A0	ba210040 	ldirb	@R4,@R2,R0

06A4	5e080758 	jp      %0758
--------------------------------------------------------------------------------

; Transmit one PASCAL like string on SIO channel 1

06A8	9720		pop     R0,@R2		; get string length
06AA	8d04		test    r0		; zero?
06AC	1ea6		jp      z,@R10		; yes, return

06AE	9723		pop     R3,@R2		; get next two characters
06B0	210906b6 	ld      R9,#%06b6	; return address
06B4	e808		jr      %06c6		; send first character

06B6	ab00		dec     R0,#1		; decrement char. count
06B8	1ea6		jp      z,@R10		; zero -> return

06BA	acb3		exb     RH3,RL3
06BC	210906c2 	ld      R9,#%06c2	; return address
06C0	e802		jr      %06c6		; send second character

06C2	f08b		djnz    R0,%06ae	; loop if more characters
06C4	1ea8		jp      @R10		; return
--------------------------------------------------------------------------------

; Transmit one byte on SIO channel 1

			; wait for TX buffer empty
06C6	3a14ff87 	inb     RH1,%ff87	; SIO ch.1 control
06CA	a612		bitb    RH1,#2		; TX buffer empty flag
06CC	e6fc		jr      z,%06c6

06CE	3a36ff83 	outb	%ff83,RH3	; SIO ch.1 data
06D2	0a030d0d 	cpb     RH3,#%0d	; CR?
06D6	1e9e		jp      nz,@R9		; no, return
06D8	c30a		ldb     RH3,#%0a	; yes, add LF
06DA	e8f5		jr      %06c6
--------------------------------------------------------------------------------

06DC	df5a		calr    %082a
06DE	df8e		calr    %07c4
06E0	e608		jr      z,%06f2
06E2	9426		ldl     RR6,RR2
06E4	e801		jr      %06e8
06E6	df5f		calr    %082a
06E8	df93		calr    %07c4
06EA	e603		jr      z,%06f2
06EC	9424		ldl     RR4,RR2
06EE	df75		calr    %0806
06F0	9e0f		ret     nc
06F2	8d81		setflg  c
06F4	9e08		ret     
--------------------------------------------------------------------------------

; *** HEX ***

; Convert number in R5 to ASCII hex digits and add to message string

06F6	a050		ldb     RH0,RH5
06F8	dfff		calr    %06fc

; *** HEXB ***

06FA	a0d0		ldb     RH0,RL5

06FC	be08		rldb    RL0,RH0
06FE	dfff		calr    %0702
0700	be08		rldb    RL0,RH0

0702	93f1		push    @R15,R1
0704	06080f0f 	andb    RL0,#%0f
0708	60097ba0 	ldb     RL1,%7ba0
070C	8089		addb    RL1,RL0
070E	6e097ba0 	ldb     %7ba0,RL1
0712	0a080a0a 	cpb     RL0,#%0a
0716	e702		jr      c,%071c
0718	00080707 	addb    RL0,#%07

071C	00083030 	addb    RL0,#'0'
0720	93f6		push    @R15,R6
0722	61067b9e 	ld      R6,%7b9e
0726	6e687918 	ldb     %7918(R6),RL0
072A	69007b9e 	inc     %7b9e,#1

072E	97f6		pop     R6,@R15
0730	97f1		pop     R1,@R15
0732	9e08		ret     
--------------------------------------------------------------------------------

0734	4d047bf6 	test    %7bf6
0738	9e06		ret     z

073A	61017bf6 	ld      R1,%7bf6
073E	8d08		clr     r0
0740	5f000c36 	call    %0c36
0744	ab10		dec     R1,#1
0746	eefc		jr      nz,%0740

0748	9e08		ret     
--------------------------------------------------------------------------------

; *** OUTMSG ***
; Print string at $7918 with added CR

074A	61037b9e 	ld      R3,%7b9e	; string length
074E	4c3579180d0d 	ldb     %7918(R3),#%0d	; add CR to end of string
0754	69007b9e 	inc     %7b9e,#1	; increment length

; Print string at $7918

0758	8d38		clr     R3		; start at first char
075A	60387918 	ldb     RL0,%7918(R3)	; get char
075E	a930		inc     R3,#1		; increment ptr
0760	5f000c36 	call    %0c36		; send char
0764	e604		jr      z,%076e		; CR?

0766	4b037b9e 	cp      R3,%7b9e	; done?
076A	e7f7		jr      c,%075a		; no, loop
076C	e808		jr      %077e		; yes

076E	c80a		ldb     RL0,#%0a
0770	5f000c36 	call    %0c36		; send LF
0774	5f000734 	call    %0734

0778	66047bf1 	bitb    %7bf1,#4
077C	eeee		jr      nz,%075a

			; clear temporary string
077E	4d057b9e0000 	ld      %7b9e,#%0000	; reset length
0784	21000040 	ld      R0,#%0040
0788	4d0579182020 	ld      %7918,#%2020
078E	21027918 	ld      R2,#%7918
0792	2104791a 	ld      R4,#%791a
0796	bb210040 	ldir   @R4,@R2,R0

079A	9e08		ret     
--------------------------------------------------------------------------------

079C	0a083030 	cpb     RL0,#%30
07A0	9e07		ret     c
07A2	0a083a3a 	cpb     RL0,#%3a
07A6	e708		jr      c,%07b8
07A8	0a084141 	cpb     RL0,#%41
07AC	9e07		ret     c
07AE	0a084747 	cpb     RL0,#%47
07B2	ef06		jr      nc,%07c0
07B4	02080707 	subb    RL0,#%07
07B8	06080f0f 	andb    RL0,#%0f
07BC	8d83		resflg  c
07BE	9e08		ret     
07C0	8d81		setflg  c
07C2	9e08		ret     
07C4	dffe		calr    %07ca
07C6	dfe1		calr    %0806
07C8	9e08		ret     
07CA	61027bde 	ld      R2,%7bde
07CE	a52f		set     R2,#15
07D0	62007bf1 	resb    %7bf1,#0
07D4	0a080d0d 	cpb     RL0,#%0d
07D8	9e06		ret     z
07DA	0a083c3c 	cpb     RL0,#%3c
07DE	9e0e		ret     nz
07E0	8d38		clr     R3
07E2	dfd2		calr    %0840
07E4	5e0602ee 	jp      z,%02ee
07E8	d027		calr    %079c
07EA	e702		jr      c,%07f0
07EC	beb8		rldb    RL0,RL3
07EE	e8f9		jr      %07e2
07F0	0a083e3e 	cpb     RL0,#%3e
07F4	5e0e02ee 	jp      nz,%02ee
07F8	dfe3		calr    %0834
07FA	a0b2		ldb     RH2,RL3
07FC	8ca8		clrb    RL2
07FE	a52f		set     R2,#15
0800	64007bf1 	setb    %7bf1,#0
0804	9e08		ret     
0806	8d38		clr     R3
0808	0a080d0d 	cpb     RL0,#%0d
080C	8d81		setflg  c
080E	9e06		ret     z
0810	d03b		calr    %079c
0812	5e0702ee 	jp      c,%02ee
0816	beb8		rldb    RL0,RL3
0818	be38		rldb    RL0,RH3
081A	dfee		calr    %0840
081C	9e06		ret     z
081E	0a082020 	cpb     RL0,#%20
0822	eef6		jr      nz,%0810
0824	dff9		calr    %0834
0826	8d83		resflg  c
0828	9e08		ret     
082A	dff6		calr    %0840
082C	9e06		ret     z
082E	0a082020 	cpb     RL0,#%20
0832	eefb		jr      nz,%082a
--------------------------------------------------------------------------------

0834	dffb		calr    %0840
0836	9e06		ret     z

0838	0a082020 	cpb     RL0,#%20
083C	e6fb		jr      z,%0834
083E	9e08		ret     
--------------------------------------------------------------------------------

0840	93f2		push    @R15,R2
0842	61027b9c 	ld      R2,%7b9c
0846	60287898 	ldb     RL0,%7898(R2)
084A	69007b9c 	inc     %7b9c,#1
084E	0a080d0d 	cpb     RL0,#%0d
0852	97f2		pop     R2,@R15
0854	9e08		ret     
--------------------------------------------------------------------------------

0856	30203120 	ldb     RH0,R2(#%3120)
085A	32203320 	ldb     R2(#%3320),Rh0
085E	34203520 	lda     R0,R2(#%3520)
0862	3620		.word   #%3620
0864	37203820 	ldl     R2(#%3820),Rr0
0868	3920		ldps    @R2
086A	31303131 	ld      R0,R3(#%3131)
086E	31323133 	ld      R2,R3(#%3133)
0872	31343135 	ld      R4,R3(#%3135)
0876	53475043 	push    @R4,%5043(R7)
087A	46435246 	andb    RH3,%5246(R4)
087E	4e344e355053 	ext4e   #%4e344e35,%5053
0884	504f524c 	cpl     RR15,%524c(R4)
0888	52482105 	subl    RR8,%2105(R4)
088C	0954		xor     R4,@R5
088E	21070934 	ld      R7,#%0934
0892	e804		jr      %089c
0894	21050964 	ld      R5,#%0964
0898	21070944 	ld      R7,#%0944
089C	6f057bbc 	ld      %7bbc,R5
08A0	6f077bba 	ld      %7bba,R7
08A4	5f00082a 	call    %082a
08A8	5e0602ee 	jp      z,%02ee
08AC	5f000806 	call    %0806
08B0	a136		ld      R6,R3
08B2	8d78		clr     R7
08B4	8d88		clr     R8
08B6	e60e		jr      z,%08d4
08B8	0a084e4e 	cpb     RL0,#%4e
08BC	ee04		jr      nz,%08c6
08BE	bd81		ldk     R8,#1
08C0	5f000840 	call    %0840
08C4	e607		jr      z,%08d4
08C6	0a085757 	cpb     RL0,#%57
08CA	e605		jr      z,%08d6
08CC	0a084242 	cpb     RL0,#%42
08D0	5e0e02ee 	jp      nz,%02ee
08D4	bd71		ldk     R7,#1
08D6	a780		bit     R8,#0
08D8	ee08		jr      nz,%08ea
08DA	21057bb8 	ld      R5,#%7bb8
08DE	8175		add     R5,R7
08E0	61037bba 	ld      R3,%7bba
08E4	1f30		call    @R3
08E6	61017bb8 	ld      R1,%7bb8
08EA	a165		ld      R5,R6
08EC	5f0006f6 	call    %06f6
08F0	a780		bit     R8,#0
08F2	ee0a		jr      nz,%0908
08F4	69007b9e 	inc     %7b9e,#1
08F8	a115		ld      R5,R1
08FA	a770		bit     R7,#0
08FC	ee03		jr      nz,%0904
08FE	5f0006f6 	call    %06f6
0902	e802		jr      %0908
0904	5f0006fa 	call    %06fa
0908	69007b9e 	inc     %7b9e,#1
090C	5f000758 	call    %0758
0910	5f000b60 	call    %0b60
0914	e802		jr      %091a
0916	5f000b66 	call    %0b66
091A	9e07		ret     c
091C	9e06		ret     z
091E	8c81		ldctlb  RL0,flags
0920	21057bb8 	ld      R5,#%7bb8
0924	2f53		ld      @R5,R3
0926	8175		add     R5,R7
0928	61037bbc 	ld      R3,%7bbc
092C	1f30		call    @R3
092E	a684		bitb    RL0,#4
0930	9e0e		ret     nz
0932	e8f1		jr      %0916
0934	a770		bit     R7,#0
0936	ee03		jr      nz,%093e
0938	3b600358 	ini    @R5,@R6,R3
093C	9e08		ret     
093E	3a600358 	inib   @R5,@R6,R3
0942	9e08		ret     
0944	a770		bit     R7,#0
0946	ee03		jr      nz,%094e
0948	3b610358 	sini   @R5,@R6,R3
094C	9e08		ret     
094E	3a610358 	sinib  @R5,@R6,R3
0952	9e08		ret     
0954	a770		bit     R7,#0
0956	ee03		jr      nz,%095e
0958	3b520368 	outi   @R6,@R5,R3
095C	9e08		ret     
095E	3a520368 	outib  @R6,@R5,R3
0962	9e08		ret     
0964	a770		bit     R7,#0
0966	ee03		jr      nz,%096e
0968	3b530368 	souti  @R6,@R5,R3
096C	9e08		ret     
096E	3a530368 	soutib @R6,@R5,R3
0972	9e08		ret     
0974	5f00082a 	call    %082a
0978	5e060ac8 	jp      z,%0ac8
097C	0a085252 	cpb     RL0,#%52
0980	ee06		jr      nz,%098e
0982	5f000840 	call    %0840
0986	e615		jr      z,%09b2
0988	0a084646 	cpb     RL0,#%46
098C	e60e		jr      z,%09aa
098E	8d68		clr     R6
0990	0a084c4c 	cpb     RL0,#%4c
0994	e60c		jr      z,%09ae
0996	a961		inc     R6,#2
0998	0a084848 	cpb     RL0,#%48
099C	e608		jr      z,%09ae
099E	a963		inc     R6,#4
09A0	0a085252 	cpb     RL0,#%52
09A4	ee08		jr      nz,%09b6
09A6	ab61		dec     R6,#2
09A8	e802		jr      %09ae
09AA	c152		ldb     RH1,#%52
09AC	e809		jr      %09c0
09AE	5f000840 	call    %0840
09B2	5e0602ee 	jp      z,%02ee
09B6	a081		ldb     RH1,RL0
09B8	5f000840 	call    %0840
09BC	ee01		jr      nz,%09c0
09BE	c820		ldb     RL0,#%20
09C0	a089		ldb     RL1,RL0
09C2	21070018 	ld      R7,#%0018
09C6	21080884 	ld      R8,#%0884
09CA	bb8c0716 	cpdr    R1,@R8,R7,z
09CE	5e0e02ee 	jp      nz,%02ee
09D2	a981		inc     R8,#2
09D4	8177		add     R7,R7
09D6	0a0e0404 	cpb     RL6,#%04
09DA	e753		jr      c,%0a82
09DC	e62b		jr      z,%0a34
09DE	21015220 	ld      R1,#%5220
09E2	5f00067a 	call    %067a
09E6	6b007b9e 	dec     %7b9e,#1
09EA	2181		ld      R1,@R8
09EC	5f00067a 	call    %067a
09F0	69007b9e 	inc     %7b9e,#1
09F4	61757bbe 	ld      R5,%7bbe(R7)
09F8	5f00066c 	call    %066c
09FC	9e07		ret     c
09FE	e614		jr      z,%0a28
0A00	2182		ld      R2,@R8
0A02	0b025043 	cp      R2,#%5043
0A06	ee02		jr      nz,%0a0c
0A08	a330		res     R3,#0
0A0A	e80c		jr      %0a24
0A0C	0b025246 	cp      R2,#%5246
0A10	ee01		jr      nz,%0a14
0A12	7d3b		ldctl   refresh,R3
0A14	0b025347 	cp      R2,#%5347
0A18	ee05		jr      nz,%0a24
0A1A	0a030000 	cpb     RH3,#%00
0A1E	ee02		jr      nz,%0a24
0A20	a0b3		ldb     RH3,RL3
0A22	8cb8		clrb    RL3
0A24	6f737bbe 	ld      %7bbe(R7),R3
0A28	a971		inc     R7,#2
0A2A	a981		inc     R8,#2
0A2C	0b080885 	cp      R8,#%0885
0A30	e7d6		jr      c,%09de
0A32	9e08		ret     
0A34	0b080874 	cp      R8,#%0874
0A38	ef26		jr      nc,%0a86
0A3A	0a092020 	cpb     RL1,#%20
0A3E	e602		jr      z,%0a44
0A40	a710		bit     R1,#0
0A42	e801		jr      %0a46
0A44	a718		bit     R1,#8
0A46	eec3		jr      nz,%09ce
0A48	21015252 	ld      R1,#%5252
0A4C	5f00067a 	call    %067a
0A50	2181		ld      R1,@R8
0A52	5f00067a 	call    %067a
0A56	69007b9e 	inc     %7b9e,#1
0A5A	61757bbe 	ld      R5,%7bbe(R7)
0A5E	5f0006f6 	call    %06f6
0A62	61757bc0 	ld      R5,%7bc0(R7)
0A66	5f00066c 	call    %066c
0A6A	9e07		ret     c
0A6C	e604		jr      z,%0a76
0A6E	6f727bbe 	ld      %7bbe(R7),R2
0A72	6f737bc0 	ld      %7bc0(R7),R3
0A76	a973		inc     R7,#4
0A78	a983		inc     R8,#4
0A7A	0b080875 	cp      R8,#%0875
0A7E	e7e4		jr      c,%0a48
0A80	9e08		ret     
0A82	0b080866 	cp      R8,#%0866
0A86	5e0f02ee 	jp      nc,%02ee
0A8A	8d64		test    R6
0A8C	ee01		jr      nz,%0a90
0A8E	a970		inc     R7,#1
0A90	61610886 	ld      R1,%0886(R6)
0A94	5f00067a 	call    %067a
0A98	2181		ld      R1,@R8
0A9A	5f00067a 	call    %067a
0A9E	607d7bbe 	ldb     RL5,%7bbe(R7)
0AA2	5f0006fa 	call    %06fa
0AA6	69007b9e 	inc     %7b9e,#1
0AAA	5f000672 	call    %0672
0AAE	9e07		ret     c
0AB0	e602		jr      z,%0ab6
0AB2	6e7b7bbe 	ldb     %7bbe(R7),RL3
0AB6	a970		inc     R7,#1
0AB8	ab61		dec     R6,#2
0ABA	e6ea		jr      z,%0a90
0ABC	a963		inc     R6,#4
0ABE	a981		inc     R8,#2
0AC0	0b080866 	cp      R8,#%0866
0AC4	e7e5		jr      c,%0a90
0AC6	9e08		ret     
0AC8	dffc		calr    %0ad2
0ACA	dfd6		calr    %0b20
0ACC	dfde		calr    %0b12
0ACE	5e080b52 	jp      %0b52
0AD2	bd0c		ldk     R0,#12
0AD4	21040856 	ld      R4,#%0856
0AD8	bd68		ldk     R6,#8
0ADA	21080874 	ld      R8,#%0874
0ADE	61037b9e 	ld      R3,%7b9e
0AE2	4c3579185252 	ldb     %7918(R3),#%52
0AE8	69007b9e 	inc     %7b9e,#1
0AEC	2141		ld      R1,@R4
0AEE	5f00067a 	call    %067a
0AF2	ab00		dec     R0,#1
0AF4	5e06074a 	jp      z,%074a
0AF8	ab60		dec     R6,#1
0AFA	ee01		jr      nz,%0afe
0AFC	a184		ld      R4,R8
0AFE	a941		inc     R4,#2
0B00	0b060000 	cp      R6,#%0000
0B04	ea03		jr      gt,%0b0c
0B06	69037b9e 	inc     %7b9e,#4
0B0A	e8ee		jr      %0ae8
0B0C	69017b9e 	inc     %7b9e,#2
0B10	e8e6		jr      %0ade
0B12	bd0c		ldk     R0,#12
0B14	21040866 	ld      R4,#%0866
0B18	2108087c 	ld      R8,#%087c
0B1C	bd68		ldk     R6,#8
0B1E	e8df		jr      %0ade
0B20	bd2c		ldk     R2,#12
0B22	21067bbe 	ld      R6,#%7bbe
0B26	bd88		ldk     R8,#8
0B28	210a7bdc 	ld      R10,#%7bdc
0B2C	2165		ld      R5,@R6
0B2E	5f0006f6 	call    %06f6
0B32	ab20		dec     R2,#1
0B34	5e06074a 	jp      z,%074a
0B38	ab80		dec     R8,#1
0B3A	ee01		jr      nz,%0b3e
0B3C	a1a6		ld      R6,R10
0B3E	a961		inc     R6,#2
0B40	0b080000 	cp      R8,#%0000
0B44	ea03		jr      gt,%0b4c
0B46	69027b9e 	inc     %7b9e,#3
0B4A	e8f0		jr      %0b2c
0B4C	69007b9e 	inc     %7b9e,#1
0B50	e8ed		jr      %0b2c
0B52	bd2c		ldk     R2,#12
0B54	21067bce 	ld      R6,#%7bce
0B58	bd88		ldk     R8,#8
0B5A	210a7be4 	ld      R10,#%7be4
0B5E	e8e6		jr      %0b2c
0B60	c83f		ldb     RL0,#%3f
0B62	df97		calr    %0c36
0B64	df86		calr    %0c5a
0B66	8d28		clr     R2
0B68	8d38		clr     R3
0B6A	5f000834 	call    %0834
0B6E	9e06		ret     z
0B70	0a085151 	cpb     RL0,#%51
0B74	e603		jr      z,%0b7c
0B76	0a082d2d 	cpb     RL0,#%2d
0B7A	ee02		jr      nz,%0b80
0B7C	8d81		setflg  c
0B7E	9e08		ret     
0B80	5f00079c 	call    %079c
0B84	5e0702ee 	jp      c,%02ee
0B88	beb8		rldb    RL0,RL3
0B8A	be38		rldb    RL0,RH3
0B8C	bea8		rldb    RL0,RL2
0B8E	be28		rldb    RL0,Rh2
0B90	5f000840 	call    %0840
0B94	ee02		jr      nz,%0b9a
0B96	8d11		setflg  p
0B98	e804		jr      %0ba2
0B9A	0a082020 	cpb     RL0,#%20
0B9E	eef0		jr      nz,%0b80
0BA0	8d83		resflg  c
0BA2	8d43		resflg  z
0BA4	9e08		ret     
--------------------------------------------------------------------------------

; *** TTY ***

0BA6	6f017b9a 	ld      %7b9a,R1
0BAA	8d18		clr     R1

0BAC	dfce		calr    %0c12
0BAE	66037bf1 	bitb    %7bf1,#3
0BB2	ee07		jr      nz,%0bc2

			; convert lower to upper case
0BB4	0a086161 	cpb     RL0,#%61
0BB8	e704		jr      c,%0bc2
0BBA	0a087b7b 	cpb     RL0,#%7b
0BBE	ef01		jr      nc,%0bc2
0BC0	a285		resb    RL0,#5

0BC2	72280100 	ldb     R2(R1),RL0
0BC6	4a087bf2 	cpb     RL0,%7bf2
0BCA	e60c		jr      z,%0be4

0BCC	4a087bf3 	cpb     RL0,%7bf3
0BD0	e60e		jr      z,%0bee

0BD2	0a080d0d 	cpb     RL0,#%0d
0BD6	e611		jr      z,%0bfa

0BD8	a910		inc     R1,#1
0BDA	4b017b9a 	cp      R1,%7b9a
0BDE	e7e6		jr      c,%0bac

0BE0	8d41		setflg  z
0BE2	9e08		ret     

0BE4	dff0		calr    %0c06
0BE6	ede2		jr      pl,%0bac
0BE8	c85b		ldb     RL0,#'['
0BEA	dfdb		calr    %0c36
0BEC	e8de		jr      %0baa

0BEE	8d14		test    R1
0BF0	e6dd		jr      z,%0bac
0BF2	c808		ldb     RL0,#%08
0BF4	dfe0		calr    %0c36
0BF6	dff9		calr    %0c06
0BF8	e8fa		jr      %0bee

0BFA	c80a		ldb     RL0,#%0a
0BFC	dfe4		calr    %0c36
0BFE	74220100 	lda     R2,R2(R1)
0C02	8d43		resflg  z
0C04	9e08		ret     
0C06	c820		ldb     RL0,#%20
0C08	dfea		calr    %0c36
0C0A	c808		ldb     RL0,#%08
0C0C	dfec		calr    %0c36
0C0E	ab10		dec     R1,#1
0C10	9e08		ret     
--------------------------------------------------------------------------------

0C12	dffe		calr    %0c18
0C14	dff0		calr    %0c36
0C16	9e08		ret     
--------------------------------------------------------------------------------

; *** TYIN ***

0C18	4c047ba1 	testb   %7ba1
0C1C	e6fd		jr      z,%0c18

0C1E	93f2		push    @R15,R2

0C20	61007ba4 	ld      R0,%7ba4
0C24	dfd5		calr    %0c7c
0C26	6f007ba4 	ld      %7ba4,R0
0C2A	60287998 	ldb     RL0,%7998(R2)
0C2E	6a007ba1 	decb    %7ba1,#1

0C32	97f2		pop     R2,@R15
0C34	9e08		ret     
--------------------------------------------------------------------------------

; *** TYWR ***

0C36	66027bf0 	bitb    %7bf0,#2
0C3A	eefd		jr      nz,%0c36

			; wait for TX ready
0C3C	3a04ff87 	inb	RH0,%ff87
0C40	a602		bitb    RH0,#2
0C42	e6f9		jr      z,%0c36

			; send character
0C44	3a86ff83 	outb	%ff83,RL0
0C48	0a080d0d 	cpb     RL0,#%0d
0C4C	9e08		ret     
--------------------------------------------------------------------------------

; *** CRLF ***

0C4E	c80d		ldb     RL0,#%0d
0C50	d00e		calr    %0c36		; TYWR
0C52	c80a		ldb     RL0,#%0a
0C54	d010		calr    %0c36		; TYWR
0C56	5e080734 	jp      %0734
--------------------------------------------------------------------------------

0C5A	21027898 	ld      R2,#%7898
0C5E	21010080 	ld      R1,#%0080
0C62	4d057b9c0000 	ld      %7b9c,#%0000
0C68	d062		calr    %0ba6
0C6A	5e0602ee 	jp      z,%02ee

0C6E	5f000834 	call    %0834
0C72	6b007b9c 	dec     %7b9c,#1
0C76	0a080d0d 	cpb     RL0,#%0d
0C7A	9e08		ret     
--------------------------------------------------------------------------------

0C7C	a102		ld      R2,R0
0C7E	a900		inc     R0,#1
0C80	0b000100 	cp      R0,#%0100
0C84	9e07		ret     c

0C86	8d08		clr     r0
0C88	9e08		ret     
--------------------------------------------------------------------------------

; *** Vector 10 - SCC ***

0C8A	91f0		pushl   @R15,Rr0
0C8C	93f2		push    @R15,R2

0C8E	4d017c2e1f22 	cp      %7c2e,#%1f22
0C94	ee06		jr      nz,%0ca2
0C96	4d057bfe5b20 	ld      %7bfe,#%5b20	; '[ '
0C9C	4d057c2e1198 	ld      %7c2e,#%1198

0CA2	3a94ff83 	inb	RL1,%ff83	; SIO ch.1 data
0CA6	66007bf0 	bitb    %7bf0,#0
0CAA	ee19		jr      nz,%0cde

0CAC	a297		resb    RL1,#7
0CAE	4a097bf4 	cpb     RL1,%7bf4
0CB2	ee03		jr      nz,%0cba
0CB4	62027bf0 	resb    %7bf0,#2
0CB8	e81b		jr      %0cf0

0CBA	4a097bf5 	cpb     RL1,%7bf5
0CBE	ee03		jr      nz,%0cc6
0CC0	64027bf0 	setb    %7bf0,#2
0CC4	e815		jr      %0cf0

0CC6	0a091b1b 	cpb     RL1,#%1b
0CCA	ee09		jr      nz,%0cde
0CCC	66037bf0 	bitb    %7bf0,#3
0CD0	ee03		jr      nz,%0cd8
0CD2	66047bf0 	bitb    %7bf0,#4
0CD6	e603		jr      z,%0cde

0CD8	64057bf0 	setb    %7bf0,#5
0CDC	e809		jr      %0cf0

0CDE	61007ba2 	ld      R0,%7ba2
0CE2	d034		calr    %0c7c
0CE4	6f007ba2 	ld      %7ba2,R0
0CE8	6e297998 	ldb     %7998(R2),RL1
0CEC	68007ba1 	incb    %7ba1,#1

0CF0	c938		ldb     RL1,#%38
0CF2	3a96ff87 	outb	%ff87,RL1
0CF6	97f2		pop     R2,@R15
0CF8	95f0		popl    RR0,@R15

0CFA	7f01		sc      #%01
0CFC	8d07		nop

0CFE	7b00		iret
--------------------------------------------------------------------------------

0D00	5f00082a 	call    %082a
0D04	5e0602ee 	jp      z,%02ee
0D08	5f0007c4 	call    %07c4
0D0C	a330		res     R3,#0
0D0E	5d027bde 	ldl     %7bde,RR2
0D12	54027bde 	ldl     RR2,%7bde
0D16	50027bac 	cpl     RR2,%7bac
0D1A	e607		jr      z,%0d2a
0D1C	5f001342 	call    %1342
0D20	540e7bda 	ldl     RR14,%7bda
0D24	abf7		dec     R15,#8
0D26	7f01		sc      #%01
0D28	7b00		iret
0D2A	54027bac 	ldl     RR2,%7bac
0D2E	61017baa 	ld      R1,%7baa
0D32	7f01		sc      #%01
0D34	2f21		ld      @R2,R1
0D36	7f02		sc      #%02
0D38	2102116c 	ld      R2,#%116c
0D3C	7c01		di      vi
0D3E	5f001342 	call    %1342
0D42	540e7bda 	ldl     RR14,%7bda
0D46	abf7		dec     R15,#8
0D48	7f01		sc      #%01
0D4A	93e1		push    @R14,R1
0D4C	31e10004 	ld      R1,R14(#%0004)
0D50	7f02		sc      #%02
0D52	6f017bb6 	ld      %7bb6,R1
0D56	05011000 	or      R1,#%1000
0D5A	7f01		sc      #%01
0D5C	33e10004 	ld      R14(#%0004),R1
0D60	7f02		sc      #%02
0D62	61017bfa 	ld      R1,%7bfa
0D66	3a96ffa9 	outb   %ffa9,RL1
0D6A	7d12		ldctl   R1,FCW
0D6C	a51f		set     R1,#15
0D6E	7d1a		ldctl   FCW,R1
0D70	97e1		pop     R1,@R14
0D72	7b00		iret
0D74	64027bf1 	setb    %7bf1,#2
0D78	5f00082a 	call    %082a
0D7C	e604		jr      z,%0d86
0D7E	5f000806 	call    %0806
0D82	8d34		test    R3
0D84	ee01		jr      nz,%0d88
0D86	bd31		ldk     R3,#1
0D88	6f037bfc 	ld      %7bfc,R3
0D8C	54047bac 	ldl     RR4,%7bac
0D90	50047bde 	cpl     RR4,%7bde
0D94	eed3		jr      nz,%0d3c
0D96	61017baa 	ld      R1,%7baa
0D9A	7f01		sc      #%01
0D9C	2f41		ld      @R4,R1
0D9E	7f02		sc      #%02
0DA0	e8cd		jr      %0d3c
0DA2	4d087ba6 	clr     %7ba6
0DA6	4d087ba8 	clr     %7ba8
0DAA	64007bf0 	setb    %7bf0,#0
0DAE	4c047ba1 	testb   %7ba1
0DB2	e60c		jr      z,%0dcc
0DB4	61007ba4 	ld      R0,%7ba4
0DB8	5f000c7c 	call    %0c7c
0DBC	6f007ba4 	ld      %7ba4,R0
0DC0	60287998 	ldb     RL0,%7998(R2)
0DC4	6a007ba1 	decb    %7ba1,#1
0DC8	dfb8		calr    %0e5a
0DCA	eef1		jr      nz,%0dae
0DCC	61007ba8 	ld      R0,%7ba8
0DD0	4b007ba6 	cp      R0,%7ba6
0DD4	e6ec		jr      z,%0dae
0DD6	5f00139a 	call    %139a
0DDA	6f007ba8 	ld      %7ba8,R0
0DDE	60287a98 	ldb     RL0,%7a98(R2)
0DE2	5f000c36 	call    %0c36
0DE6	e8f2		jr      %0dcc
0DE8	54027bac 	ldl     RR2,%7bac
0DEC	61017baa 	ld      R1,%7baa
0DF0	7f01		sc      #%01
0DF2	2f21		ld      @R2,R1
0DF4	7f02		sc      #%02
0DF6	4d087bac 	clr     %7bac
0DFA	4d087bae 	clr     %7bae
0DFE	4d087baa 	clr     %7baa
0E02	4d057bfc0001 	ld      %7bfc,#%0001
0E08	5f00082a 	call    %082a
0E0C	5e0602ee 	jp      z,%02ee
0E10	5f0007c4 	call    %07c4
0E14	9424		ldl     RR4,RR2
0E16	e606		jr      z,%0e24
0E18	5f000806 	call    %0806
0E1C	8d34		test    R3
0E1E	e602		jr      z,%0e24
0E20	6f037bfc 	ld      %7bfc,R3
0E24	9442		ldl     RR2,Rr4
0E26	a330		res     R3,#0
0E28	5d027bac 	ldl     %7bac,RR2
0E2C	61017bf8 	ld      R1,%7bf8
0E30	7f01		sc      #%01
0E32	2d21		ex      R1,@R2
0E34	a114		ld      R4,R1
0E36	2121		ld      R1,@R2
0E38	7f02		sc      #%02
0E3A	6f047baa 	ld      %7baa,R4
0E3E	4b017bf8 	cp      R1,%7bf8
0E42	9e06		ret     z
0E44	4d057bfc0001 	ld      %7bfc,#%0001
0E4A	4d087bac 	clr     %7bac
0E4E	4d087bae 	clr     %7bae
0E52	4d087baa 	clr     %7baa
0E56	5e0802ee 	jp      %02ee
0E5A	3a04ff85 	inb    RH0,%ff85
0E5E	a602		bitb    RH0,#2
0E60	e6fc		jr      z,%0e5a
0E62	3a86ff81 	outb   %ff81,RL0
0E66	0a080d0d 	cpb     RL0,#%0d
0E6A	9e08		ret     
0E6C	4d087ba6 	clr     %7ba6
0E70	4d087ba8 	clr     %7ba8
0E74	5f00082a 	call    %082a
0E78	5e0602ee 	jp      z,%02ee
0E7C	0a084141 	cpb     RL0,#%41
0E80	5e0702ee 	jp      c,%02ee
0E84	0a085a5a 	cpb     RL0,#%5a
0E88	5e0b02ee 	jp      ugt,%02ee
0E8C	9e08		ret     
0E8E	8d28		clr     R2
0E90	c303		ldb     RH3,#%03
0E92	dff7		calr    %0ea6
0E94	9e07		ret     c
0E96	6e0b7ba0 	ldb     %7ba0,RL3
0E9A	8c34		testb   RH3
0E9C	9e06		ret     z
0E9E	93f3		push    @R15,R3
0EA0	dffe		calr    %0ea6
0EA2	97f3		pop     R3,@R15
0EA4	9e08		ret     
0EA6	8cb8		clrb    RL3
0EA8	dff5		calr    %0ec0
0EAA	9e07		ret     c
0EAC	f303		dbjnz   RH3,%0ea8
0EAE	a083		ldb     RH3,RL0
0EB0	93f3		push    @R15,R3
0EB2	dffa		calr    %0ec0
0EB4	97f3		pop     R3,@R15
0EB6	9e07		ret     c
0EB8	8ab8		cpb     RL0,RL3
0EBA	9e06		ret     z
0EBC	8d81		setflg  c
0EBE	9e08		ret     
0EC0	60287898 	ldb     RL0,%7898(R2)
0EC4	a920		inc     R2,#1
0EC6	5f00079c 	call    %079c
0ECA	9e07		ret     c
0ECC	808b		addb    RL3,RL0
0ECE	b309000c 	sla     R0,#12
0ED2	60287898 	ldb     RL0,%7898(R2)
0ED6	a920		inc     R2,#1
0ED8	5f00079c 	call    %079c
0EDC	9e07		ret     c
0EDE	808b		addb    RL3,RL0
0EE0	8408		orb     RL0,Rh0
0EE2	8d83		resflg  c
0EE4	9e08		ret     
0EE6	a039		ldb     RL1,RH3
0EE8	dff9		calr    %0ef8
0EEA	21020008 	ld      R2,#%0008
0EEE	d018		calr    %0ec0
0EF0	2e48		ldb     @R4,RL0
0EF2	a940		inc     R4,#1
0EF4	f904		dbjnz   RL1,%0eee
0EF6	9e08		ret     
0EF8	8d28		clr     R2
0EFA	d01e		calr    %0ec0
0EFC	a084		ldb     RH4,RL0
0EFE	d020		calr    %0ec0
0F00	a08c		ldb     RL4,RL0
0F02	9e08		ret     
--------------------------------------------------------------------------------

0F04	0018		.word	#24
0F06	2f49		.ascii	"/INCORRECT LOAD ADDRESS", 13

0F1E	0010		.word	#16
0F20	2f43		.ascii	"/CHECKSUM ERROR", 13

0F30	0012 		.word	#18
0F32	2f46		.ascii	"/FILE WRITE ERROR", 13

0F44	0011		.word	#17
0F46	2f4f		.ascii	"/OPEN FILE ERROR", 13

0F58	0007 		.word	#7
0F5A	2f41		.ascii	"/ABORT", 13

0F62	454e5452 	.ascii	"ENTRY POINT "

0F6E	0009		.word	#9
0F70	4252 		.ascii	"BREAK AT "

0F7A	0006		.word	#6
0F7C	0507 		.ascii	5, 7, "NMI", 13

0F82	0013		.word	#19
0F84	05072a2a 	.ascii	5, 7, "*** MEMORY ERROR", 13
--------------------------------------------------------------------------------

0F98	53f07bde 	push    @R15,%7bde
0F9C	5f000e6c 	call    %0e6c
0FA0	5f00082a 	call    %082a
0FA4	5f0007ca 	call    %07ca
0FA8	6f027bde 	ld      %7bde,R2
0FAC	64047bf0 	setb    %7bf0,#4
0FB0	5f0014d4 	call    %14d4
0FB4	e64a		jr      z,%104a
0FB6	5f0013fc 	call    %13fc
0FBA	21027898 	ld      R2,#%7898
0FBE	2028		ldb     RL0,@R2
0FC0	0a082f2f 	cpb     RL0,#%2f
0FC4	ee0c		jr      nz,%0fde
0FC6	21047918 	ld      R4,#%7918
0FCA	2101007f 	ld      R1,#%007f
0FCE	bb210140 	ldir   @R4,@R2,R1
0FD2	4d057b9e007f 	ld      %7b9e,#%007f
0FD8	5f000758 	call    %0758
0FDC	e836		jr      %104a
0FDE	66057bf0 	bitb    %7bf0,#5
0FE2	ee2d		jr      nz,%103e
0FE4	5f000e8e 	call    %0e8e
0FE8	ef03		jr      nc,%0ff0
0FEA	5f00148a 	call    %148a
0FEE	e8e3		jr      %0fb6
0FF0	c82e		ldb     RL0,#%2e
0FF2	5f000c36 	call    %0c36
0FF6	8c34		testb   RH3
0FF8	ee15		jr      nz,%1024
0FFA	5f001492 	call    %1492
0FFE	5f000c4e 	call    %0c4e
1002	54007898 	ldl     RR0,%7898
1006	5d007924 	ldl     %7924,Rr0
100A	21040f62 	ld      R4,#%0f62
100E	21027918 	ld      R2,#%7918
1012	bd16		ldk     R1,#6
1014	bb410120 	ldir   @R2,@R4,R1
1018	4d057b9e0010 	ld      %7b9e,#%0010
101E	5f00074a 	call    %074a
1022	e813		jr      %104a
1024	5f000ef8 	call    %0ef8
1028	0b048000 	cp      R4,#%8000
102C	ef03		jr      nc,%1034
102E	21020f04 	ld      R2,#%0f04
1032	e807		jr      %1042
1034	5f001492 	call    %1492
1038	5f000ee6 	call    %0ee6
103C	e8bc		jr      %0fb6
103E	21020f58 	ld      R2,#%0f58
1042	5f000692 	call    %0692
1046	5f00148e 	call    %148e
104A	57f07bde 	pop     %7bde,@R15
104E	9e08		ret     
1050	5f000e6c 	call    %0e6c
1054	5f00082a 	call    %082a
1058	5f000806 	call    %0806
105C	e709		jr      c,%1070
105E	a138		ld      R8,R3
1060	5f000806 	call    %0806
1064	e705		jr      c,%1070
1066	a137		ld      R7,R3
1068	5f000806 	call    %0806
106C	a136		ld      R6,R3
106E	8387		sub     R7,R8
1070	5e0702ee 	jp      c,%02ee
1074	a970		inc     R7,#1
1076	64037bf0 	setb    %7bf0,#3
107A	5f0014d4 	call    %14d4
107E	9e06		ret     z
1080	5f0014a4 	call    %14a4
1084	e603		jr      z,%108c
1086	21020f44 	ld      R2,#%0f44
108A	e83e		jr      %1108
108C	66057bf0 	bitb    %7bf0,#5
1090	e607		jr      z,%10a0
1092	5f0015c2 	call    %15c2
1096	21020f58 	ld      R2,#%0f58
109A	5f000692 	call    %0692
109E	9e08		ret     
10A0	4d057bee000a 	ld      %7bee,#%000a
10A6	0b07001e 	cp      R7,#%001e
10AA	ef03		jr      nc,%10b2
10AC	a17a		ld      R10,R7
10AE	8d78		clr     R7
10B0	e804		jr      %10ba
10B2	210a001e 	ld      R10,#%001e
10B6	0307001e 	sub     R7,#%001e
10BA	a1ab		ld      R11,R10
10BC	66057bf0 	bitb    %7bf0,#5
10C0	eee8		jr      nz,%1092
10C2	21021570 	ld      R2,#%1570
10C6	5f001430 	call    %1430
10CA	e610		jr      z,%10ec
10CC	5f001530 	call    %1530
10D0	5f0014a4 	call    %14a4
10D4	ee04		jr      nz,%10de
10D6	c82e		ldb     RL0,#%2e
10D8	5f000c36 	call    %0c36
10DC	e8e1		jr      %10a0
10DE	e712		jr      c,%1104
10E0	83b8		sub     R8,R11
10E2	a1ba		ld      R10,R11
10E4	6b007bee 	dec     %7bee,#1
10E8	e612		jr      z,%110e
10EA	e8e8		jr      %10bc
10EC	21021570 	ld      R2,#%1570
10F0	5f001474 	call    %1474
10F4	5f000c4e 	call    %0c4e
10F8	5f001530 	call    %1530
10FC	5f0014a4 	call    %14a4
1100	9e06		ret     z
1102	eff0		jr      nc,%10e4
1104	21020f30 	ld      R2,#%0f30
1108	5f000692 	call    %0692
110C	9e08		ret     
110E	5f0015c2 	call    %15c2
1112	21020f1e 	ld      R2,#%0f1e
1116	5f000692 	call    %0692
111A	9e08		ret     
111C	5d0e7bda 	ldl     %7bda,RR14
1120	210f7898 	ld      R15,#%7898
1124	6f007bbe 	ld      %7bbe,R0
1128	df22		calr    %12e6
112A	69077bdc 	inc     %7bdc,#8
112E	df29		calr    %12de
1130	54027bac 	ldl     RR2,%7bac
1134	61017bf8 	ld      R1,%7bf8
1138	7f01		sc      #%01
113A	2f21		ld      @R2,R1
113C	7f02		sc      #%02
113E	670c7bb6 	bit     %7bb6,#12
1142	ee02		jr      nz,%1148
1144	630c7be2 	res     %7be2,#12
1148	5f000ad2 	call    %0ad2
114C	5f000b20 	call    %0b20
1150	5f000b12 	call    %0b12
1154	5f000b52 	call    %0b52
1158	6b007bfc 	dec     %7bfc,#1
115C	5e0e0d8c 	jp      nz,%0d8c
1160	4d057bfc0001 	ld      %7bfc,#%0001
1166	7c05		ei      vi
1168	5e08026e 	jp      %026e
116C	93f2		push    @R15,R2
116E	93f1		push    @R15,R1
1170	df4a		calr    %12de
1172	54027bac 	ldl     RR2,%7bac
1176	61017bf8 	ld      R1,%7bf8
117A	7f01		sc      #%01
117C	2f21		ld      @R2,R1
117E	7f02		sc      #%02
1180	670c7bb6 	bit     %7bb6,#12
1184	ee05		jr      nz,%1190
1186	31f20006 	ld      R2,R15(#%0006)
118A	a32c		res     R2,#12
118C	33f20006 	ld      R15(#%0006),R2
1190	97f1		pop     R1,@R15
1192	97f2		pop     R2,@R15
1194	7f01		sc      #%01
1196	7b00		iret
1198	dfe1		calr    %11d8
119A	66007bf0 	bitb    %7bf0,#0
119E	ee0c		jr      nz,%11b8
11A0	5d0e7bda 	ldl     %7bda,RR14
11A4	210e8000 	ld      R14,#%8000
11A8	210f7898 	ld      R15,#%7898
11AC	6f007bbe 	ld      %7bbe,R0
11B0	df66		calr    %12e6
11B2	69077bdc 	inc     %7bdc,#8
11B6	e806		jr      %11c4
11B8	62007bf0 	resb    %7bf0,#0
11BC	210e8000 	ld      R14,#%8000
11C0	210f7898 	ld      R15,#%7898
11C4	7c05		ei      vi
11C6	5f000c4e 	call    %0c4e
11CA	21020f7a 	ld      R2,#%0f7a
11CE	5f000692 	call    %0692
11D2	7c05		ei      vi
11D4	5e08026e 	jp      %026e
11D8	93f0		push    @R15,R0
11DA	61f00004 	ld      R0,%0004(R15)
11DE	0700000e 	and     R0,#%000e
11E2	97f0		pop     R0,@R15
11E4	9e06		ret     z
11E6	a9f1		inc     R15,#2
11E8	93f0		push    @R15,R0
11EA	61f00002 	ld      R0,%0002(R15)
11EE	0700000f 	and     R0,#%000f
11F2	0b00000f 	cp      R0,#%000f
11F6	97f0		pop     R0,@R15
11F8	5e06111c 	jp      z,%111c
11FC	27f1		bit     @R15,#1
11FE	e603		jr      z,%1206
1200	3b06ffe9 	out    %ffe9,R0
1204	7a00		halt
1206	27f2		bit     @R15,#2
1208	5e06111c 	jp      z,%111c
120C	5d0e7bda 	ldl     %7bda,RR14
1210	210f7898 	ld      R15,#%7898
1214	6f007bbe 	ld      %7bbe,R0
1218	df9a		calr    %12e6
121A	69077bdc 	inc     %7bdc,#8
121E	62027bf0 	resb    %7bf0,#2
1222	7c05		ei      vi
1224	5f000c4e 	call    %0c4e
1228	21020f82 	ld      R2,#%0f82
122C	5f000692 	call    %0692
1230	7c05		ei      vi
1232	5e08026e 	jp      %026e
--------------------------------------------------------------------------------
; *** SYSTEM CALL ***

			; System Call 1: Switch to segmented mode
1236	4cf100010101 	cpb     %0001(R15),#%01	; ID 1?
123C	ee03		jr      nz,%1244
123E	65ff0002 	set     %0002(R15),#15	; yes
1242	7b00		iret

			; System Call 2: Switch to non-segmented mode
1244	4cf100010202 	cpb     %0001(R15),#%02	; ID 2?
124A	ee03		jr      nz,%1252
124C	63ff0002 	res     %0002(R15),#15	; yes
1250	7b00		iret

			; we're in segmented mode here

			; save state
1252	93e0		push    @RR14,R0
1254	7d02		ldctl   R0,FCW
1256	a30f		res     R0,#15
1258	7d0a		ldctl   FCW,R0		; switch to non-segmented mode

			; now we're in nonsegmented mode

125A	97f0		pop     R0,@R15		; restore R0
125C	4cf40001 	testb   %0001(R15)
1260	ee20		jr      nz,%12a2	; non-zero ID

			; ID 0
1262	6f007bbe 	ld      %7bbe,R0
1266	5d0e7bda 	ldl     %7bda,RR14
126A	210f7898 	ld      R15,#%7898
126E	dfc5		calr    %12e6
1270	69077bdc 	inc     %7bdc,#8
1274	6b017be0 	dec     %7be0,#2
1278	6b007bfc 	dec     %7bfc,#1
127C	5e0e0d2a 	jp      nz,%0d2a
1280	4d057bfc0001 	ld      %7bfc,#%0001
1286	dfd5		calr    %12de
1288	7c05		ei      vi
128A	21020f6e 	ld      R2,#%0f6e	; "BREAK AT "
128E	5f000692 	call    %0692
1292	61057be0 	ld      R5,%7be0
1296	5f0006f6 	call    %06f6
129A	5f00074a 	call    %074a
129E	5e08026e 	jp      %026e

			; non-zero ID
12A2	93f0		push    @R15,R0
12A4	60f00003 	ldb     RH0,%0003(R15)	; ID
12A8	a00b		ldb     RL3,RH0
12AA	8c38		clrb    RH3
12AC	03030004 	sub     R3,#%0004
12B0	613312c4 	ld      R3,%12c4(R3)
12B4	7c05		ei      vi
12B6	1f30		call    @R3

			; restore state
12B8	a103		ld      R3,R0
12BA	7d02		ldctl   R0,FCW
12BC	a50f		set     R0,#15		; switch to segmented mode
12BE	7d0a		ldctl   FCW,R0
12C0	97e0		pop     R0,@RR14

12C2	7b00		iret
--------------------------------------------------------------------------------

12C4	0c18		.word	#%0c18		; syscall 4 - TYIN
12C6	0c36		.word	#%0c36		; syscall 6 - TYWR
12C8	0ba6		.word	#%0ba6		; syscall 8 - TTY
12CA	0c4e		.word   #%0c4e		; syscall 10 - CRLF
12CC	0692		.word	#%0692		; syscall 12 - PUTMSG

12CE	06f6		.word	#%06f6		; syscall 14
12D0	074a		.word	#%074a		; syscall 16
12D2	06fa		.word	#%06fa		; syscall 18
12D4	052c		.word	#%052c		; syscall 20
12D6	0538		.word	#%0538		; syscall 22
12D8	1558		.word	#%1558		; syscall 24
12DA	0e5a		.word	#%0e5a		; syscall 26
12DC	026e 		.word	#%026e		; syscall 28
--------------------------------------------------------------------------------

12DE	c980		ldb     RL1,#%80
12E0	3a96ffa9 	outb	%ffa9,RL1
12E4	9e08		ret     
--------------------------------------------------------------------------------

12E6	5d0e7bb0 	ldl     %7bb0,RR14
12EA	540e7bda 	ldl     RR14,%7bda
12EE	31f00000 	ld      R0,R15(#%0000)
12F2	6f007bb4 	ld      %7bb4,R0
12F6	31f00002 	ld      R0,R15(#%0002)
12FA	6f007be2 	ld      %7be2,R0
12FE	31f00004 	ld      R0,R15(#%0004)
1302	6f007bde 	ld      %7bde,R0
1306	31f00006 	ld      R0,R15(#%0006)
130A	6f007be0 	ld      %7be0,R0
130E	7f01		sc      #%01
1310	7d06		.word   #%7d06
1312	7f02		sc      #%02
1314	6f007be6 	ld      %7be6,R0
1318	7d07		ldctl   R0,nsp
131A	6f007be8 	ld      %7be8,R0
131E	7f01		sc      #%01
1320	7d04		.word   #%7d04
1322	7f02		sc      #%02
1324	6f007bea 	ld      %7bea,R0
1328	7df5		ldctl   R15,psap
132A	6f0f7bec 	ld      %7bec,R15
132E	7df3		ldctl   R15,Refresh
1330	6f0f7be4 	ld      %7be4,R15
1334	210f7bc0 	ld      R15,#%7bc0
1338	1cf9010c 	ldm     @R15,R1,#13
133C	540e7bb0 	ldl     RR14,%7bb0
1340	9e08		ret     
1342	5d0e7bb0 	ldl     %7bb0,RR14
1346	540e7bda 	ldl     RR14,%7bda
134A	abf7		dec     R15,#8
134C	61017bb4 	ld      R1,%7bb4
1350	33f10000 	ld      R15(#%0000),R1
1354	61017be2 	ld      R1,%7be2
1358	33f10002 	ld      R15(#%0002),R1
135C	61017bde 	ld      R1,%7bde
1360	33f10004 	ld      R15(#%0004),R1
1364	61017be0 	ld      R1,%7be0
1368	33f10006 	ld      R15(#%0006),R1
136C	61017be6 	ld      R1,%7be6
1370	7f01		sc      #%01
1372	7d1e		.word   #%7d1e
1374	7f02		sc      #%02
1376	61017be8 	ld      R1,%7be8
137A	7d1f		ldctl   nsp,R1
137C	61017bea 	ld      R1,%7bea
1380	7f01		sc      #%01
1382	7d1c		.word   #%7d1c
1384	7f02		sc      #%02
1386	61017bec 	ld      R1,%7bec
138A	7d1d		ldctl   psap,R1
138C	210f7bbe 	ld      R15,#%7bbe
1390	1cf1000d 	ldm     R0,@R15,#14
1394	540e7bb0 	ldl     RR14,%7bb0
1398	9e08		ret     
--------------------------------------------------------------------------------

139A	a102		ld      R2,R0
139C	a900		inc     R0,#1
139E	0b000100 	cp      R0,#%0100
13A2	9e07		ret     c
13A4	8d08		clr     r0
13A6	9e08		ret     
--------------------------------------------------------------------------------

; *** Vector 14 ***

13A8	91f0		pushl   @R15,Rr0
13AA	93f2		push    @R15,R2

13AC	3a94ff81 	inb	RL1,%ff81
13B0	66007bf0 	bitb    %7bf0,#0
13B4	ee01		jr      nz,%13b8
13B6	a297		resb    RL1,#7
13B8	61007ba6 	ld      R0,%7ba6
13BC	d012		calr    %139a
13BE	6f007ba6 	ld      %7ba6,R0
13C2	6e297a98 	ldb     %7a98(R2),RL1
13C6	c938		ldb     RL1,#%38
13C8	3a96ff85 	outb	%ff85,RL1

13CC	97f2		pop     R2,@R15
13CE	95f0		popl    RR0,@R15
13D0	7f01		sc      #%01
13D2	7b00		iret
--------------------------------------------------------------------------------

; *** Vector 11 ***

13D4	93f1		push    @R15,R1

13D6	c930		ldb     RL1,#%30
13D8	3a96ff87 	outb	%ff87,RL1
13DC	c938		ldb     RL1,#%38
13DE	3a96ff87 	outb	%ff87,RL1

13E2	97f1		pop     R1,@R15
13E4	7f01		sc      #%01
13E6	7b00		iret
--------------------------------------------------------------------------------

; *** Vector 15 ***

13E8	93f1		push    @R15,R1

13EA	c930		ldb     RL1,#%30
13EC	3a96ff85 	outb	%ff85,RL1
13F0	c938		ldb     RL1,#%38
13F2	3a96ff85 	outb	%ff85,RL1

13F6	97f1		pop     R1,@R15
13F8	7f01		sc      #%01
13FA	7b00		iret
--------------------------------------------------------------------------------

13FC	df53		calr    %1558
13FE	0a082f2f 	cpb     RL0,#%2f
1402	eefc		jr      nz,%13fc
1404	8d48		clr     R4
1406	cb50		ldb     RL3,#%50
1408	df59		calr    %1558
140A	6e487898 	ldb     %7898(R4),RL0
140E	0a080d0d 	cpb     RL0,#%0d
1412	ee02		jr      nz,%1418
1414	df6f		calr    %1538
1416	9e08		ret     
1418	0a082020 	cpb     RL0,#%20
141C	e7f5		jr      c,%1408
141E	a940		inc     R4,#1
1420	fb0d		dbjnz   RL3,%1408
1422	df66		calr    %1558
1424	0a080d0d 	cpb     RL0,#%0d
1428	eefc		jr      nz,%1422
142A	6e0878e8 	ldb     %78e8,RL0
142E	9e08		ret     
1430	4c087ba0 	clrb    %7ba0
1434	c82f		ldb     RL0,#%2f
1436	6e087918 	ldb     %7918,RL0
143A	69007b9e 	inc     %7b9e,#1
143E	8da4		test    R10
1440	9e06		ret     z
1442	a185		ld      R5,R8
1444	5f0006f6 	call    %06f6
1448	a1a5		ld      R5,R10
144A	5f0006fa 	call    %06fa
144E	600d7ba0 	ldb     RL5,%7ba0
1452	5f0006fa 	call    %06fa
1456	4c087ba0 	clrb    %7ba0
145A	208d		ldb     RL5,@R8
145C	5f0006fa 	call    %06fa
1460	a980		inc     R8,#1
1462	aba0		dec     R10,#1
1464	eefa		jr      nz,%145a
1466	600d7ba0 	ldb     RL5,%7ba0
146A	5f0006fa 	call    %06fa
146E	1f20		call    @R2
1470	8d43		resflg  z
1472	9e08		ret     
1474	a165		ld      R5,R6
1476	5f0006f6 	call    %06f6
147A	cd00		ldb     RL5,#%00
147C	5f0006fa 	call    %06fa
1480	600d7ba0 	ldb     RL5,%7ba0
1484	5f0006fa 	call    %06fa
1488	1e28		jp      @R2
148A	c837		ldb     RL0,#%37
148C	e803		jr      %1494
148E	c839		ldb     RL0,#%39
1490	e801		jr      %1494
1492	c830		ldb     RL0,#%30
1494	6e087918 	ldb     %7918,RL0
1498	4d057b9e0001 	ld      %7b9e,#%0001
149E	df98		calr    %1570
14A0	dfb9		calr    %1530
14A2	9e08		ret     
14A4	df7c		calr    %15ae
14A6	0a093030 	cpb     RL1,#%30
14AA	ee04		jr      nz,%14b4
14AC	dfbf		calr    %1530
14AE	8d41		setflg  z
14B0	8d83		resflg  c
14B2	9e08		ret     
14B4	0a093737 	cpb     RL1,#%37
14B8	ee04		jr      nz,%14c2
14BA	dfc6		calr    %1530
14BC	8d43		resflg  z
14BE	8d83		resflg  c
14C0	9e08		ret     
14C2	0a093939 	cpb     RL1,#%39
14C6	e602		jr      z,%14cc
14C8	dfb9		calr    %1558
14CA	e8ec		jr      %14a4
14CC	dfcf		calr    %1530
14CE	8d43		resflg  z
14D0	8d81		setflg  c
14D2	9e08		ret     
14D4	66057bf0 	bitb    %7bf0,#5
14D8	e602		jr      z,%14de
14DA	8d41		setflg  z
14DC	9e08		ret     
14DE	21047918 	ld      R4,#%7918
14E2	21027898 	ld      R2,#%7898
14E6	21010040 	ld      R1,#%0040
14EA	bb210140 	ldir   @R4,@R2,R1
14EE	4d057b9e0080 	ld      %7b9e,#%0080
14F4	dfbc		calr    %157e
14F6	dfe4		calr    %1530
14F8	dfa6		calr    %15ae
14FA	0a094c4c 	cpb     RL1,#%4c
14FE	e604		jr      z,%1508
1500	0a095353 	cpb     RL1,#%53
1504	e601		jr      z,%1508
1506	e802		jr      %150c
1508	dfed		calr    %1530
150A	dfaf		calr    %15ae
150C	0a093939 	cpb     RL1,#%39
1510	e60d		jr      z,%152c
1512	0a093030 	cpb     RL1,#%30
1516	e60a		jr      z,%152c
1518	0a093737 	cpb     RL1,#%37
151C	e607		jr      z,%152c
151E	dfe4		calr    %1558
1520	5f000c36 	call    %0c36
1524	0a080a0a 	cpb     RL0,#%0a
1528	9e06		ret     z
152A	e8f9		jr      %151e
152C	8d43		resflg  z
152E	9e08		ret     
1530	dfed		calr    %1558
1532	0a080d0d 	cpb     RL0,#%0d
1536	eefc		jr      nz,%1530
1538	21010200 	ld      R1,#%0200
153C	61007ba8 	ld      R0,%7ba8
1540	4b007ba6 	cp      R0,%7ba6
1544	ee03		jr      nz,%154c
1546	ab10		dec     R1,#1
1548	eef9		jr      nz,%153c
154A	9e06		ret     z
154C	dfd0		calr    %15ae
154E	0a092020 	cpb     RL1,#%20
1552	9e0d		ret     pl
1554	dfff		calr    %1558
1556	e8f0		jr      %1538
1558	61007ba8 	ld      R0,%7ba8
155C	4b007ba6 	cp      R0,%7ba6
1560	e6fb		jr      z,%1558
1562	5f00139a 	call    %139a
1566	6f007ba8 	ld      %7ba8,R0
156A	60287a98 	ldb     RL0,%7a98(R2)
156E	9e08		ret     
1570	61027b9e 	ld      R2,%7b9e
1574	4c2579180d0d 	ldb     %7918(R2),#%0d
157A	69007b9e 	inc     %7b9e,#1
157E	8d18		clr     R1
1580	60187918 	ldb     RL0,%7918(R1)
1584	a910		inc     R1,#1
1586	5f000e5a 	call    %0e5a
158A	e603		jr      z,%1592
158C	4b017b9e 	cp      R1,%7b9e
1590	e7f7		jr      c,%1580
1592	4d087b9e 	clr     %7b9e
1596	2101003f 	ld      R1,#%003f
159A	4d0579182020 	ld      %7918,#%2020
15A0	21047918 	ld      R4,#%7918
15A4	2102791a 	ld      R2,#%791a
15A8	bb410120 	ldir   @R2,@R4,R1
15AC	9e08		ret     
15AE	61007ba8 	ld      R0,%7ba8
15B2	4b007ba6 	cp      R0,%7ba6
15B6	e6fb		jr      z,%15ae
15B8	5f00139a 	call    %139a
15BC	60297a98 	ldb     RL1,%7a98(R2)
15C0	9e08		ret     
15C2	21002f2f 	ld      R0,#%2f2f
15C6	6f007918 	ld      %7918,R0
15CA	4d057b9e0002 	ld      %7b9e,#%0002
15D0	d031		calr    %1570
15D2	9e08		ret     
----

15D4	4d087e88 	clr     %7e88
15D8	21021d92 	ld      R2,#%1d92
15DC	5f0016d0 	call    %16d0		; initialize on-board SCC

15E0	2101ff87 	ld      R1,#%ff87	; SIO ch. 1 control
15E4	2103ff83 	ld      R3,#%ff83	; SIO ch. 1 data
15E8	210000ff 	ld      R0,#%00ff
15EC	c204		ldb     RH2,#%04	; Tx buffer empty flag
15EE	5f00168e 	call    %168e		; wait for SCC status
15F2	ee47		jr      nz,%1682

15F4	3e38		outb    @R3,RL0
15F6	c201		ldb     RH2,#%01
15F8	5f00168e 	call    %168e
15FC	ee42		jr      nz,%1682

15FE	3c30		inb     RH0,@R3
1600	8a80		cpb     RH0,RL0
1602	e603		jr      z,%160a

1604	69007e88 	inc     %7e88,#1
1608	e83c		jr      %1682

160A	c00d		ldb     RH0,#%0d
160C	3e30		outb    @R3,Rh0
160E	c201		ldb     RH2,#%01
1610	5f00168e 	call    %168e
1614	ee36		jr      nz,%1682

1616	3c30		inb     RH0,@R3
1618	aa80		decb    RL0,#1
161A	0a08a0a0 	cpb     RL0,#%a0
161E	eee6		jr      nz,%15ec

1620	7d95		ldctl   R9,psap
1622	7c01		di      vi

1624	6191005e 	ld      R1,%005e(R9)
1628	6f017e54 	ld      %7e54,R1	; save old vector
162C	210116b0 	ld      R1,#%16b0
1630	6f91005e 	ld      %005e(R9),R1	; new vector

1634	2104ff87 	ld      R4,#%ff87
1638	6f047e82 	ld      %7e82,R4	; SCC control address
163C	8944		xor     R4,R4
163E	6f047e86 	ld      %7e86,R4	; flag

1642	210203d8 	ld      R2,#%03d8
1646	5f0016d0 	call    %16d0		; setup SCC

			; enable TX interrupts
164A	c001		ldb     RH0,#%01
164C	3a06ff87 	outb   %ff87,Rh0
1650	c002		ldb     RH0,#%02
1652	3a06ff87 	outb   %ff87,Rh0
1656	7c05		ei      vi

1658	2101ff87 	ld      R1,#%ff87
165C	c204		ldb     RH2,#%04
165E	5f00168e 	call    %168e
1662	ee09		jr      nz,%1676

1664	21031770 	ld      R3,#6000
1668	c80d		ldb     RL0,#%0d
166A	3a86ff83 	outb   %ff83,RL0
166E	4d047e86 	test    %7e86
1672	ee03		jr      nz,%167a
1674	f384		djnz    R3,%166e
1676	69007e88 	inc     %7e88,#1

167A	61017e54 	ld      R1,%7e54
167E	6f91005e 	ld      %005e(R9),R1	; restore old vector

1682	a3d2		res     R13,#2
1684	4d047e88 	test    %7e88
1688	9e06		ret     z

168A	a5d2		set     R13,#2
168C	9e08		ret     
----

; SCC
; Wait until status bit (in RH2) is set (with timeout)
; I/O addr in R1

168E	93f3		push    @R15,R3
1690	93f4		push    @R15,R4

1692	21041770 	ld      R4,#6000	; timeout counter

1696	3c1b		inb     RL3,@R1
1698	862b		andb    RL3,Rh2
169A	8a2b		cpb     RL3,Rh2
169C	e606		jr      z,%16aa

169E	ab40		dec     R4,#1		; decrement counter
16A0	eefa		jr      nz,%1696	; loop if not zero

16A2	0503ffff 	or      R3,#%ffff
16A6	6f037e88 	ld      %7e88,R3	; set error

16AA	97f4		pop     R4,@R15
16AC	97f3		pop     R3,@R15
16AE	9e08		ret     
----

; SCC tx interrupt routine

			; save regs
16B0	abff		dec     R15,#16
16B2	1cf90007 	ldm     @R15,R0,#8

16B6	69007e86 	inc     %7e86,#1	; increment flag

16BA	61027e82 	ld      R2,%7e82
16BE	c828		ldb     RL0,#%28	; reset tx int pending
16C0	3e28		outb    @R2,RL0
16C2	c838		ldb     RL0,#%38	; reset highest IUS
16C4	3e28		outb    @R2,RL0

			; restore regs
16C6	1cf10007 	ldm     R0,@R15,#8
16CA	a9ff		inc     R15,#16

16CC	7f01		sc      #%01

16CE	7b00		iret
----

			; Initialize on-board SCC
16D0	3b84ffc1 	in	r8,%ffc1	; read SCR
16D4	a189		ld      R9,R8
16D6	07080030 	and     R8,#%0030	; baud rate switch settings
16DA	b381fffd 	srl     R8,#3
16DE	210aff87 	ld      R10,#%ff87	; SIO ch. 1 control
16E2	8db8		clr     R11

16E4	9723		pop     R3,@R2		; address of init array
16E6	9724		pop     R4,@R2		; word counts

16E8	2135		ld      R5,@R3		; get word
16EA	3ea5		outb    @R10,RH5	; write register number
16EC	8d07		nop
16EE	3ead		outb    @R10,RL5	; register data
16F0	a931		inc     R3,#2
16F2	f406		dbjnz   RH4,%16e8

16F4	8cc4		testb   RL4		; second word count available?
16F6	e60f		jr      z,%1716		; no, done

16F8	61860434 	ld      R6,%0434(R8)	; yes, get baud rate constant
16FC	2135		ld      R5,@R3		; get register numbers
16FE	3ea5		outb    @R10,RH5
1700	8d07		nop
1702	3eae		outb    @R10,RL6	; lower byte
1704	8d07		nop
1706	3ead		outb    @R10,RL5
1708	8d07		nop
170A	3ea6		outb    @R10,RH6	; higher byte
170C	a931		inc     R3,#2
170E	a198		ld      R8,R9
1710	acc4		exb     RH4,RL4		; use second word count
1712	8cc8		clrb    RL4
1714	e8e9		jr      %16e8

1716	a9b0		inc     R11,#1
1718	0b0b0002 	cp      R11,#%0002
171C	ef03		jr      nc,%1724
171E	210aff85 	ld      R10,#%ff85
1722	e8e0		jr      %16e4

1724	9e08		ret     
--------------------------------------------------------------------------------

1726	7c01		di      vi
1728	8c18		clrb    RH1
172A	21080040 	ld      R8,#%0040	; Test #0040

172E	4d057e460015 	ld      %7e46,#%0015
1734	c5ff		ldb     RH5,#%ff
1736	2103000f 	ld      R3,#%000f
173A	21061dc4 	ld      R6,#%1dc4

173E	2167		ld      R7,@R6
1740	acf7		exb     RH7,RL7
1742	a961		inc     R6,#2
1744	a05d		ldb     RL5,RH5
1746	867d		andb    RL5,RH7

1748	5f002474 	call    %2474
174C	5f001822 	call    %1822		; reset CIO
1750	3af6ffa1 	outb	%ffa1,RL7
1754	3ad6ffa1 	outb	%ffa1,RL5
1758	3af6ffa1 	outb	%ffa1,RL7
175C	3ac4ffa1 	inb	RL4,%ffa1
1760	867c		andb    RL4,RH7
1762	8acd		cpb     RL5,RL4
1764	e602		jr      z,%176a
1766	5f0023e8 	call    %23e8		; error

176A	a615		bitb    RH1,#5
176C	eeed		jr      nz,%1748
176E	f399		djnz    R3,%173e
1770	8c54		testb   RH5
1772	e602		jr      z,%1778
1774	c500		ldb     RH5,#%00
1776	e8df		jr      %1736

1778	a614		bitb    RH1,#4
177A	eed5		jr      nz,%1726

			; setup interrupt vector for CIO
177C	7c01		di      vi
177E	7d95		ldctl   R9,psap
1780	6191004e 	ld      R1,%004e(R9)
1784	6f017e54 	ld      %7e54,R1
1788	2101184a 	ld      R1,#%184a
178C	6f91004e 	ld      %004e(R9),R1

1790	4d057e460000 	ld      %7e46,#%0000
1796	8c18		clrb    RH1
1798	21080041 	ld      R8,#%0041	; Test #0041

179C	5f002474 	call    %2474
17A0	5f001822 	call    %1822		; reset CIO

17A4	21031de2 	ld      R3,#%1de2
17A8	2102000f 	ld      R2,#%000f
17AC	2130		ld      R0,@R3
17AE	3a06ffa1 	outb   %ffa1,Rh0
17B2	3a86ffa1 	outb   %ffa1,RL0
17B6	a931		inc     R3,#2
17B8	f287		djnz    R2,%17ac

17BA	8900		xor     R0,R0
17BC	6f007e84 	ld      %7e84,R0

17C0	7c05		ei      vi
17C2	c80b		ldb     RL0,#%0b
17C4	3a86ffa1 	outb   %ffa1,RL0
17C8	c006		ldb     RH0,#%06
17CA	3a06ffa1 	outb   %ffa1,Rh0
17CE	c80a		ldb     RL0,#%0a
17D0	3a86ffa1 	outb   %ffa1,RL0
17D4	3a06ffa1 	outb   %ffa1,Rh0
17D8	c800		ldb     RL0,#%00
17DA	3a86ffa1 	outb   %ffa1,RL0
17DE	c080		ldb     RH0,#%80
17E0	3a06ffa1 	outb   %ffa1,Rh0

			; wait for interrupt
17E4	21032ee0 	ld      R3,#12000
17E8	4d047e84 	test    %7e84
17EC	ee05		jr      nz,%17f8
17EE	f384		djnz    R3,%17e8		; patched to "jr %17e8" (cc)

			; error, no interrupt
17F0	5f0023e8 	call    %23e8
17F4	a615		bitb    RH1,#5
17F6	eecc		jr      nz,%1790

			; CIO did interrupt
17F8	a614		bitb    RH1,#4
17FA	eeca		jr      nz,%1790

17FC	7c01		di      vi
17FE	c801		ldb     RL0,#%01
1800	3a86ffa1 	outb   %ffa1,RL0
1804	3a04ffa1 	inb    RH0,%ffa1
1808	06009f9f 	andb    RH0,#%9f
180C	3a86ffa1 	outb   %ffa1,RL0
1810	3a06ffa1 	outb   %ffa1,Rh0

			; restore interrupt vector
1814	61017e54 	ld      R1,%7e54
1818	7d95		ldctl   R9,psap
181A	6f91004e 	ld      %004e(R9),R1

181E	7c05		ei      vi
1820	9e08		ret     
--------------------------------------------------------------------------------

; Reset 8536 CIO

1822	3a84ffa1 	inb	RL0,%ffa1
1826	c800		ldb     RL0,#%00
1828	3a86ffa1 	outb	%ffa1,RL0

182C	3a84ffa1 	inb	RL0,%ffa1
1830	c800		ldb     RL0,#%00
1832	3a86ffa1 	outb	%ffa1,RL0

1836	c801		ldb     RL0,#%01
1838	3a86ffa1 	outb	%ffa1,RL0

183C	210003e8 	ld      R0,#1000
1840	f081		djnz    R0,%1840

1842	c800		ldb     RL0,#%00
1844	3a86ffa1 	outb	%ffa1,RL0

1848	9e08		ret     
--------------------------------------------------------------------------------

; 8536 CIO interrupt routine

184A	abff		dec     R15,#16
184C	1cf90007 	ldm     @R15,R0,#8

1850	69007e84 	inc     %7e84,#1

			; register 10 <- %20 (clear IP & IUS)
1854	c00a		ldb     RH0,#%0a
1856	3a06ffa1 	outb   %ffa1,RH0
185A	c820		ldb     RL0,#%20
185C	3a86ffa1 	outb   %ffa1,RL0
			; register 11 <- %20 (clear IP & IUS)
1860	c00b		ldb     RH0,#%0b
1862	3a06ffa1 	outb   %ffa1,RH0
1866	3a86ffa1 	outb   %ffa1,RL0

186A	1cf10007 	ldm     R0,@R15,#8
186E	a9ff		inc     R15,#16

1870	7f01		sc      #%01
1872	7b00		iret
--------------------------------------------------------------------------------

1874	8c18		clrb    RH1
1876	5f002474 	call    %2474
187A	a1c6		ld      R6,R12
187C	210b1000 	ld      R11,#%1000

1880	2104000c 	ld      R4,#%000c
1884	210920ae 	ld      R9,#%20ae

1888	2197		ld      R7,@R9
188A	3a930468 	soutib @R6,@R9,R4
188E	ab90		dec     R9,#1
1890	210a7e54 	ld      R10,#%7e54
1894	0da56db6 	ld      @R10,#%6db6
1898	3a6104a8 	sinib  @R10,@R6,R4
189C	600d7e54 	ldb     RL5,%7e54
18A0	8adf		cpb     RL7,RL5
18A2	e60b		jr      z,%18ba
18A4	4d057e80ffff 	ld      %7e80,#%ffff
18AA	a412		setb    RH1,#2
18AC	5f0023e8 	call    %23e8
18B0	a615		bitb    RH1,#5
18B2	eeea		jr      nz,%1888
18B4	a617		bitb    RH1,#7
18B6	ee05		jr      nz,%18c2
18B8	e802		jr      %18be

18BA	a991		inc     R9,#2
18BC	f49b		djnz    R4,%1888
18BE	a963		inc     R6,#4
18C0	fba1		djnz    R11,%1880

18C2	a614		bitb    RH1,#4
18C4	eed7		jr      nz,%1874
18C6	9e08		ret     
--------------------------------------------------------------------------------

18C8	8d28		clr     R2
18CA	8d58		clr     R5
18CC	a17a		ld      R10,R7
18CE	070a0001 	and     R10,#%0001
18D2	e602		jr      z,%18d8
18D4	485a208e 	xorb    RL2,%208e(R5)
18D8	a950		inc     R5,#1
18DA	0b050020 	cp      R5,#%0020
18DE	e603		jr      z,%18e6
18E0	b365ffff 	srll    RR6,#1
18E4	e8f3		jr      %18cc
18E6	0702007f 	and     R2,#%007f
18EA	9e08		ret     
--------------------------------------------------------------------------------

18EC	4d057e500000 	ld      %7e50,#%0000
18F2	7d75		ldctl   R7,psap
18F4	0107002e 	add     R7,#%002e
18F8	2176		ld      R6,@R7
18FA	6f067e54 	ld      %7e54,R6
18FE	0d751994 	ld      @R7,#%1994
1902	9e08		ret     
--------------------------------------------------------------------------------

1904	7d75		ldctl   R7,psap
1906	0107002e 	add     R7,#%002e
190A	61067e54 	ld      R6,%7e54
190E	2f76		ld      @R7,R6
1910	9e08		ret     
--------------------------------------------------------------------------------

1912	ace6		exb     RH6,RL6
1914	3b360002 	out    %0002,R3
1918	7f01		sc      #%01
191A	2f64		ld      @R6,R4
191C	01070002 	add     R7,#%0002
1920	3b340000 	in     R3,%0000
1924	05030080 	or      R3,#%0080
1928	3b360000 	out    %0000,R3
192C	2f65		ld      @R6,R5
192E	3b340000 	in     R3,%0000
1932	0703ff7f 	and     R3,#%ff7f
1936	3b360000 	out    %0000,R3
193A	7f02		sc      #%02
193C	9e08		ret     
--------------------------------------------------------------------------------

193E	ace6		exb     RH6,RL6
1940	7f01		sc      #%01
1942	3b240000 	in     R2,%0000
1946	05020040 	or      R2,#%0040
194A	3b260000 	out    %0000,R2
194E	1462		ldl     RR2,@R6
1950	3b740000 	in     R7,%0000
1954	0707ffbf 	and     R7,#%ffbf
1958	3b760000 	out    %0000,R7
195C	7f02		sc      #%02
195E	9e08		ret     
--------------------------------------------------------------------------------

1960	3b24ffc1 	in     R2,%ffc1
1964	05020008 	or      R2,#%0008
1968	3b26ffc1 	out    %ffc1,R2
196C	3b240000 	in     R2,%0000
1970	05020020 	or      R2,#%0020
1974	3b260000 	out    %0000,R2
1978	9e08		ret     
--------------------------------------------------------------------------------

197A	3b24ffc1 	in     R2,%ffc1
197E	0702fff7 	and     R2,#%fff7
1982	3b26ffc1 	out    %ffc1,R2
1986	3b240000 	in     R2,%0000
198A	0702ffdf 	and     R2,#%ffdf
198E	3b260000 	out    %0000,R2
1992	9e08		ret     
--------------------------------------------------------------------------------

1994	21f2		ld      R2,@R15
1996	07020007 	and     R2,#%0007
199A	0b020004 	cp      R2,#%0004
199E	ee02		jr      nz,%19a4
19A0	6f027e50 	ld      %7e50,R2
19A4	7f01		sc      #%01
19A6	7b00		iret
--------------------------------------------------------------------------------

19A8	2102002e 	ld      R2,#%002e
19AC	61037e54 	ld      R3,%7e54
19B0	2f23		ld      @R2,R3
19B2	1e38		jp      @R3
--------------------------------------------------------------------------------

19B4	ad76		ex      R6 ,R7
19B6	ace6		exb     RH6, RL6
19B8	9462		ldl     RR2, RR6
19BA	a931		inc     R3, #2
19BC	ab50		dec     R5, #1

			; segmented mode

19BE	7d92		ldctl   R9, FCW
19C0	a59f		set     R9, #15
19C2	7d9a		ldctl   FCW, R9

19C4	2f64		ld      @@R6, R4
19C6	bb610520 	ldir	@@R2, @@R6, R5

			; non-segmented mode

19CA	a39f		res     R9, #15
19CC	7d9a		ldctl   FCW, R9

19CE	9e08		ret     
--------------------------------------------------------------------------------

; Privileged Instruction Trap Vector
; ----------------------------------

19D0	65fe0002 	set     %0002(R15),#14	; enable system mode on return
19D4	7f01		sc      #%01		; enable segmented mode now
19D6	7b00		iret

--------------------------------------------------------------------------------

; MMU Segmentation Trap Vector
; ----------------------------

19D8	91f2		pushl   @R15, RR2

19DA	61f20004 	ld      R2, %0004(R15)
19DE	ac2a		exb     RL2, RH2
19E0	07020007 	and     R2, #%0007

19E4	0a0a0101 	cpb     RL2, #%01	; MMU 1 ?
19E8	e609		jr      z,%19fc

19EA	0a0a0202 	cpb     RL2, #%02	; MMU 2 ?
19EE	e60b		jr      z, %1a06

19F0	0a0a0404 	cpb     RL2, #%04	; MMU 3 ?
19F4	e60d		jr      z, %1a10

19F6	c2ff		ldb     RH2, #%ff
19F8	8d38		clr     R3
19FA	e80e		jr      %1a18

19FC	3ab502fc 	sinb	RL3, %02fc	; read VTR MMU 1
1A00	3a3505fc 	sinb	RH3, %05fc	; read BSR MMU 1
1A04	e809		jr      %1a18

1A06	3ab502fa 	sinb	RL3, %02fa	; read VTR MMU 2
1A0A	3a3505fa 	sinb	RH3, %05fa	; read BSR MMU 2
1A0E	e804		jr      %1a18

1A10	3ab502f6 	sinb	RL3, %02f6	; read VTR MMU 3
1A14	3a3505f6 	sinb	RH3, %05f6	; read BSR MMU 3

1A18	6f027e4c 	ld      %7e4c, R2
1A1C	6f037e52 	ld      %7e52, R3

1A20	3aa711f0 	soutb	%11f0, RL2	; reset VTR of all MMUs

1A24	95f2		popl    RR2, @R15
1A26	7d92		ldctl   R9, FCW
1A28	a59f		set     R9, #15
1A2A	7d9a		ldctl   FCW, R9

1A2C	7b00		iret
--------------------------------------------------------------------------------

1A2E	3a0700fc 	soutb  %00fc,Rh0
1A32	010f0009 	add     R15,#%0009
1A36	93f0		push    @R15,R0
1A38	8c88		clrb    RL0
1A3A	3b06ffc1 	out    %ffc1,R0
1A3E	97f0		pop     R0,@R15
1A40	93f2		push    @R15,R2
1A42	3aa502fc 	sinb   RL2,%02fc
1A46	3a2505fc 	sinb   RH2,%05fc
1A4A	6f027e52 	ld      %7e52,R2
1A4E	4d057e4cffff 	ld      %7e4c,#%ffff
1A54	3aa711fc 	soutb  %11fc,RL2
1A58	21025000 	ld      R2,#%5000
1A5C	7d2a		ldctl   FCW,R2
1A5E	97f2		pop     R2,@R15
1A60	1eb8		jp      @R11
--------------------------------------------------------------------------------

; Load Segment Address and Descriptor Selector Counter in all MMUs

1A62	3af701f0 	soutb	%01f0,RL7
1A66	3a7720f0 	soutb	%20f0,RH7
1A6A	9e08		ret     
--------------------------------------------------------------------------------

; Copy all Segment Descriptors from memory to a MMU
; RL6: MMU address
; R11: memory address

			; save registers
1A6C	030f001e 	sub     R15, #30
1A70	1cf9000e 	ldm     @R15, R0, #15

1A74	bd70		ldk     R7,#0		; select first segment descriptor
1A76	5f001a62 	call    %1a62

1A7A	01060f00 	add     R6, #%0f00
1A7E	21000100 	ld      R0, #%0100
1A82	3ab30060 	sotirb	@R6, @R11, R0

1A86	bd70		ldk     R7, #0		; select first segment descriptor
1A88	5f001a62 	call    %1a62

			; restore registers
1A8C	1cf1000e 	ldm     R0, @R15, #15
1A90	010f001e 	add     R15, #30
1A94	9e08		ret     
--------------------------------------------------------------------------------

1A96	91f2		pushl   @R15,RR2
1A98	93fb		push    @R15,R11

1A9A	4d057e460095 	ld      %7e46,#%0095
1AA0	8c18		clrb    RH1
1AA2	5f002474 	call    %2474

1AA6	01060f00 	add     R6,#%0f00
1AAA	210aa400 	ld      R10,#%a400
1AAE	21000100 	ld      R0,#%0100
1AB2	3a6100a0 	sinirb @R10,@R6,R0

1AB6	210aa400 	ld      R10,#%a400
1ABA	21000100 	ld      R0,#%0100
1ABE	baa600be 	cpsirb  @R11,@R10,R0,nz

1AC2	aba0		dec     R10,#1
1AC4	abb0		dec     R11,#1
1AC6	20ac		ldb     RL4,@R10
1AC8	20bd		ldb     RL5,@R11
1ACA	030aa400 	sub     R10,#%a400
1ACE	a1a7		ld      R7,R10
1AD0	03060f00 	sub     R6,#%0f00
1AD4	5f002374 	call    %2374

1AD8	97fb		pop     R11,@R15
1ADA	95f2		popl    RR2,@R15
1ADC	9e08		ret     
--------------------------------------------------------------------------------

; Preset segment descriptors with same values, individually for each MMU
; R3: ptr to SDR for MMU 1
; R4: ptr to SDR for MMU 2
; R5: ptr to SDR for MMU 3

1ADE	030f001e 	sub     R15,#%001e
1AE2	1cf9000e 	ldm     @R15,R0,#15

1AE6	bd70		ldk     R7,#0
1AE8	5f001a62 	call    %1a62		; reset SA and DSC

1AEC	c840		ldb     RL0,#64		; 64 segment descriptor registers
1AEE	21090ffc 	ld      R9, #%0ffc	; R/W descr. MMU 1
1AF2	210a0ffa 	ld      R10, #%0ffa	; R/W descr. MMU 2
1AF6	210b0ff6 	ld      R11, #%0ff6	; R/W descr. MMU 3

1AFA	bd24		ldk     R2,#4
1AFC	3a330290 	sotirb @R9,@R3,R2	; load 4 bytes into MMU 1
1B00	ab33		dec     R3,#4

1B02	bd24		ldk     R2,#4
1B04	3a4302a0 	sotirb @R10,@R4,R2	; load 4 bytes into MMU 2
1B08	ab43		dec     R4,#4

1B0A	bd24		ldk     R2,#4
1B0C	3a5302b0 	sotirb @R11,@R5,R2	; load 4 bytes info MMU 3
1B10	ab53		dec     R5,#4

1B12	f80d		dbjnz   RL0,%1afa	; next SDR

1B14	5f001a62 	call    %1a62		; reset SA and DSC

1B18	1cf1000e 	ldm     R0,@R15,#15
1B1C	010f001e 	add     R15,#%001e
1B20	9e08		ret     
--------------------------------------------------------------------------------

; Test MMU limit traps
;
; RL4: MMU mode byte

1B22	91f2		pushl   @R15, RR2
1B24	93f9		push    @R15, R9

1B26	8c18		clrb    RH1
1B28	5f002474 	call    %2474

1B2C	21020200 	ld      R2, #%0200	; segment 02 if not stack MMU
1B30	a6c1		bitb    RL4, #1
1B32	e601		jr      z, %1b36
1B34	c242		ldb     RH2, #%42	; segment 66 if stack MMU

1B36	4d057e460050 	ld      %7e46, #%0050
1B3C	4d087e4c 	clr     %7e4c

1B40	c806		ldb     RL0, #%06	; set MMUON + SEGUSR
1B42	93f0		push    @R15, R0
1B44	8c08		clrb    RH0
1B46	3b06ffc1 	out	%ffc1, R0	; set SCR
1B4A	97f0		pop     R0, @R15

1B4C	8c48		clrb    RH4
1B4E	a6c1		bitb    RL4, #1		; MMU ID = 2?
1B50	e609		jr      z, %1b64	; no, jump

			; MMU ID = 2
1B52	3ac700f6 	soutb	%00f6, RL4	; stack MMU
1B56	c480		ldb     RH4, #%80	; set MSEN, ID=0
1B58	3a4700fc 	soutb	%00fc,RH4	; ..for code MMU
1B5C	c481		ldb     RH4, #%81	; set MSEN, ID=1
1B5E	3a4700fa 	soutb	%00fa, RH4	; ..for data MMU
1B62	e813		jr      %1b8a

1B64	a6c0		bitb    RL4, #0		; MMU ID = 1?
1B66	e609		jr      z, %1b7a	; no, jump

			; MMU ID = 1
1B68	3ac700fa 	soutb	%00fa, RL4
1B6C	c480		ldb     RH4, #%80	; set MSEN, ID=0
1B6E	3a4700fc 	soutb	%00fc, RH4	; ..for code MMU
1B72	c482		ldb     RH4, #%82	; set MSEN, ID=2
1B74	3a4700f6 	soutb	%00f6, RH4	; ..for stack MMU
1B78	e808		jr      %1b8a

			; MMU ID = 0
1B7A	3ac700fc 	soutb	%00fc, RL4
1B7E	c481		ldb     RH4, #%81	; set MSEN, ID=1
1B80	3a4700fa 	soutb	%00fa,RH4	; ..for data MMU
1B84	c482		ldb     RH4, #%82	; set MSEN, ID=2
1B86	3a4700f6 	soutb	%00f6, RH4	; ..for stack MMU

1B8A	7d92		ldctl   R9, FCW
1B8C	a59f		set     R9, #15		; set segmented mode
1B8E	4d047e4e 	test    %7e4e
1B92	e601		jr      z, %1b96
1B94	a39e		res     R9, #14		; reset system mode
1B96	7d9a		ldctl   FCW, R9

			; here we are in segmented user mode!

1B98	2f25		ld      @RR2, R5	; will trap because of limit
1B9A	7b0a		mbit			; will also trap because of user mode
1B9C	8d07		nop			; ..the last trap returned in
1B9E	8d07		nop			; ..segmented system mode
1BA0	7f02		sc      #%02		; switch to non-segmented mode

			; and back to non-segmented system mode

1BA2	8c88		clrb    RL0
1BA4	93f0		push    @R15, R0
1BA6	8c08		clrb    RH0
1BA8	3a8700f0 	soutb	%00f0, RL0	; disable all MMUs
1BAC	3b06ffc1 	out	%ffc1, R0	; reset SCR
1BB0	97f0		pop     R0, @R15

1BB2	61067e4c 	ld      R6,%7e4c	; get ID of trapping MMU
1BB6	8c64		testb   RH6
1BB8	ee12		jr      nz,%1bde	; jump if unknown trap
1BBA	8ae0		cpb     RH0,RL6		; compare ID
1BBC	ee0b		jr      nz,%1bd4	; jump if mismatch

1BBE	a820		incb    RH2,#1		; next logical segment
1BC0	a6c1		bitb    RL4,#1		; stack MMU?
1BC2	e604		jr      z,%1bcc		; no

1BC4	0a028080 	cpb     RH2,#%80	; all stack segments done?
1BC8	eeb6		jr      nz,%1b36	; no, test next segment
1BCA	e810		jr      %1bec		; done

1BCC	0a024040 	cpb     RH2,#%40	; all data segments done?
1BD0	eeb2		jr      nz,%1b36	; no, test next segment
1BD2	e80c		jr      %1bec		; done

			; error
1BD4	4d057e460058 	ld      %7e46,#%0058
1BDA	61057e52 	ld      R5,%7e52
1BDE	a02f		ldb     RL7,Rh2
1BE0	5f0023e8 	call    %23e8
1BE4	a615		bitb    RH1,#5
1BE6	ee9f		jr      nz,%1b26
1BE8	a617		bitb    RH1,#7
1BEA	e6e9		jr      z,%1bbe

1BEC	97f9		pop     R9,@R15
1BEE	95f2		popl    RR2,@R15
1BF0	9e08		ret     
--------------------------------------------------------------------------------

1BF2	7f01		sc      #%01

1BF4	2f45		ld      @R4,R5
1BF6	a951		inc     R5,#2
1BF8	8b65		cp      R5,R6
1BFA	e7fc		jr      c,%1bf4

1BFC	7f02		sc      #%02
1BFE	9e08		ret     
--------------------------------------------------------------------------------

1C00	b3310001 	sll     R3,#1

1C04	6e0a7e54 	ldb     %7e54, RL2
1C08	21057e54 	ld      R5, #%7e54
1C0C	3a5b0348 	soutdb	@R4, @R5, R3
1C10	a943		inc     R4, #4
1C12	f388		djnz    R3, %1c04

1C14	9e08		ret     
--------------------------------------------------------------------------------

; R3=1000
; R6=0001
; RL7=81

1C16	8c18		clrb    RH1
1C18	4d057e460094 	ld      %7e46, #%0094

1C1E	b3310001 	sll     R3, #1		; R3=2000

1C22	21047e54 	ld      R4, #%7e54
1C26	3a690348 	sindb	@R4, @R6, R3
1C2A	a940		inc     R4, #1

1C2C	0a4f		cpb     RL7, @R4
1C2E	e608		jr      z, %1c40

			; error
1C30	4d057e80ffff 	ld      %7e80, #%ffff
1C36	a412		setb    RH1, #2
1C38	5f0023e8 	call    %23e8
1C3C	a617		bitb    RH1, #7
1C3E	9e0e		ret     nz

			; next port
1C40	a963		inc     R6, #4
1C42	f391		djnz    R3, %1c22
1C44	9e08		ret     
--------------------------------------------------------------------------------

1C46	4d057e4600ea 	ld      %7e46, #%00ea
1C4C	8c18		clrb    RH1
1C4E	7f01		sc      #%01
1C50	2164		ld      R4, @R6
1C52	7f02		sc      #%02
1C54	a173		ld      R3, R7
1C56	8743		and     R3, R4
1C58	e60a		jr      z, %1c6e
1C5A	4d057e80ffff 	ld      %7e80, #%ffff
1C60	a175		ld      R5, R7
1C62	8d50		com     R5
1C64	a412		setb    RH1, #2
1C66	5f0023e8 	call    %23e8
1C6A	a617		bitb    RH1, #7
1C6C	9e0e		ret     nz
1C6E	a971		inc     R7, #2
1C70	8b27		cp      R7, R2
1C72	e7ed		jr      c, %1c4e
1C74	9e08		ret     
--------------------------------------------------------------------------------

1C76	bd70		ldk     R7, #0

1C78	a174		ld      R4, R7		; code segment
1C7A	21051c9a 	ld      R5, #%1c9a	; code offset
1C7E	21030010 	ld      R3, #%0010	; no. of words
1C82	a17c		ld      R12, R7		; return segment
1C84	210d1c94 	ld      R13, #%1c94	; return offset

			; copy code from 1C9A-1CB9 to destination offset (R6)
			; and jump there

1C88	7c01		di      vi
1C8A	7f01		sc      #%01
1C8C	bb410360 	ldir	@@R6, @@R4, R3
1C90	a1c7		ld      R7, R12
1C92	1e68		jp      @@R6

			; came back from relocated code
			
1C94	7f02		sc      #%02
1C96	7c05		ei      vi

1C98	9e08		ret     
----

1C9A	21048007 	ld      R4, #%8007
1C9E	3b46ffc1 	out	%ffc1, R4

1CA2	2165		ld      R5, @@R6
1CA4	a973		inc     R7, #4
1CA6	8b27		cp      R7, R2
1CA8	e7fc		jr      c, %1ca2

1CAA	8d07		nop
1CAC	8d07		nop
1CAE	8d07		nop
1CB0	8d07		nop
1CB2	8d07		nop

1CB4	3b36ffc1 	out	%ffc1, R3
1CB8	1ec8		jp      @@R12
--------------------------------------------------------------------------------

1CBA	bd70		ldk     R7,#0
1CBC	a174		ld      R4,R7
1CBE	21051cde 	ld      R5,#%1cde
1CC2	21030010 	ld      R3,#%0010
1CC6	a17c		ld      R12,R7
1CC8	210d1cd8 	ld      R13,#%1cd8
1CCC	7c01		di      vi
1CCE	7f01		sc      #%01
1CD0	bb410360 	ldir	@R6,@R4,R3
1CD4	a1c7		ld      R7,R12
1CD6	1e68		jp      @R6
1CD8	7f02		sc      #%02
1CDA	7c05		ei      vi
1CDC	9e08		ret     
----

1CDE	21048007 	ld      R4,#%8007
1CE2	3b46ffc1 	out	%ffc1,R4
1CE6	34060014 	ldar    R6,%1cfe
1CEA	a175		ld      R5,R7
1CEC	8d50		com     R5
1CEE	2f65		ld      @R6,R5
1CF0	a971		inc     R7,#2
1CF2	8ba7		cp      R7,R10
1CF4	e7fa		jr      c,%1cea
1CF6	8d07		nop
1CF8	3b36ffc1 	out	%ffc1,R3
1CFC	1ec8		jp      @R12
--------------------------------------------------------------------------------

1CFE	21070020 	ld      R7, #%0020
1D02	a16a		ld      R10, R6
1D04	bdb0		ldk     R11, #0
1D06	a1b4		ld      R4, R11
1D08	21051d28 	ld      R5, #%1d28	; code to be relocated
1D0C	21030010 	ld      R3, #%0010	; code size
1D10	a1bc		ld      R12, R11
1D12	210d1d22 	ld      R13, #%1d22	; RR12=<0>1D22 return address

1D16	7c01		di      vi
1D18	7f01		sc      #SEG
1D1A	bb4103a0 	ldir	@@RR10, @@RR4, R3
1D1E	a1cb		ld      R11, R12
1D20	1ea8		jp      @@RR10

1D22	7f02		sc      #NSEG
1D24	7c05		ei      vi

1D26	9e08		ret     
----

1D28	21058007 	ld      R5, #%8007
1D2C	3b56ffc1 	out	%ffc1, R5

1D30	2164		ld      R4, @@RR6
1D32	8b74		cp      R4, R7
1D34	ee03		jr      nz, %1d3c
1D36	a971		inc     R7, #2
1D38	8b97		cp      R7, R9
1D3A	e7fa		jr      c, %1d30

1D3C	8d07		nop
1D3E	8d07		nop
1D40	8d07		nop

1D42	3b36ffc1 	out	%ffc1, R3
1D46	1ec8		jp      @@RR12
--------------------------------------------------------------------------------

1D48	21070020 	ld      R7,#%0020
1D4C	a16a		ld      R10,R6
1D4E	bdb0		ldk     R11,#0
1D50	a1b4		ld      R4,R11
1D52	21051d72 	ld      R5,#%1d72
1D56	21030010 	ld      R3,#%0010
1D5A	a1bc		ld      R12,R11
1D5C	210d1d6c 	ld      R13,#%1d6c
1D60	7c01		di      vi
1D62	7f01		sc      #%01
1D64	bb4103a0 	ldir   @R10,@R4,R3
1D68	a1cb		ld      R11,R12
1D6A	1ea8		jp      @R10
1D6C	7f02		sc      #%02
1D6E	7c05		ei      vi
1D70	9e08		ret     
1D72	21058007 	ld      R5,#%8007
1D76	3b56ffc1 	out    %ffc1,R5
1D7A	2164		ld      R4,@R6
1D7C	8d40		com     R4
1D7E	8b74		cp      R4,R7
1D80	ee03		jr      nz,%1d88
1D82	a971		inc     R7,#2
1D84	8b97		cp      R7,R9
1D86	e7f9		jr      c,%1d7a
1D88	8d07		nop
1D8A	8d07		nop
1D8C	3b36ffc1 	out    %ffc1,R3
1D90	1ec8		jp      @R12
--------------------------------------------------------------------------------

			; init bytes for SCC ch. A
1D92	1d9a		.word	%1d9a
1D94	0b09		.word	#%0b09

			; init bytes for SCC ch. B
1D96	1d9a 		.word	%1d9a
1D98	0b09		.word	#%0b09

1D9A	09c0 		.word	#%09c0		; WR9: force hw reset
1D9C	0000		.word	#%0000		; WR0: nop
1D9E	044c	 	.word	#%044c		; WR4: x16, 2 stopbits
1DA0	0210		.word	#%0210		; WR2: intvect $10
1DA2	03c0		.word	#%03c0		; WR3: rx 8bit
1DA4	05e2		.word	#%05e2		; WR5: dtr, tx 8bit, rts
1DA6	0600		.word	#%0600		; WR6: (no sync. char)
1DA8	0700 		.word	#%0700		; WR7: (no sync. char)
1DAA	0901		.word	#%0901		; WR9: vector includes status
1DAC	0a00 		.word	#%0a00		; WR10:
1DAE	0b56		.word	#%0b56		; WR11: no xtal, rclk=brg, tclk=brg, trxc=brg

1DB0	0c0d		.word   #%0c0d		; WR12+WR13: baud rate

1DB2	0e00		.word	#%0e00		; WR14: brg disable
1DB4	03c1 		.word	#%03c1		; WR3: + rx enable
1DB6	05ea		.word	#%05ea		; WR5: + tx enable
1DB8	0080		.word	#%0080		; WR0
1DBA	0e11		.word	#%0e11		; WR14: local loopback, brg enable
1DBC	0100 		.word	#%0100		; WR1: int. disable
1DBE	0f00		.word	#%0f00		; WR15: disable status ints.
1DC0	0010 		.word	#%0010		; WR0: reset ints.
1DC2	0008		.word	#%0008		; select RR8 (rx data)
--------------------------------------------------------------------------------

			; CIO test initialisation table
			
1DC4	0000 	
1DC6	01ff	
1DC8	04ff	
1DCA	0a04
1DCC	0b04 	
1DCE	1000
1DD0	1100
1DD2	1200 	
1DD4	1300	
1DD6	16ff	
1DD8	17ff	
1DDA	18ff	
1DDC	19ff	
1DDE	1cff	
1DE0	1dff	

			; CIO normal initialisation table

1DE2	1c80		.word	#%1c80		; CT1_MODE: continuous cycle pulse output
1DE4	1d80		.word	#%1d80		; CT2_MODE: continuous cycle pulse output
1DE6	1601		.word	#%1601		; CT1_MSTIM \ time constant timer 1
1DE8	1766		.word	#%1766		; CT1_LSTIM / %0166
1DEA	18b4 		.word	#%18b4		; CT2_MSTIM \ time constant timer 2
1DEC	19d8		.word	#%19d8		; CT2_LSTIM / %b4d8
1DEE	0408		.word	#%0408		; CT_INTVECT: %08
1DF0	0103 		.word	#%0103		; MASTERCONF: link CT1 to CT2
1DF2	0ae0		.word	#%0ae0		; CT1_CMDSTAT: clear IE
1DF4	0aa0		.word	#%0aa0		; CT1_CMDSTAT: clear IP
1DF6	0a60		.word	#%0a60		; CT1_CMDSTAT: clear IUS
1DF8	0ba0		.word	#%0ba0  	; CT2_CMDSTAT: clear IP
1DFA	0b60		.word	#%0b60  	; CT2_CMDSTAT: clear IUS
1DFC	0bc0		.word	#%0bc0  	; CT2_CMDSTAT: set IE
1DFE	0160		.word	#%0160		; MASTERCONF: enable CT1 and CT2
--------------------------------------------------------------------------------

1E00	001d		.word	29
1E02	424f4f54 	.ascii	"BOOTING FROM WINCHESTER DISK", 13

1E20	001c		.word	28
1E22	424f4f54 	.ascii	"BOOTING FROM CARTRIDGE TAPE", 13

1E3E	0021		.word	#33
1E40	424f4f54 	.ascii	"BOOTING FROM STORAGE MODULE DISK", 13

1E62	0022		.word	#34
1E64	424f4f54 	.ascii	"BOOTING FROM MINI-WINCHESTER DISK", 13

1E86	001b		.word	#27
1E88	072a		.ascii	7, "*** UNABLE TO LOAD MEMORY", 13

1EA4	00010010 	addb    RH1,#%10
--------------------------------------------------------------------------------

; *** Command Z ***

1EA8	5f00082a 	call    %082a
1EAC	5e0602ee 	jp      z,%02ee

1EB0	0a084444 	cpb     RL0,#'D'	; disk
1EB4	e60b		jr      z,%1ecc
1EB6	0a084d4d 	cpb     RL0,#'M'	; mini-disk
1EBA	e60f		jr      z,%1eda
1EBC	0a085353 	cpb     RL0,#'S'	; SMD
1EC0	e613		jr      z,%1ee8
1EC2	0a085454 	cpb     RL0,#'T'	; tape
1EC6	e617		jr      z,%1ef6
1EC8	5e0802ee 	jp      %02ee		; unknown command

			; device 'D'
1ECC	21021e00 	ld      R2,#%1e00	; "BOOTING FROM WINCHESTER..."
1ED0	21060000 	ld      R6,#%0000
1ED4	dfeb		calr    %1f00
1ED6	5e0836d4 	jp      %36d4

			; device 'M'
1EDA	21021e62 	ld      R2,#%1e62	; "BOOTING FROM MINI-..."
1EDE	21060001 	ld      R6,#%0001
1EE2	dff2		calr    %1f00
1EE4	5e0836d4 	jp      %36d4

			; device 'S'
1EE8	21021e3e 	ld      R2,#%1e3e	; "BOOTING FROM STORAGE..."
1EEC	21060002 	ld      R6,#%0002
1EF0	dff9		calr    %1f00
1EF2	5e0836d4 	jp      %36d4

			; device 'T'
1EF6	21021e20 	ld      R2,#%1e20	; "BOOTING FROM CARTRIDGE..."
1EFA	dffe		calr    %1f00
1EFC	5e083dee 	jp      %3dee
--------------------------------------------------------------------------------

1F00	5f000692 	call    %0692

1F04	93f6		push    @R15,R6
1F06	5f001f66 	call    %1f66
1F0A	97f6		pop     R6,@R15

1F0C	61071ea4 	ld      R7,%1ea4
1F10	4d047e80 	test    %7e80
1F14	ee01		jr      nz,%1f18
1F16	a571		set     R7,#1

1F18	61051ea6 	ld      R5,%1ea6
1F1C	21040001 	ld      R4,#%0001

1F20	9e08		ret     
--------------------------------------------------------------------------------

; *** Nonmaskable Interrupt ***

1F22	5f0011d8 	call    %11d8
1F26	5f0020bc 	call    %20bc
1F2A	93f2		push    @R15,R2
1F2C	5f001f66 	call    %1f66
1F30	97f2		pop     R2,@R15
1F32	61071ea4 	ld      R7,%1ea4
1F36	4d047e80 	test    %7e80
1F3A	ee01		jr      nz,%1f3e
1F3C	a571		set     R7,#1
1F3E	4d057c2e1198 	ld      %7c2e,#%1198
1F44	4d057bfe5b20 	ld      %7bfe,#%5b20	; '[ '
1F4A	600e7e3c 	ldb     RL6,%7e3c
1F4E	0a0e0202 	cpb     RL6,#%02
1F52	eb06		jr      ugt,%1f60
1F54	61051ea6 	ld      R5,%1ea6
1F58	a124		ld      R4,R2
1F5A	8d24		test    R2
1F5C	5e0636d4 	jp      z,%36d4

1F60	7c05		ei      vi
1F62	5e08026e 	jp      %026e
1F66	5f00248e 	call    %248e
1F6A	0a060000 	cpb     RH6,#%00
1F6E	ea06		jr      gt,%1f7c
1F70	21021e86 	ld      R2,#%1e86
1F74	5f000692 	call    %0692
1F78	5e08026e 	jp      %026e

1F7C	21028000 	ld      R2,#%8000
1F80	21018002 	ld      R1,#%8002
1F84	21033fff 	ld      R3,#%3fff
1F88	0d28		clr     @R2
1F8A	bb210310 	ldir	@R1,@R2,R3

1F8E	21010100 	ld      R1,#%0100
1F92	7f01		sc      #%01

1F94	a112		ld      R2,R1
1F96	21030000 	ld      R3,#%0000
1F9A	a114		ld      R4,R1
1F9C	21050002 	ld      R5,#%0002
1FA0	21077fff 	ld      R7,#%7fff
1FA4	0d28		clr     @R2
1FA6	bb210740 	ldir	@R4,@R2,R7
1FAA	a810		incb    RH1,#1
1FAC	8a61		cpb     RH1,Rh6
1FAE	e2f2		jr      le,%1f94

1FB0	7f02		sc      #%02
1FB2	9e08		ret     
--------------------------------------------------------------------------------

1FB4	4d4f		.ascii	"MONITOR POWER UP DIAGNOSTICS"

1FD0	0014		.word	#20
1FD2	41435449 	.ascii	"ACTIVE PERIPHERALS:", 13

1FE6	0009		.word	#9
1FE8	434f		.ascii	"COMPLETE", 13

1FF2	001e		.word	#30
1FF4	072a		.ascii	7, "*** INVALID BOOT DEVICE CODE", 13

2012	0004		.word	#4
2014	4543430d 	.ascii	"ECC", 13

2018	000c		.word	#12
201A	072a		.ascii	7, "*** ERROR #"

2026	0011		.word	#17
2028	072a		.ascii	7, "*** FATAL ERROR", 13

203A	00074d41 	.word	#7
203E	58534547 	.ascii	"MAXSEG="
--------------------------------------------------------------------------------

2044	00fc		.word	#%00fc		; MMU 1 (code)
2046	00fa		.word	#%00fa		; MMU 2 (data)
2048	00f6		.word	#%00f6		; MMU 3 (stack)

204A	00fc		.word	#%00fc
204C	00fa		.word	#%00fa

204E	a000		.word	#%a000
2050	a100		.word	#%a100
2052	a100		.word	#%a100

2054	0000
2056	0000
2058	0101
205A	0002
205C	0200
205E	0303
2060	0100
2062	0402
2064	0008
2066	0400
2068	1008
206A	0020
206C	1000
206E	4020
2070	0080

2072	0000ff00	.word	#%0000, #%ff00	; limit 64K
2076	00000000	.word	#%0000, #%0000	; limit 256
207A	0000ff20	.word	#%0000, #%ff20	; DIRW, limit 256
207E	0000ff01	.word	#%0000, #%ff01	; RD, limit 64K
2082	00000020	.word	#%0000, #%0020	; DIRW, limit 64K
2086	00000000	.word	#%0000, #%0000	; limit 256

208A	01090000

208E	43454607 	sub     R5,%4607(R4)
2092	61626426 	ld      R2,%6426(R6)
2096	2949		inc     @R4,#10
2098	4a0b4c0d 	cpb     RL3,%4c0d
209C	0e4f3451 	ext0e   #%0e4f3451
20A0	52135415 	subl    RR3,%5415(R1)
20A4	1657		addl    RR7,@R5
20A6	58191a5b 	multl   rq9,%1a5b(R1)
20AA	1c793e1f 	ldm     @R7,R14,#16

20AE	aaaa		.word	#%AAAA
20B0	5555		.word	#%5555
20B2	ffff		.word	#%FFFF
20B4	0000		.word	#%0000

20B6	30b0 		.word	#%20b0
20B8	31a6		.word	#%31a6
20BA	328e		.word	#%328e
--------------------------------------------------------------------------------

; *** Command TEST ***

20BC	8d08		clr     R0
20BE	3b06ffc1 	out	%ffc1,R0

20C2	a880		incb    RL0,#1
20C4	3a860000 	outb	%0000,RL0	; [ECC board ?]

20C8	3b04ffc1 	in	R0,%ffc1	; get SCR
20CC	8d00		com     R0
20CE	070001c0 	and     R0,#%01c0
20D2	b301fffa 	srl     R0,#6
20D6	6e087e3c 	ldb     %7e3c,RL0	; save boot device code

20DA	21041fb4 	ld      R4,#%1fb4	; "MONITOR POWER UP..."
20DE	6f047e42 	ld      %7e42,R4
20E2	7f0a		sc      #CRLF

			; Test #0000 - size memory
20E4	5f0023ae 	call    %23ae		; "M" print next char of msg
20E8	bd80		ldk     R8,#0		; test #0000
20EA	8c18		clrb    RH1
20EC	6f087e40 	ld      %7e40,R8
20F0	4d057e460000 	ld      %7e46,#%0000
20F6	bd60		ldk     R6,#0
20F8	6f067e3e 	ld      %7e3e,R6
20FC	5f00248e 	call    %248e		; size memory
2100	0a060000 	cpb     RH6,#%00	; no segments?
2104	5e06239e 	jp      z,%239e		; yes, fatal error
2108	6f067e3e 	ld      %7e3e,R6	; store number of segments

			; ----

			; Test #0001 - check segment addresses
210C	5f0023ae 	call    %23ae		; "MO"
2110	21080001 	ld      R8,#%0001	; test no. 1
2114	4d057e4600e1 	ld      %7e46,#%00e1

211A	c802		ldb     RL0,#%02
211C	21078000 	ld      R7,#%8000
2120	7f01		sc      #SEG
2122	206c		ldb     RL4,@@R6
2124	7f02		sc      #NSEG
2126	8ac6		cpb     RH6,RL4
2128	e605		jr      z,%2134

212A	2107fffe 	ld      R7,#%fffe
212E	f808		dbjnz   RL0,%2120
2130	5e08239e 	jp      %239e		; fatal error

2134	aa60		decb    RH6,#1
2136	0a060000 	cpb     RH6,#%00
213A	e9ef		jr      ge,%211a

			; ----

			; Test Zilog 8536 CIO
			; Test #0040: register test
			; Test #0041: interrupt test

213C	5f0023ae 	call    %23ae		; "MON"
2140	5f001726 	call    %1726

			; ----

			; Test CPU cache

2144	5f0023ae 	call    %23ae		; "MONI"
2148	4d057e80ffff 	ld      %7e80,#%ffff
214E	3b34ffc1 	in	R3,%ffc1
2152	a739		bit     R3,#9
2154	ee1e		jr      nz,%2192
2156	4d087e80 	clr     %7e80

			; Test #0050
215A	21080050 	ld      R8,#%0050
215E	4d057e460094 	ld      %7e46,#%0094
2164	bdc1		ldk     R12,#1
2166	5f001874 	call    %1874

			; Test #0051
216A	21080051 	ld      R8,#%0051
216E	bdc3		ldk     R12,#3
2170	5f001874 	call    %1874
2174	4d047e80 	test    %7e80
2178	e60c		jr      z,%2192

217A	bd20		ldk     R2,#0
217C	21031000 	ld      R3,#%1000
2180	bd41		ldk     R4,#1
2182	5f001c00 	call    %1c00

2186	bd20		ldk     R2,#0
2188	21031000 	ld      R3,#%1000
218C	bd43		ldk     R4,#3
218E	5f001c00 	call    %1c00

			; -----

2192	5f0023ae 	call    %23ae		; "MONIT"
2196	8c18		clrb    RH1
2198	4d087e54 	clr     %7e54
219C	61067e3e 	ld      R6,%7e3e
21A0	7d92		ldctl   R9,FCW

			; Test #0100-103
21A2	21080100 	ld      R8,#%0100
21A6	5f0024b8 	call    %24b8

			; Test #0104
21AA	21080104 	ld      R8,#%0104
21AE	4d057e460000 	ld      %7e46,#%0000
21B4	61027e40 	ld      R2,%7e40
21B8	4b027e54 	cp      R2,%7e54
21BC	e60c		jr      z,%21d6
21BE	6f027e54 	ld      %7e54,R2
21C2	4b067e3e 	cp      R6,%7e3e
21C6	ee07		jr      nz,%21d6
21C8	aa60		decb    RH6,#1
21CA	8c64		testb   RH6
21CC	5e06239e 	jp      z,%239e
21D0	6f067e3e 	ld      %7e3e,R6
21D4	a860		incb    RH6,#1

21D6	aa60		decb    RH6,#1
21D8	0a060000 	cpb     RH6,#%00
21DC	eae2		jr      gt,%21a2

			; Test #0100
21DE	5f0023ae 	call    %23ae		; "MONITO"
21E2	21080100 	ld      R8,#%0100
21E6	bd60		ldk     R6,#0
21E8	2103ffc1 	ld      R3,#%ffc1
21EC	a16a		ld      R10,R6		; R10=0000
21EE	610c7e3e 	ld      R12,%7e3e	; get last segment number
21F2	210b1fb4 	ld      R11,#%1fb4
21F6	a1bd		ld      R13,R11
21F8	21098000 	ld      R9,#%8000
21FC	03091fb4 	sub     R9,#%1fb4	; R9=604C

2200	7f01		sc      #%01		; switch to segmented mode
2202	bba109c0 	ldir	@RR12,@RR10,R9
2206	210d2564 	ld      R13,#%2564
220A	210b2210 	ld      R11,#%2210	; return address
220E	1ec8		jp      @RR12		; jump to <lastseg>2564
2210	7f02		sc      #%02		; switch to non-segmented mode

2212	41037e40 	add     R3,%7e40
2216	6f037e40 	ld      %7e40,R3
221A	8d34		test    R3
221C	5e0e23a2 	jp      nz,%23a2	; fatal error

2220	21070000 	ld      R7,#%0000
2224	21020014 	ld      R2,#%0014
2228	3f72		out     @R7,R2
222A	3d73		in      R3,@R7
222C	0703001e 	and     R3,#%001e
2230	8b23		cp      R3,R2
2232	ee24		jr      nz,%227c

2234	4d057e460000 	ld      %7e46,#%0000
223A	93f3		push    @R15,R3
223C	93f9		push    @R15,R9
223E	140600000000 	ldl     RR6,#%00000000
2244	5d067e6c 	ldl     %7e6c,Rr6
2248	5d067e78 	ldl     %7e78,Rr6
224C	6f067e7c 	ld      %7e7c,R6
2250	140600000001 	ldl     RR6,#%00000001
2256	5d067e70 	ldl     %7e70,Rr6
225A	5d067e74 	ldl     %7e74,Rr6
225E	21060040 	ld      R6,#%0040
2262	6f067e7e 	ld      %7e7e,R6
2266	5f0025a6 	call    %25a6		; "MONITOR "
226A	5f00269a 	call    %269a		; "MONITOR P"
226E	7f02		sc      #%02
2270	97f9		pop     R9,@R15
2272	97f3		pop     R3,@R15

2274	4d057e600001 	ld      %7e60,#%0001
227A	e806		jr      %2288
			; -----

227C	4d087e60 	clr     %7e60
2280	5f0023ae 	call    %23ae		; "MONITOR "
2284	5f0023ae 	call    %23ae		; "MONITOR P"
			; -----

2288	5f002852 	call    %2852		; "MONITOR PO"
228C	3b34ffc1 	in	R3,%ffc1
2290	a739		bit     R3,#9
2292	ee03		jr      nz,%229a
2294	5f002e0e 	call    %2e0e
2298	e80c		jr      %22b2

229A	5f0023ae 	call    %23ae		; "MONITOR PO"
229E	5f0023ae 	call    %23ae		; "MONITOR POW"
22A2	5f0023ae 	call    %23ae		; "MONITOR POWE"
22A6	5f0023ae 	call    %23ae		; "MONITOR POWER "
22AA	5f0023ae 	call    %23ae		; "MONITOR POWER U"
22AE	5f0023ae 	call    %23ae		; "MONITOR POWER UP "

			; -----

22B2	7f0a		sc      #CRLF
22B4	7f0a		sc      #CRLF
22B6	21021fd0 	ld      R2,#%1fd0	; "ACTIVE PERIPHERALS"
22BA	7f0c		sc      #PUTMSG

22BC	4d057e4c0001 	ld      %7e4c,#%0001
22C2	8d18		clr     R1
22C4	60097e3c 	ldb     RL1,%7e3c
22C8	0a090202 	cpb     RL1,#%02
22CC	e305		jr      ule,%22d8
22CE	bd10		ldk     R1,#0
22D0	21021ff2 	ld      R2,#%1ff2	; "INVALID BOOT DEVICE CODE"
22D4	7f0c		sc      #PUTMSG
22D6	e805		jr      %22e2

22D8	61027c2e 	ld      R2,%7c2e
22DC	0b021f22 	cp      R2,#%1f22
22E0	e602		jr      z,%22e6
22E2	4d087e4c 	clr     %7e4c

22E6	b3110001 	sll     R1,#1
22EA	21000003 	ld      R0,#%0003
22EE	91f0		pushl   @R15,Rr0
22F0	611820b6 	ld      R8,%20b6(R1)
22F4	1f80		call    @R8
22F6	95f0		popl    RR0,@R15
22F8	a911		inc     R1,#2
22FA	0b010006 	cp      R1,#%0006
22FE	e701		jr      c,%2302
2300	bd10		ldk     R1,#0
2302	f08b		djnz    R0,%22ee
2304	5f0034a6 	call    %34a6
2308	4d047e60 	test    %7e60
230C	e603		jr      z,%2314
230E	21022012 	ld      R2,#%2012	; "ECC"
2312	7f0c		sc      #PUTMSG

2314	5f00367c 	call    %367c
2318	5f0035c6 	call    %35c6
231C	5f00359e 	call    %359e
2320	5f003648 	call    %3648
2324	7f0a		sc      #CRLF
2326	76021fe6 	lda     R2,%1fe6	; "COMPLETE"
232A	7f0c		sc      #PUTMSG
232C	7602203a 	lda     R2,%203a	; "MAXSEG="
2330	7f0c		sc      #PUTMSG
2332	600d7e3e 	ldb     RL5,%7e3e
2336	7f14		sc      #%14
2338	7f10		sc      #OUTMSG
233A	61027e40 	ld      R2,%7e40
233E	9e08		ret     
2340	4d087e48 	clr     %7e48
2344	4d087e4a 	clr     %7e4a
2348	5f00082a 	call    %082a
234C	9e06		ret     z
234E	0a084848 	cpb     RL0,#%48
2352	ee03		jr      nz,%235a
2354	65027e48 	set     %7e48,#2
2358	9e08		ret     
235A	0a084c4c 	cpb     RL0,#%4c
235E	ee03		jr      nz,%2366
2360	65007e48 	set     %7e48,#0
2364	9e08		ret     
2366	65017e48 	set     %7e48,#1
236A	5f0007c4 	call    %07c4
236E	6f037e4a 	ld      %7e4a,R3
2372	9e08		ret     
--------------------------------------------------------------------------------

2374	a611		bitb    RH1,#1
2376	e603		jr      z,%237e

2378	8b45		cp      R5,R4
237A	9e06		ret     z
237C	e802		jr      %2382

237E	8acd		cpb     RL5,RL4
2380	9e06		ret     z

2382	a610		bitb    RH1,#0
2384	e609		jr      z,%2398

2386	3c32		inb     RH2,@R3
2388	a220		resb    RH2,#0
238A	3e32		outb    @R3,RH2
238C	5f0023e8 	call    %23e8		; error
2390	3c32		inb     RH2,@R3
2392	a420		setb    RH2,#0
2394	3e32		outb    @R3,RH2
2396	9e08		ret     

2398	5f0023e8 	call    %23e8		; error
239C	9e08		ret     
--------------------------------------------------------------------------------

; Print error number fatal error

239E	5f0023e8 	call    %23e8

; Print fatal error

23A2	21022026 	ld      R2,#%2026	; "FATAL ERROR"
23A6	7f0c		sc      #PUTMSG
23A8	61027e40 	ld      R2,%7e40
23AC	9e08		ret     
--------------------------------------------------------------------------------

; Print part of power-up message (one character; two characters if blank at end)

23AE	93f2		push    @R15,R2

23B0	61027e42 	ld      R2,%7e42	; ptr to power up msg
23B4	a920		inc     R2,#1
23B6	c901		ldb     RL1,#%01	; one character
23B8	0c212020 	cpb     @R2,#%20
23BC	ee01		jr      nz,%23c0
23BE	a890		incb    RL1,#1		; two characters

23C0	5f0023c8 	call    %23c8		; print part of power up msg

23C4	97f2		pop     R2,@R15
23C6	9e08		ret     
--------------------------------------------------------------------------------

; Print part of power-up message, length in RL1

23C8	91f0		pushl   @R15,RR0
23CA	91f2		pushl   @R15,RR2

23CC	61027e42 	ld      R2,%7e42	; ptr to power up msg
23D0	2028		ldb     RL0,@R2		; get character
23D2	7f06		sc      #TYWR		; print character
23D4	a920		inc     R2,#1
23D6	f904		dbjnz   RL1,%23d0

23D8	6f027e42 	ld      %7e42,R2	; update ptr
23DC	4d057e440000 	ld      %7e44,#%0000

23E2	95f2		popl    RR2,@R15
23E4	95f0		popl    RR0,@R15
23E6	9e08		ret     
--------------------------------------------------------------------------------

; Print error number

23E8	030f001e 	sub     R15,#%001e
23EC	1cf9000e 	ldm     @R15,R0,#15
23F0	93f4		push    @R15,R4
23F2	93f5		push    @R15,R5
23F4	93f7		push    @R15,R7
23F6	93f6		push    @R15,R6
23F8	93f8		push    @R15,R8

23FA	4d047e44 	test    %7e44
23FE	ee01		jr      nz,%2402
2400	7f0a		sc      #%0a

2402	4d057e44ffff 	ld      %7e44,#%ffff
2408	21022018 	ld      R2,#%2018	; "*** ERROR #"
240C	7f0c		sc      #PUTMSG

240E	97f5		pop     R5,@R15
2410	7f0e		sc      #HEX

2412	c920		ldb     RL1,#' '
2414	7f16		sc      #ADDMSG

2416	61077e46 	ld      R7,%7e46
241A	bd64		ldk     R6,#4

241C	8c78		clrb    RH7
241E	b372		rl      R7,#2
2420	97f5		pop     R5,@R15
2422	0a070101 	cpb     RH7,#%01
2426	ee02		jr      nz,%242c

2428	7f12		sc      #HEXB
242A	e80a		jr      %2440

242C	0a070202 	cpb     RH7,#%02
2430	ee02		jr      nz,%2436

2432	7f0e		sc      #HEX
2434	e805		jr      %2440

2436	0a070303 	cpb     RH7,#%03
243A	ee02		jr      nz,%2440
243C	a05d		ldb     RL5,RH5
243E	7f14		sc      #ADDSEG

2440	c920		ldb     RL1,#' '
2442	7f16		sc      #ADDMSG
2444	f695		djnz    R6,%241c

2446	7f10		sc      #OUTMSG
2448	1cf1000e 	ldm     R0,@R15,#15
244C	010f001e 	add     R15,#%001e
2450	a612		bitb    RH1,#2
2452	ee02		jr      nz,%2458
2454	69007e40 	inc     %7e40,#1
2458	a212		resb    RH1,#2
245A	a616		bitb    RH1,#6
245C	e601		jr      z,%2460
245E	a417		setb    RH1,#7
2460	a416		setb    RH1,#6
2462	67027e48 	bit     %7e48,#2
2466	e601		jr      z,%246a
2468	7a00		halt
246A	67007e48 	bit     %7e48,#0
246E	9e06		ret     z
2470	a415		setb    RH1,#5
2472	9e08		ret     
--------------------------------------------------------------------------------

2474	a214		resb    RH1,#4
2476	a215		resb    RH1,#5
2478	67017e48 	bit     %7e48,#1
247C	9e06		ret     z

247E	4d047e4a 	test    %7e4a
2482	e603		jr      z,%248a

2484	4b087e4a 	cp      R8,%7e4a
2488	9e0e		ret     nz

248A	a414		setb    RH1,#4
248C	9e08		ret     
--------------------------------------------------------------------------------

248E	bd60		ldk     R6,#0
2490	cda5		ldb     RL5,#%a5

2492	c802		ldb     RL0,#%02
2494	a065		ldb     RH5,RH6
2496	21078000 	ld      R7,#%8000

			; write/read at segment RH6 address R7
249A	7f01		sc      #SEG
249C	2f65		ld      @RR6,R5
249E	2164		ld      R4,@RR6
24A0	7f02		sc      #NSEG

24A2	8b45		cp      R5,R4		; correct read?
24A4	e607		jr      z,%24b4

24A6	2107fffe 	ld      R7,#%fffe	; no, test other address
24AA	f809		dbjnz   RL0,%249a

24AC	aa60		decb    RH6,#1
24AE	9e0d		ret     pl

24B0	bd60		ldk     R6,#0
24B2	9e08		ret     

24B4	a860		incb    RH6,#1		; next segment
24B6	e8ed		jr      %2492
--------------------------------------------------------------------------------

24B8	4d057e4600e5 	ld      %7e46,#%00e5
24BE	06010101 	andb    RH1,#%01
24C2	bd73		ldk     R7,#3
24C4	cd0f		ldb     RL5,#%0f

24C6	a59f		set     R9,#15
24C8	7d9a		ldctl   FCW,R9
24CA	2e6d		ldb     @R6,RL5
24CC	a39f		res     R9,#15
24CE	7d9a		ldctl   FCW,R9
24D0	b370		rl      R7,#1
24D2	fd07		dbjnz   RL5,%24c6

24D4	b370		rl      R7,#1
24D6	cd0f		ldb     RL5,#%0f
24D8	a59f		set     R9,#15
24DA	7d9a		ldctl   FCW,R9
24DC	206c		ldb     RL4,@R6
24DE	a39f		res     R9,#15
24E0	7d9a		ldctl   FCW,R9
24E2	5f002374 	call    %2374
24E6	a617		bitb    RH1,#7
24E8	ee02		jr      nz,%24ee
24EA	b370		rl      R7,#1
24EC	fd0b		dbjnz   RL5,%24d8

24EE	21080101 	ld      R8,#%0101
24F2	4d057e4600ea 	ld      %7e46,#%00ea
24F8	06010101 	andb    RH1,#%01
24FC	a411		setb    RH1,#1
24FE	21078000 	ld      R7,#%8000
2502	bd51		ldk     R5,#1
2504	c811		ldb     RL0,#%11
2506	a59f		set     R9,#15
2508	7d9a		ldctl   FCW,R9
250A	2f65		ld      @R6,R5
250C	2164		ld      R4,@R6
250E	a39f		res     R9,#15
2510	7d9a		ldctl   FCW,R9
2512	5f002374 	call    %2374
2516	a617		bitb    RH1,#7
2518	ee02		jr      nz,%251e
251A	b350		rl      R5,#1
251C	f80c		dbjnz   RL0,%2506
251E	2105aaaa 	ld      R5,#%aaaa
2522	21080102 	ld      R8,#%0102
2526	06010303 	andb    RH1,#%03
252A	a16c		ld      R12,R6
252C	bdd2		ldk     R13,#2
252E	bd70		ldk     R7,#0
2530	21007fff 	ld      R0,#%7fff
2534	a59f		set     R9,#15
2536	7d9a		ldctl   FCW,R9
2538	2f65		ld      @R6,R5
253A	bb6100c0 	ldir   @R12,@R6,R0
253E	bd70		ldk     R7,#0
2540	21008000 	ld      R0,#%8000
2544	bb64005e 	cpir    R5,@R6,R0,nz
2548	ab71		dec     R7,#2
254A	2164		ld      R4,@R6
254C	a39f		res     R9,#15
254E	7d9a		ldctl   FCW,R9
2550	5f002374 	call    %2374
2554	0a0d5555 	cpb     RL5,#%55
2558	9e06		ret     z
255A	21055555 	ld      R5,#%5555
255E	21080103 	ld      R8,#%0103
2562	e8e1		jr      %2526
--------------------------------------------------------------------------------

2564	7d92		ldctl   R9,FCW
2566	a39f		res     R9,#15
2568	7d9a		ldctl   FCW,R9

256A	ca09		ldb     RL2,#%09
256C	3aa6ff87 	outb   %ff87,RL2
2570	ca00		ldb     RL2,#%00
2572	3aa6ff87 	outb   %ff87,RL2

2576	3b24ffc1 	in     R2,%ffc1
257A	a520		set     R2,#0		; enable on-board memory
257C	3b26ffc1 	out    %ffc1,R2

2580	a410		setb    RH1,#0
2582	5f0024b8 	call    %24b8

2586	3b24ffc1 	in     R2,%ffc1
258A	a320		res     R2,#0		; disable on-board memory
258C	3b26ffc1 	out    %ffc1,R2

2590	ca09		ldb     RL2,#%09
2592	3aa6ff87 	outb   %ff87,RL2
2596	ca09		ldb     RL2,#%09
2598	3aa6ff87 	outb   %ff87,RL2

259C	61037e40 	ld      R3,%7e40

25A0	a59f		set     R9,#15
25A2	7d9a		ldctl   FCW,R9

25A4	1ea8		jp      @R10
--------------------------------------------------------------------------------

25A6	5f0023ae 	call    %23ae

25AA	8c18		clrb    RH1
25AC	4d087e62 	clr     %7e62
25B0	140800000000 	ldl     RR8,#%00000000
25B6	21070001 	ld      R7,#%0001
25BA	8d68		clr     R6
25BC	3f76		out     @R7,R6
25BE	4d087e60 	clr     %7e60
25C2	54067e70 	ldl     RR6,%7e70
25C6	100680000000 	cpl     RR6,#%80000000
25CC	e603		jr      z,%25d4
25CE	b3650001 	slll    RR6,#1
25D2	e803		jr      %25da
25D4	140600000001 	ldl     RR6,#%00000001
25DA	5d067e70 	ldl     %7e70,Rr6
25DE	948c		ldl     RR12,Rr8
25E0	010c0100 	add     R12,#%0100
25E4	54067e6c 	ldl     RR6,%7e6c
25E8	5f0018c8 	call    %18c8
25EC	54067e6c 	ldl     RR6,%7e6c
25F0	54047e70 	ldl     RR4,%7e70
25F4	8964		xor     R4,R6
25F6	8975		xor     R5,R7
25F8	21078000 	ld      R7,#%8000
25FC	8d68		clr     R6
25FE	a123		ld      R3,R2
2600	5f001912 	call    %1912
2604	21078000 	ld      R7,#%8000
2608	bd60		ldk     R6,#0
260A	5f00193e 	call    %193e
260E	50027e6c 	cpl     RR2,%7e6c
2612	e604		jr      z,%261c
2614	69007e62 	inc     %7e62,#1
2618	5e08264e 	jp      %264e
261C	69007e60 	inc     %7e60,#1
2620	21070001 	ld      R7,#%0001
2624	3d72		in      R2,@R7
2626	070200ff 	and     R2,#%00ff
262A	0b0200ff 	cp      R2,#%00ff
262E	ee04		jr      nz,%2638
2630	4d017e600100 	cp      %7e60,#%0100
2636	e60b		jr      z,%264e
2638	4b027e60 	cp      R2,%7e60
263C	e608		jr      z,%264e
263E	69007e62 	inc     %7e62,#1
2642	4d087e60 	clr     %7e60
2646	21070001 	ld      R7,#%0001
264A	8d68		clr     R6
264C	3f76		out     @R7,R6
264E	540a7e6c 	ldl     RR10,%7e6c
2652	160a00010001 	addl    RR10,#%00010001
2658	5d0a7e6c 	ldl     %7e6c,RR10
265C	54067e70 	ldl     RR6,%7e70
2660	100680000000 	cpl     RR6,#%80000000
2666	ee04		jr      nz,%2670
2668	140600000001 	ldl     RR6,#%00000001
266E	e802		jr      %2674
2670	b3650001 	slll    RR6,#1
2674	5d067e70 	ldl     %7e70,Rr6
2678	160800000001 	addl    RR8,#%00000001
267E	908c		cpl     RR12,Rr8
2680	e7b1		jr      c,%25e4
2682	100800000400 	cpl     RR8,#%00000400
2688	e796		jr      c,%25b6
268A	4d047e62 	test    %7e62
268E	9e06		ret     z
2690	21080200 	ld      R8,#%0200
2694	5f0023e8 	call    %23e8
2698	9e08		ret     
--------------------------------------------------------------------------------

269A	5f0023ae 	call    %23ae
269E	8c18		clrb    RH1
26A0	5f0018ec 	call    %18ec
26A4	5f001960 	call    %1960
26A8	140600000000 	ldl     RR6,#%00000000
26AE	5d067e6c 	ldl     %7e6c,Rr6
26B2	140600000000 	ldl     RR6,#%00000000
26B8	5d067e5c 	ldl     %7e5c,Rr6
26BC	4d087e60 	clr     %7e60
26C0	21070001 	ld      R7,#%0001
26C4	8d68		clr     R6
26C6	3f76		out     @R7,R6
26C8	540c7e5c 	ldl     RR12,%7e5c
26CC	160c00000100 	addl    RR12,#%00000100
26D2	540a7e74 	ldl     RR10,%7e74
26D6	54087e78 	ldl     RR8,%7e78
26DA	61037e7e 	ld      R3,%7e7e
26DE	100a00000000 	cpl     RR10,#%00000000
26E4	e60a		jr      z,%26fa
26E6	908a		cpl     RR10,Rr8
26E8	e608		jr      z,%26fa
26EA	b385ffff 	srll    RR8,#1
26EE	100800000000 	cpl     RR8,#%00000000
26F4	ee02		jr      nz,%26fa
26F6	21030040 	ld      R3,#%0040
26FA	4d017e7c0000 	cp      %7e7c,#%0000
2700	e612		jr      z,%2726
2702	4b037e7c 	cp      R3,%7e7c
2706	ee0f		jr      nz,%2726
2708	b331ffff 	srl     R3,#1
270C	8d34		test    R3
270E	ee0b		jr      nz,%2726
2710	100a80000000 	cpl     RR10,#%80000000
2716	e604		jr      z,%2720
2718	140880000000 	ldl     RR8,#%80000000
271E	e803		jr      %2726
2720	140840000000 	ldl     RR8,#%40000000
2726	54067e6c 	ldl     RR6,%7e6c
272A	5f0018c8 	call    %18c8
272E	6f037e7e 	ld      %7e7e,R3
2732	54047e6c 	ldl     RR4,%7e6c
2736	89a4		xor     R4,R10
2738	89b5		xor     R5,R11
273A	8984		xor     R4,R8
273C	8995		xor     R5,R9
273E	49027e7c 	xor     R2,%7e7c
2742	8923		xor     R3,R2
2744	21078000 	ld      R7,#%8000
2748	8d68		clr     R6
274A	5f001912 	call    %1912
274E	21078000 	ld      R7,#%8000
2752	bd60		ldk     R6,#0
2754	5f00193e 	call    %193e
2758	5f00197a 	call    %197a
275C	5f001960 	call    %1960
2760	61027e50 	ld      R2,%7e50
2764	4d087e50 	clr     %7e50
2768	0b020004 	cp      R2,#%0004
276C	ee66		jr      nz,%283a
276E	69007e60 	inc     %7e60,#1
2772	21070001 	ld      R7,#%0001
2776	3d72		in      R2,@R7
2778	070200ff 	and     R2,#%00ff
277C	0b0200ff 	cp      R2,#%00ff
2780	ee04		jr      nz,%278a
2782	4d017e600100 	cp      %7e60,#%0100
2788	e603		jr      z,%2790
278A	4b027e60 	cp      R2,%7e60
278E	ee58		jr      nz,%2840
2790	54067e6c 	ldl     RR6,%7e6c
2794	160600010001 	addl    RR6,#%00010001
279A	5d067e6c 	ldl     %7e6c,Rr6
279E	61037e7c 	ld      R3,%7e7c
27A2	61047e7e 	ld      R4,%7e7e
27A6	100a00000000 	cpl     RR10,#%00000000
27AC	e60c		jr      z,%27c6
27AE	100a80000000 	cpl     RR10,#%80000000
27B4	e603		jr      z,%27bc
27B6	b3a50001 	slll    RR10,#1
27BA	e80f		jr      %27da
27BC	140a00000000 	ldl     RR10,#%00000000
27C2	bd31		ldk     R3,#1
27C4	e80a		jr      %27da
27C6	0b030040 	cp      R3,#%0040
27CA	e603		jr      z,%27d2
27CC	b3310001 	sll     R3,#1
27D0	e804		jr      %27da
27D2	bd30		ldk     R3,#0
27D4	140a00000001 	ldl     RR10,#%00000001
27DA	100800000000 	cpl     RR8,#%00000000
27E0	e60d		jr      z,%27fc
27E2	100800000001 	cpl     RR8,#%00000001
27E8	e603		jr      z,%27f0
27EA	b385ffff 	srll    RR8,#1
27EE	e810		jr      %2810
27F0	140800000000 	ldl     RR8,#%00000000
27F6	21040040 	ld      R4,#%0040
27FA	e80a		jr      %2810
27FC	0b040001 	cp      R4,#%0001
2800	e603		jr      z,%2808
2802	b341ffff 	srl     R4,#1
2806	e804		jr      %2810
2808	bd40		ldk     R4,#0
280A	140880000000 	ldl     RR8,#%80000000
2810	6f037e7c 	ld      %7e7c,R3
2814	6f047e7e 	ld      %7e7e,R4
2818	54067e5c 	ldl     RR6,%7e5c
281C	160600000001 	addl    RR6,#%00000001
2822	5d067e5c 	ldl     %7e5c,Rr6
2826	500c7e5c 	cpl     RR12,%7e5c
282A	5e0726de 	jp      c,%26de
282E	100600000400 	cpl     RR6,#%00000400
2834	5e0726bc 	jp      c,%26bc
2838	e807		jr      %2848
283A	21080201 	ld      R8,#%0201
283E	e802		jr      %2844
2840	21080202 	ld      R8,#%0202
2844	5f0023e8 	call    %23e8
2848	5f001904 	call    %1904
284C	5f00197a 	call    %197a
2850	9e08		ret     
--------------------------------------------------------------------------------

; Test MMUs
; ---------

2852	5f0023ae 	call    %23ae			; "MONITOR PO"

2856	8c18		clrb    RH1

			; set MMU IDs
2858	8ca8		clrb    RL2
285A	3aa700fc 	soutb	%00fc,RL2		; MMU 1
285E	a8a0		incb    RL2,#1
2860	3aa700fa 	soutb	%00fa,RL2		; MMU 2
2864	a8a0		incb    RL2,#1
2866	3aa700f6 	soutb	%00f6,RL2		; MMU 3

286A	3aa711f0 	soutb	%11f0,RL2		; reset VTR all MMUs

			; setup additional trap vectors
286E	7d95		ldctl   R9,psap
2870	61940026 	ld      R4,%0026(R9)
2874	6f047e54 	ld      %7e54,R4		; old segm. error trap vector
2878	61940016 	ld      R4,%0016(R9)
287C	6f047e58 	ld      %7e58,R4		; old priv. instr. trap vector

2880	4d9500224000 	ld      %0022(R9),#%4000	; \
2886	4d9500248000 	ld      %0024(R9),#%8000	;  > segmentation error trap
288C	4d95002619d8 	ld      %0026(R9),#%19d8	; /
2892	4d9500124000 	ld      %0012(R9),#%4000	; \
2898	4d9500148000 	ld      %0014(R9),#%8000	;  > privileged instruction trap
289E	4d95001619d0 	ld      %0016(R9),#%19d0	; /

			; clear A100-A1FF
28A4	210aa100 	ld      R10,#%a100
28A8	210ba101 	ld      R11,#%a101
28AC	bd50		ldk     R5,#0
28AE	210000ff 	ld      R0,#%00ff
28B2	2ead		ldb     @R10,RL5
28B4	baa100b0 	ldirb	@R11,@R10,R0

			; setup A000-A0FF with 00..FF
28B8	210aa000 	ld      R10,#%a000
28BC	2ead		ldb     @R10,RL5
28BE	a9a0		inc     R10,#1
28C0	a950		inc     R5,#1
28C2	a650		bitb    RH5,#0
28C4	e6fb		jr      z,%28bc

			; setup A200-A2FF with AA
28C6	210aa200 	ld      R10,#%a200
28CA	210ba201 	ld      R11,#%a201
28CE	2105aaaa 	ld      R5,#%aaaa
28D2	210000ff 	ld      R0,#%00ff
28D6	2ead		ldb     @R10,RL5
28D8	baa100b0 	ldirb	@R11,@R10,R0

			; setup A300-A3FF with 55
28DC	210aa300 	ld      R10,#%a300
28E0	210ba301 	ld      R11,#%a301
28E4	21055555 	ld      R5,#%5555
28E8	210000ff 	ld      R0,#%00ff
28EC	2ead		ldb     @R10,RL5
28EE	baa100b0 	ldirb	@R11,@R10,R0

28F2	8d28		clr     R2			; MMU 1
28F4	21080300 	ld      R8,#%0300		; Test #0300
28F8	8d38		clr     R3

28FA	61262044 	ld      R6,%2044(R2)		; get I/O address of MMU
28FE	210ba000 	ld      R11,#%a000		; buffer address (00.FF)
2902	5f001a6c 	call    %1a6c			; fill segment descriptor registers

2906	a921		inc     R2,#2			; MMU 2
2908	61262044 	ld      R6,%2044(R2)		; get I/O address of MMU
290C	210ba100 	ld      R11,#%a100		; buffer address (all 0s)
2910	5f001a6c 	call    %1a6c			; fill segment descriptor registers

2914	a921		inc     R2,#2			; MMU 3
2916	61262044 	ld      R6,%2044(R2)		; get I/O address of MMU
291A	5f001a6c 	call    %1a6c			; fill with AA
291E	ab23		dec     R2,#4			; back to MMU1

2920	5f002474 	call    %2474
2924	a139		ld      R9,R3
2926	8129		add     R9,R2
2928	61962044 	ld      R6,%2044(R9)
292C	613b204e 	ld      R11,%204e(R3)
2930	5f001a96 	call    %1a96
2934	a615		bitb    RH1,#5
2936	eef4		jr      nz,%2920

2938	a931		inc     R3,#2
293A	0b030006 	cp      R3,#%0006
293E	eef0		jr      nz,%2920

2940	a614		bitb    RH1,#4
2942	eed8		jr      nz,%28f4

2944	21080301 	ld      R8,#%0301		; test #0301
2948	4d057e460095 	ld      %7e46,#%0095
294E	06010101 	andb    RH1,#%01
2952	2100001e 	ld      R0,#%001e
2956	61262044 	ld      R6,%2044(R2)
295A	21032054 	ld      R3,#%2054
295E	5f002474 	call    %2474

2962	a16a		ld      R10,R6
2964	010a0100 	add     R10,#%0100
2968	203f		ldb     RL7,@R3
296A	b2f10002 	sllb    RL7,#2
296E	3a3300a8 	soutib @R10,@R3,R0

2972	a16a		ld      R10,R6
2974	010a2000 	add     R10,#%2000
2978	003f		addb    RL7,@R3
297A	3a3300a8 	soutib @R10,@R3,R0

297E	a16a		ld      R10,R6
2980	010a0f00 	add     R10,#%0f00
2984	5f002474 	call    %2474
2988	203d		ldb     RL5,@R3
298A	21097e56 	ld      R9,#%7e56
298E	3aa10098 	sinib  @R9,@R10,R0
2992	ab90		dec     R9,#1
2994	209c		ldb     RL4,@R9
2996	5f002374 	call    %2374
299A	a615		bitb    RH1,#5
299C	eef3		jr      nz,%2984
299E	a617		bitb    RH1,#7
29A0	ee03		jr      nz,%29a8
29A2	a930		inc     R3,#1
29A4	8c84		testb   RL0
29A6	eedb		jr      nz,%295e
29A8	a614		bitb    RH1,#4
29AA	eecc		jr      nz,%2944

29AC	21080302 	ld      R8,#%0302		; test #0302
29B0	210ba200 	ld      R11,#%a200
29B4	5f001a6c 	call    %1a6c
29B8	5f001a96 	call    %1a96
29BC	a615		bitb    RH1,#5
29BE	eef8		jr      nz,%29b0
29C0	210ba300 	ld      R11,#%a300
29C4	5f001a6c 	call    %1a6c
29C8	5f001a96 	call    %1a96
29CC	a615		bitb    RH1,#5
29CE	eef8		jr      nz,%29c0
29D0	a614		bitb    RH1,#4
29D2	eeec		jr      nz,%29ac

29D4	21080303 	ld      R8,#%0303		; test #0303
29D8	4d057e4600a5 	ld      %7e46,#%00a5
29DE	8c18		clrb    RH1
29E0	21000002 	ld      R0,#%0002
29E4	21097e56 	ld      R9,#%7e56
29E8	0d95aaaa 	ld      @R9,#%aaaa
29EC	209d		ldb     RL5,@R9
29EE	5f002474 	call    %2474
29F2	3ad700f0 	soutb  %00f0,RL5
29F6	609d0001 	ldb     RL5,%0001(R9)
29FA	a16a		ld      R10,R6
29FC	010a0000 	add     R10,#%0000
2A00	3aa10b98 	sinib  @R9,@R10,R11
2A04	ab90		dec     R9,#1
2A06	209c		ldb     RL4,@R9
2A08	a167		ld      R7,R6
2A0A	5f002374 	call    %2374
2A0E	a615		bitb    RH1,#5
2A10	eeee		jr      nz,%29ee
2A12	5f002474 	call    %2474
2A16	3ad701f0 	soutb  %01f0,RL5
2A1A	609d0001 	ldb     RL5,%0001(R9)
2A1E	a16a		ld      R10,R6
2A20	010a0100 	add     R10,#%0100
2A24	3aa10b98 	sinib  @R9,@R10,R11
2A28	ab90		dec     R9,#1
2A2A	209c		ldb     RL4,@R9
2A2C	060d3f3f 	andb    RL5,#%3f
2A30	c701		ldb     RH7,#%01
2A32	5f002374 	call    %2374
2A36	a615		bitb    RH1,#5
2A38	eeec		jr      nz,%2a12
2A3A	5f002474 	call    %2474
2A3E	3ad720f0 	soutb  %20f0,RL5
2A42	609d0001 	ldb     RL5,%0001(R9)
2A46	a16a		ld      R10,R6
2A48	010a2000 	add     R10,#%2000
2A4C	3aa10b98 	sinib  @R9,@R10,R11
2A50	ab90		dec     R9,#1
2A52	209c		ldb     RL4,@R9
2A54	060d0303 	andb    RL5,#%03
2A58	c720		ldb     RH7,#%20
2A5A	5f002374 	call    %2374
2A5E	a615		bitb    RH1,#5
2A60	eeec		jr      nz,%2a3a
2A62	0d955555 	ld      @R9,#%5555
2A66	f0be		djnz    R0,%29ec
2A68	a614		bitb    RH1,#4
2A6A	eeb4		jr      nz,%29d4
2A6C	a921		inc     R2,#2
2A6E	0b020006 	cp      R2,#%0006
2A72	5e0e28f4 	jp      nz,%28f4
2A76	4d057e4e0001 	ld      %7e4e,#%0001

2A7C	21080304 	ld      R8,#%0304		; test #0304
2A80	4d057e460094 	ld      %7e46,#%0094
2A86	8c18		clrb    RH1
2A88	210420ae 	ld      R4,#%20ae
2A8C	2106ffd1 	ld      R6,#%ffd1
2A90	21000004 	ld      R0,#%0004
2A94	9747		pop     R7,@R4
2A96	5f002474 	call    %2474
2A9A	3e6f		outb    @R6,RL7
2A9C	3c6d		inb     RL5,@R6
2A9E	8adf		cpb     RL7,RL5
2AA0	e606		jr      z,%2aae
2AA2	5f0023e8 	call    %23e8
2AA6	a615		bitb    RH1,#5
2AA8	eef6		jr      nz,%2a96
2AAA	a617		bitb    RH1,#7
2AAC	ee01		jr      nz,%2ab0
2AAE	f08e		djnz    R0,%2a94
2AB0	a614		bitb    RH1,#4
2AB2	eee1		jr      nz,%2a76

			; -----

2AB4	5f0023ae 	call    %23ae			; "MONITOR POW"
2AB8	21080305 	ld      R8,#%0305		; test #0305

2ABC	2102a000 	ld      R2,#%a000
2AC0	3a26ffd1 	outb	%ffd1,RH2		; set user break register

2AC4	21032072 	ld      R3,#%2072		; MMU 1: limit 64K
2AC8	a134		ld      R4,R3			; MMU 2: limit 64K
2ACA	21052076 	ld      R5,#%2076		; MMU 3: limit 256
2ACE	5f001ade 	call    %1ade			; setup segment descriptors

2AD2	2103b000 	ld      R3,#%b000		; offset to test
2AD6	c004		ldb     RH0,#%04
2AD8	ccd2		ldb     RL4,#%d2		; MSEN, TRNS, MST, ID=2
2ADA	5f001b22 	call    %1b22			; test stack MMU limit traps
2ADE	a614		bitb    RH1,#4
2AE0	eeeb		jr      nz,%2ab8

			; -----

2AE2	5f0023ae 	call    %23ae			; "MONITOR POWE"
2AE6	21080306 	ld      R8,#%0306		; test #0306

2AEA	21039000 	ld      R3,#%9000		; offset to test
2AEE	8c08		clrb    RH0
2AF0	ccd1		ldb     RL4,#%d1		; MSEN, TRNS, MST, ID=1
2AF2	5f001b22 	call    %1b22			; test data MMU limit traps
2AF6	a614		bitb    RH1,#4
2AF8	eef6		jr      nz,%2ae6

			; -----

2AFA	5f0023ae 	call    %23ae			; "MONITOR POWER "
2AFE	21080307 	ld      R8,#%0307		; test #0307

2B02	2103b000 	ld      R3,#%b000		; offset to test
2B06	21032072 	ld      R3,#%2072
2B0A	2104207a 	ld      R4,#%207a
2B0E	a135		ld      R5,R3
2B10	5f001ade 	call    %1ade

2B14	8c08		clrb    RH0
2B16	ccd2		ldb     RL4,#%d2
2B18	5f001b22 	call    %1b22			; test stack MMU limit traps
2B1C	a614		bitb    RH1,#4
2B1E	eeef		jr      nz,%2afe

			; -----

2B20	5f0023ae 	call    %23ae			; "MONITOR POWER U"
2B24	21080308 	ld      R8,#%0308		; test #0308

2B28	21039000 	ld      R3,#%9000		; offset to test
2B2C	c002		ldb     RH0,#%02
2B2E	ccd1		ldb     RL4,#%d1		; MSEN, TRNS, MST, ID=1
2B30	5f001b22 	call    %1b22
2B34	a614		bitb    RH1,#4
2B36	eef6		jr      nz,%2b24

			; -----

2B38	5f0023ae 	call    %23ae			; "MONITOR POWER UP "
2B3C	21080309 	ld      R8,#%0309		; test #0309
2B40	2103b000 	ld      R3,#%b000
2B44	21032072 	ld      R3,#%2072
2B48	2104207e 	ld      R4,#%207e
2B4C	a145		ld      R5,R4
2B4E	5f001ade 	call    %1ade
2B52	c004		ldb     RH0,#%04
2B54	ccd2		ldb     RL4,#%d2
2B56	5f001b22 	call    %1b22
2B5A	a614		bitb    RH1,#4
2B5C	eeef		jr      nz,%2b3c

			; -----

2B5E	5f0023ae 	call    %23ae			; "MONITOR POWER UP D"
2B62	21080310 	ld      R8,#%0310		; test #0310
2B66	21039000 	ld      R3,#%9000
2B6A	c002		ldb     RH0,#%02
2B6C	ccd1		ldb     RL4,#%d1
2B6E	5f001b22 	call    %1b22
2B72	a614		bitb    RH1,#4
2B74	eef6		jr      nz,%2b62

			; -----

2B76	5f0023ae 	call    %23ae			; "MONITOR POWER UP DI"
2B7A	21080311 	ld      R8, #%0311		; test #0311

2B7E	4d057e46009a 	ld      %7e46,#%009a
2B84	8c18		clrb    RH1
2B86	a411		setb    RH1, #1

2B88	2102ffff 	ld      R2, #%ffff
2B8C	3aa6ffd1 	outb	%ffd1, RL2		; User Break Register

2B90	21032072 	ld      R3, #%2072		; limit 64K
2B94	a134		ld      R4, R3
2B96	a135		ld      R5, R3
2B98	5f001ade 	call    %1ade			; preset SDRs

2B9C	8d28		clr     R2			; segment: start at 0
2B9E	21039000 	ld      R3, #%9000		; offset
2BA2	2105aaaa 	ld      R5, #%aaaa		; test pattern
2BA6	210600fa 	ld      R6, #%00fa		; MMU I/O address
2BAA	210000d1 	ld      R0, #%00d1		; MMU mode

2BAE	5f002474 	call    %2474

2BB2	0d350000 	ld      @R3, #%0000		; clear test location
2BB6	4d087e4c 	clr     %7e4c

2BBA	cc06		ldb     RL4, #%06		; MMUs on, segmented user mode
2BBC	93f4		push    @R15, R4
2BBE	8c48		clrb    RH4
2BC0	3b46ffc1 	out	%ffc1, R4		; SCR
2BC4	97f4		pop     R4, @R15
2BC6	3a8700fa 	soutb	%00fa, RL0		; enable data MMU

2BCA	7d92		ldctl   R9, FCW
2BCC	a59f		set     R9, #15
2BCE	4d047e4e 	test    %7e4e
2BD2	e601		jr      z, %2bd6
2BD4	a39e		res     R9, #14
2BD6	7d9a		ldctl   FCW, R9

			; segmented user mode here

2BD8	2f25		ld      @@R2, R5		; write pattern to test location via MMU 2
2BDA	7f02		sc      #%02

			; non-segmented user mode here

			; Next instruction should trap because it's a
			; privileged instruction

2BDC	3a0700fa 	soutb	%00fa, RH0		; disable data MMU

			; non-segmented system mode here

2BE0	93f0		push    @R15, R0
2BE2	8c88		clrb    RL0
2BE4	ac80		exb     RH0, RL0
2BE6	3b06ffc1 	out	%ffc1, R0
2BEA	97f0		pop     R0, @R15

2BEC	a02f		ldb     RL7, RH2
2BEE	4d047e4c 	test    %7e4c
2BF2	ee0e		jr      nz, %2c10

2BF4	5f002474 	call    %2474
2BF8	2134		ld      R4, @R3
2BFA	5f002374 	call    %2374
2BFE	a615		bitb    RH1, #5
2C00	eef9		jr      nz, %2bf4
2C02	a617		bitb    RH1,#7
2C04	ee10		jr      nz, %2c26

2C06	a820		incb    RH2, #1			; next segment
2C08	0a024040 	cpb     RH2, #%40		; done?
2C0C	eed0		jr      nz, %2bae		; no, loop

2C0E	e80b		jr      %2c26

2C10	21080312 	ld      R8,#%0312		; test #0312
2C14	4d057e460098 	ld      %7e46,#%0098
2C1A	61057e52 	ld      R5,%7e52
2C1E	5f0023e8 	call    %23e8

2C22	a615		bitb    RH1,#5
2C24	eec4		jr      nz,%2bae

2C26	a614		bitb    RH1,#4
2C28	eea8		jr      nz,%2b7a

			; -----

2C2A	5f0023ae 	call    %23ae			; "MONITOR POWER UP DIA"
2C2E	21080313 	ld      R8,#%0313		; test #0313
2C32	4d057e46009a 	ld      %7e46,#%009a
2C38	8c18		clrb    RH1
2C3A	a411		setb    RH1,#1
2C3C	210000d2 	ld      R0,#%00d2
2C40	3a06ffd1 	outb   %ffd1,Rh0
2C44	21020040 	ld      R2,#%0040
2C48	210600f6 	ld      R6,#%00f6
2C4C	5f002474 	call    %2474
2C50	0d350000 	ld      @R3,#%0000
2C54	4d087e4c 	clr     %7e4c
2C58	cc06		ldb     RL4,#%06
2C5A	93f4		push    @R15,R4
2C5C	8c48		clrb    RH4
2C5E	3b46ffc1 	out    %ffc1,R4
2C62	97f4		pop     R4,@R15
2C64	3a8700f6 	soutb  %00f6,RL0
2C68	7d92		ldctl   R9,FCW
2C6A	a59f		set     R9,#15
2C6C	4d047e4e 	test    %7e4e
2C70	e601		jr      z,%2c74
2C72	a39e		res     R9,#14
2C74	7d9a		ldctl   FCW,R9
2C76	2f25		ld      @R2,R5
2C78	7f02		sc      #%02
2C7A	3a0700f6 	soutb  %00f6,Rh0
2C7E	93f0		push    @R15,R0
2C80	8c88		clrb    RL0
2C82	ac80		exb     RH0,RL0
2C84	3b06ffc1 	out    %ffc1,R0
2C88	97f0		pop     R0,@R15
2C8A	a02f		ldb     RL7,Rh2
2C8C	4d047e4c 	test    %7e4c
2C90	ee0e		jr      nz,%2cae
2C92	5f002474 	call    %2474
2C96	2134		ld      R4,@R3
2C98	5f002374 	call    %2374
2C9C	a615		bitb    RH1,#5
2C9E	eef9		jr      nz,%2c92
2CA0	a617		bitb    RH1,#7
2CA2	ee10		jr      nz,%2cc4
2CA4	a820		incb    RH2,#1
2CA6	0a028080 	cpb     RH2,#%80
2CAA	eed0		jr      nz,%2c4c
2CAC	e80b		jr      %2cc4

2CAE	21080314 	ld      R8,#%0314		; test #0314
2CB2	4d057e460098 	ld      %7e46,#%0098
2CB8	61057e52 	ld      R5,%7e52
2CBC	5f0023e8 	call    %23e8
2CC0	a615		bitb    RH1,#5
2CC2	eeb5		jr      nz,%2c2e
2CC4	a614		bitb    RH1,#4
2CC6	eeb3		jr      nz,%2c2e
2CC8	5f0023ae 	call    %23ae
2CCC	4d087e4e 	clr     %7e4e
2CD0	7d95		ldctl   R9,psap
2CD2	4d9500261a2e 	ld      %0026(R9),#%1a2e
2CD8	21042e0a 	ld      R4,#%2e0a
2CDC	21059000 	ld      R5,#%9000
2CE0	21030004 	ld      R3,#%0004
2CE4	ba410350 	ldirb  @R5,@R4,R3
2CE8	210000d0 	ld      R0,#%00d0
2CEC	210600fc 	ld      R6,#%00fc
2CF0	21030006 	ld      R3,#%0006
2CF4	bd20		ldk     R2,#0
2CF6	a12a		ld      R10,R2
2CF8	210b2d26 	ld      R11,#%2d26
2CFC	210d9000 	ld      R13,#%9000
2D00	8c18		clrb    RH1

2D02	21080315 	ld      R8,#%0315		; test #0315
2D06	4d057e46009a 	ld      %7e46,#%009a
2D0C	5f002474 	call    %2474
2D10	a12c		ld      R12,R2
2D12	4d087e4c 	clr     %7e4c
2D16	2104aaaa 	ld      R4,#%aaaa
2D1A	3b36ffc1 	out    %ffc1,R3
2D1E	3a8700fc 	soutb  %00fc,RL0
2D22	7f01		sc      #%01
2D24	1ec8		jp      @R12
2D26	7f02		sc      #%02
2D28	3a0700fc 	soutb  %00fc,Rh0
2D2C	93f3		push    @R15,R3
2D2E	8d38		clr     R3
2D30	3b36ffc1 	out    %ffc1,R3
2D34	97f3		pop     R3,@R15
2D36	a02f		ldb     RL7,Rh2
2D38	bd50		ldk     R5,#0
2D3A	a411		setb    RH1,#1
2D3C	5f002374 	call    %2374
2D40	a615		bitb    RH1,#5
2D42	eedf		jr      nz,%2d02
2D44	a617		bitb    RH1,#7
2D46	ee14		jr      nz,%2d70
2D48	4d047e4c 	test    %7e4c
2D4C	e60d		jr      z,%2d68

2D4E	21080316 	ld      R8,#%0316		; test #0316
2D52	4d057e460098 	ld      %7e46,#%0098
2D58	61057e52 	ld      R5,%7e52
2D5C	5f0023e8 	call    %23e8
2D60	a615		bitb    RH1,#5
2D62	eecf		jr      nz,%2d02
2D64	a617		bitb    RH1,#7
2D66	ee04		jr      nz,%2d70
2D68	a820		incb    RH2,#1
2D6A	0a024040 	cpb     RH2,#%40
2D6E	eec9		jr      nz,%2d02
2D70	a614		bitb    RH1,#4
2D72	eeac		jr      nz,%2ccc

2D74	5f0023ae 	call    %23ae
2D78	21080317 	ld      R8,#%0317		; test #0317
2D7C	4d057e460090 	ld      %7e46,#%0090
2D82	8c18		clrb    RH1
2D84	5f002474 	call    %2474
2D88	21032076 	ld      R3,#%2076
2D8C	21042072 	ld      R4,#%2072
2D90	a145		ld      R5,R4
2D92	5f001ade 	call    %1ade
2D96	210600fc 	ld      R6,#%00fc
2D9A	21030006 	ld      R3,#%0006
2D9E	bd20		ldk     R2,#0
2DA0	a12a		ld      R10,R2
2DA2	210b2dbc 	ld      R11,#%2dbc
2DA6	210d9000 	ld      R13,#%9000
2DAA	a12c		ld      R12,R2
2DAC	4d087e4c 	clr     %7e4c
2DB0	3b36ffc1 	out    %ffc1,R3
2DB4	3a8700fc 	soutb  %00fc,RL0
2DB8	7f01		sc      #%01
2DBA	1ec8		jp      @R12
2DBC	7f02		sc      #%02
2DBE	3a0700fc 	soutb  %00fc,Rh0
2DC2	93f3		push    @R15,R3
2DC4	8d38		clr     R3
2DC6	3b36ffc1 	out    %ffc1,R3
2DCA	97f3		pop     R3,@R15
2DCC	a02f		ldb     RL7,Rh2
2DCE	4d047e4c 	test    %7e4c
2DD2	ee06		jr      nz,%2de0
2DD4	5f0023e8 	call    %23e8
2DD8	a615		bitb    RH1,#5
2DDA	eee7		jr      nz,%2daa
2DDC	a617		bitb    RH1,#7
2DDE	ee04		jr      nz,%2de8
2DE0	a820		incb    RH2,#1
2DE2	0a024040 	cpb     RH2,#%40
2DE6	eee1		jr      nz,%2daa
2DE8	a614		bitb    RH1,#4
2DEA	eec6		jr      nz,%2d78
2DEC	7d95		ldctl   R9,psap
2DEE	61047e54 	ld      R4,%7e54
2DF2	6f940026 	ld      %0026(R9),R4
2DF6	61047e58 	ld      R4,%7e58
2DFA	6f940016 	ld      %0016(R9),R4
2DFE	8d08		clr     r0
2E00	3b06ffc1 	out    %ffc1,R0
2E04	3b0700f0 	sout   %00f0,R0
2E08	9e08		ret     
2E0A	8d48		clr     R4
2E0C	1ea8		jp      @R10
2E0E	21030006 	ld      R3,#%0006
2E12	3b36ffc1 	out    %ffc1,R3
2E16	21030080 	ld      R3,#%0080
2E1A	3ab700fc 	soutb  %00fc,RL3
2E1E	3a3700fa 	soutb  %00fa,RH3
2E22	3a3700f6 	soutb  %00f6,RH3
2E26	8d38		clr     R3
2E28	3b36ffc1 	out    %ffc1,R3

			; -----

2E2C	140403000000 	ldl     RR4,#%03000000
2E32	21064000 	ld      R6,#%4000
2E36	5f001bf2 	call    %1bf2

2E3A	5f0023ae 	call    %23ae

			; test cache with relocated code

2E3E	21060300 	ld      R6, #%0300		; relocation segment
2E42	21024000 	ld      R2, #%4000		; (cache size?)
2E46	5f001c76 	call    %1c76

2E4A	21080400 	ld      R8, #%0400		; test #0400
2E4E	bd61		ldk     R6, #1			; port address
2E50	21031000 	ld      R3, #%1000		; word count
2E54	cf81		ldb     RL7, #%81		; compare pattern
2E56	5f001c16 	call    %1c16

			; -----

2E5A	21080401 	ld      R8,#%0401		; test #0401
2E5E	bd63		ldk     R6,#3			; port address
2E60	21031000 	ld      R3,#%1000		; word count
2E64	cf00		ldb     RL7, #%00		; compare pattern
2E66	5f001c16 	call    %1c16

			; -----

2E6A	bd73		ldk     R7, #3			; segment
2E6C	bd60		ldk     R6, #0			; offset
2E6E	21052000 	ld      R5, #%2000		; word count
2E72	21045555 	ld      R4, #%5555		; fill pattern
2E76	5f0019b4 	call    %19b4

2E7A	5f0023ae 	call    %23ae			; "MONITOR POWER UP DIAGNOS"
2E7E	21080402 	ld      R8,#%0402		; test #0402

2E82	4d057e4600ea 	ld      %7e46,#%00ea
2E88	8c18		clrb    RH1
2E8A	bd20		ldk     R2,#0
2E8C	bd38		ldk     R3,#8
2E8E	bd41		ldk     R4,#1
2E90	5f001c00 	call    %1c00

2E94	21060300 	ld      R6,#%0300		; segment
2E98	21094000 	ld      R9,#%4000		; size
2E9C	5f001cfe 	call    %1cfe
2EA0	0b074000 	cp      R7,#%4000
2EA4	e607		jr      z,%2eb4

2EA6	4d057e80ffff 	ld      %7e80,#%ffff
2EAC	a175		ld      R5,R7
2EAE	a412		setb    RH1,#2
2EB0	5f0023e8 	call    %23e8		; error

2EB4	5f0023ae 	call    %23ae			; "MONITOR POWER UP DIAGNOST"
2EB8	bd20		ldk     R2,#0
2EBA	bd38		ldk     R3,#8
2EBC	bd41		ldk     R4,#1
2EBE	5f001c00 	call    %1c00
2EC2	21060300 	ld      R6,#%0300
2EC6	210a4000 	ld      R10,#%4000
2ECA	5f001cba 	call    %1cba

2ECE	21080403 	ld      R8,#%0403		; test #0403
2ED2	21060021 	ld      R6,#%0021
2ED6	21030ff8 	ld      R3,#%0ff8
2EDA	cf81		ldb     RL7,#%81
2EDC	5f001c16 	call    %1c16

2EE0	21080404 	ld      R8,#%0404		; test #0404
2EE4	4d057e4600ea 	ld      %7e46,#%00ea
2EEA	8c18		clrb    RH1
2EEC	bd20		ldk     R2,#0
2EEE	bd38		ldk     R3,#8
2EF0	bd41		ldk     R4,#1
2EF2	5f001c00 	call    %1c00
2EF6	21060300 	ld      R6,#%0300
2EFA	21094000 	ld      R9,#%4000
2EFE	5f001d48 	call    %1d48
2F02	0b074000 	cp      R7,#%4000
2F06	e609		jr      z,%2f1a
2F08	4d057e80ffff 	ld      %7e80,#%ffff
2F0E	a175		ld      R5,R7
2F10	8d50		com     R5
2F12	8d40		com     R4
2F14	a412		setb    RH1,#2

2F16	5f0023e8 	call    %23e8
2F1A	21080405 	ld      R8,#%0405		; test #0405
2F1E	140603000032 	ldl     RR6,#%03000032
2F24	21024000 	ld      R2,#%4000
2F28	5f001c46 	call    %1c46
2F2C	210200ff 	ld      R2,#%00ff
2F30	21031000 	ld      R3,#%1000
2F34	bd41		ldk     R4,#1
2F36	5f001c00 	call    %1c00
2F3A	bd20		ldk     R2,#0
2F3C	21031000 	ld      R3,#%1000
2F40	bd43		ldk     R4,#3
2F42	5f001c00 	call    %1c00
2F46	140403000000 	ldl     RR4,#%03000000
2F4C	21064000 	ld      R6,#%4000
2F50	5f001bf2 	call    %1bf2
2F54	5f0023ae 	call    %23ae
2F58	21060300 	ld      R6,#%0300
2F5C	21024000 	ld      R2,#%4000
2F60	5f001c76 	call    %1c76

2F64	21080410 	ld      R8,#%0410		; test #0410
2F68	bd63		ldk     R6,#3
2F6A	21031000 	ld      R3,#%1000
2F6E	cf81		ldb     RL7,#%81
2F70	5f001c16 	call    %1c16

2F74	21080411 	ld      R8,#%0411		; test #0411
2F78	bd61		ldk     R6,#1
2F7A	21031000 	ld      R3,#%1000
2F7E	cfff		ldb     RL7,#%ff
2F80	5f001c16 	call    %1c16
2F84	bd73		ldk     R7,#3
2F86	bd60		ldk     R6,#0
2F88	21052000 	ld      R5,#%2000
2F8C	21045555 	ld      R4,#%5555
2F90	5f0019b4 	call    %19b4

2F94	5f0023ae 	call    %23ae
2F98	21080412 	ld      R8,#%0412		; test #0412
2F9C	4d057e4600ea 	ld      %7e46,#%00ea
2FA2	8c18		clrb    RH1
2FA4	bd20		ldk     R2,#0
2FA6	bd38		ldk     R3,#8
2FA8	bd43		ldk     R4,#3
2FAA	5f001c00 	call    %1c00
2FAE	21060300 	ld      R6,#%0300
2FB2	21094000 	ld      R9,#%4000
2FB6	5f001cfe 	call    %1cfe
2FBA	0b074000 	cp      R7,#%4000
2FBE	e607		jr      z,%2fce
2FC0	4d057e80ffff 	ld      %7e80,#%ffff
2FC6	a175		ld      R5,R7
2FC8	a412		setb    RH1,#2
2FCA	5f0023e8 	call    %23e8
2FCE	5f0023ae 	call    %23ae
2FD2	bd20		ldk     R2,#0
2FD4	bd38		ldk     R3,#8
2FD6	bd43		ldk     R4,#3
2FD8	5f001c00 	call    %1c00
2FDC	21060300 	ld      R6,#%0300
2FE0	210a4000 	ld      R10,#%4000
2FE4	5f001cba 	call    %1cba

2FE8	21080413 	ld      R8,#%0413		; test #0413
2FEC	21060023 	ld      R6,#%0023
2FF0	21030ff8 	ld      R3,#%0ff8
2FF4	cf81		ldb     RL7,#%81
2FF6	5f001c16 	call    %1c16
2FFA	21080414 	ld      R8,#%0414
2FFE	4d057e4600ea 	ld      %7e46,#%00ea
3004	8c18		clrb    RH1
3006	bd20		ldk     R2,#0
3008	bd38		ldk     R3,#8
300A	bd43		ldk     R4,#3
300C	5f001c00 	call    %1c00
3010	21060300 	ld      R6,#%0300
3014	21094000 	ld      R9,#%4000
3018	5f001d48 	call    %1d48
301C	0b074000 	cp      R7,#%4000
3020	e609		jr      z,%3034
3022	4d057e80ffff 	ld      %7e80,#%ffff
3028	a175		ld      R5,R7
302A	8d50		com     R5
302C	8d40		com     R4
302E	a412		setb    RH1,#2

3030	5f0023e8 	call    %23e8
3034	21080415 	ld      R8,#%0415		; test #0415
3038	140603000032 	ldl     RR6,#%03000032
303E	21024000 	ld      R2,#%4000
3042	5f001c46 	call    %1c46
3046	bd20		ldk     R2,#0
3048	21031000 	ld      R3,#%1000
304C	bd41		ldk     R4,#1
304E	5f001c00 	call    %1c00
3052	bd20		ldk     R2,#0
3054	21031000 	ld      R3,#%1000
3058	bd43		ldk     R4,#3
305A	5f001c00 	call    %1c00
305E	9e08		ret     
3060	00045744 	addb    RH4,#%44
3064	430d0004 	sub     R13,%0004
3068	4d44430d 	test    %430d(R4)
--------------------------------------------------------------------------------

306C	0004534d 	.ascii	4, "SMC", %0D
3072	0004 		.ascii	4, "MTC", %0D
3078	00045443 	.ascii	4, "TCC", %0D
307E	0004 		.ascii	4, "FPP", %0D

3084	00035353 	.ascii	3, "SSB"
308A	0003		.ascii	3, "ICP"
--------------------------------------------------------------------------------

3090	ff47		dbjnz   RL7,%3004
3092	ff07		dbjnz   RL7,%3086
3094	fe47		dbjnz   RL6,%3008
3096	fe07		dbjnz   RL6,%308a
3098	fd47		dbjnz   RL5,%300c
309A	fd07		dbjnz   RL5,%308e
309C	fc47		dbjnz   RL4,%3010
309E	fc07		dbjnz   RL4,%3092
30A0	ef01		jr      nc,%30a4
30A2	ef03		jr      nc,%30aa
30A4	ef05		jr      nc,%30b0
30A6	ef07		jr      nc,%30b6
30A8	ef09		jr      nc,%30bc
30AA	ef0b		jr      nc,%30c2
30AC	ef0d		jr      nc,%30c8
30AE	ef0f		jr      nc,%30ce
--------------------------------------------------------------------------------
30B0	21081000 	ld      R8,#%1000
30B4	4d057e460000 	ld      %7e46,#%0000
30BA	8c18		clrb    RH1
30BC	21078001 	ld      R7,#%8001
30C0	cea5		ldb     RL6,#%a5
30C2	3e7e		outb    @R7,RL6
30C4	3c76		inb     RH6,@R7
30C6	8ae6		cpb     RH6,RL6
30C8	e605		jr      z,%30d4
30CA	4c017e3c0000 	cpb     %7e3c,#%00
30D0	9e0e		ret     nz
30D2	e81f		jr      %3112
30D4	91f0		pushl   @R15,Rr0
30D6	21023060 	ld      R2,#%3060
30DA	7f0c		sc      #%0c
30DC	95f0		popl    RR0,@R15
30DE	4c017e3c0000 	cpb     %7e3c,#%00
30E4	9e0e		ret     nz
30E6	21081002 	ld      R8,#%1002
30EA	3a168001 	outb   %8001,Rh1
30EE	21078000 	ld      R7,#%8000
30F2	21068010 	ld      R6,#%8010
30F6	ca04		ldb     RL2,#%04
30F8	dff1		calr    %3118
30FA	ee01		jr      nz,%30fe
30FC	9e08		ret     
30FE	4c017e3c0000 	cpb     %7e3c,#%00
3104	e601		jr      z,%3108
3106	a412		setb    RH1,#2
3108	4d057e460055 	ld      %7e46,#%0055
310E	5f00316c 	call    %316c
3112	5f0023e8 	call    %23e8
3116	9e08		ret     
3118	3c6d		inb     RL5,@R6
311A	a0d5		ldb     RH5,RL5
311C	06050303 	andb    RH5,#%03
3120	0a050303 	cpb     RH5,#%03
3124	e613		jr      z,%314c
3126	21040007 	ld      R4,#%0007
312A	dfec		calr    %3154
312C	e611		jr      z,%3150
312E	3e7a		outb    @R7,RL2
3130	21040007 	ld      R4,#%0007
3134	dff1		calr    %3154
3136	e60c		jr      z,%3150
3138	21040003 	ld      R4,#%0003
313C	dff5		calr    %3154
313E	e608		jr      z,%3150
3140	3c6d		inb     RL5,@R6
3142	a6d1		bitb    RL5,#1
3144	ee05		jr      nz,%3150
3146	a6d2		bitb    RL5,#2
3148	ee03		jr      nz,%3150
314A	9e08		ret     
314C	21081001 	ld      R8,#%1001
3150	8d43		resflg  z
3152	9e08		ret     
3154	91f2		pushl   @R15,RR2
3156	21000fa0 	ld      R0,#%0fa0
315A	3c6a		inb     RL2,@R6
315C	26040a00 	bitb    RL2,R4
3160	ee03		jr      nz,%3168
3162	5f003590 	call    %3590
3166	f087		djnz    R0,%315a
3168	95f2		popl    RR2,@R15
316A	9e08		ret     
316C	ca00		ldb     RL2,#%00
316E	3aa6800c 	outb   %800c,RL2
3172	3aa68001 	outb   %8001,RL2
3176	21028000 	ld      R2,#%8000
317A	3aa6800a 	outb   %800a,RL2
317E	3a26800b 	outb   %800b,Rh2
3182	ca03		ldb     RL2,#%03
3184	5f003118 	call    %3118
3188	ee09		jr      nz,%319c
318A	600e8000 	ldb     RL6,%8000
318E	600f8001 	ldb     RL7,%8001
3192	600d8002 	ldb     RL5,%8002
3196	600c8003 	ldb     RL4,%8003
319A	9e08		ret     
319C	3c6d		inb     RL5,@R6
319E	4d057e460004 	ld      %7e46,#%0004
31A4	9e08		ret     
31A6	4d057e460000 	ld      %7e46,#%0000
31AC	8c18		clrb    RH1
31AE	210a8004 	ld      R10,#%8004
31B2	0ca5ffff 	ldb     @R10,#%ff
31B6	a1ab		ld      R11,R10
31B8	a9b0		inc     R11,#1
31BA	210c0042 	ld      R12,#%0042
31BE	baa10cb0 	ldirb  @R11,@R10,R12
31C2	210df1f1 	ld      R13,#%f1f1
31C6	3bd680f0 	out    %80f0,R13
31CA	dfa5		calr    %3282
31CC	bdd0		ldk     R13,#0
31CE	3bd680f0 	out    %80f0,R13
31D2	dfa9		calr    %3282
31D4	210b8004 	ld      R11,#%8004
31D8	3bb680f0 	out    %80f0,R11
31DC	210a00b4 	ld      R10,#%00b4
31E0	dfb0		calr    %3282
31E2	0db15555 	cp      @R11,#%5555
31E6	ee01		jr      nz,%31ea
31E8	fa85		djnz    R10,%31e0
31EA	21083000 	ld      R8,#%3000
31EE	0db1ffff 	cp      @R11,#%ffff
31F2	ee05		jr      nz,%31fe
31F4	4c017e3c0101 	cpb     %7e3c,#%01
31FA	9e0e		ret     nz
31FC	e83f		jr      %327c
31FE	93f0		push    @R15,R0
3200	21023066 	ld      R2,#%3066
3204	7f0c		sc      #%0c
3206	97f0		pop     R0,@R15
3208	21083001 	ld      R8,#%3001
320C	0db15555 	cp      @R11,#%5555
3210	e630		jr      z,%3272
3212	0db1aaaa 	cp      @R11,#%aaaa
3216	ee03		jr      nz,%321e
3218	21083003 	ld      R8,#%3003
321C	e82a		jr      %3272
321E	0db4		test    @R11
3220	e607		jr      z,%3230
3222	21083002 	ld      R8,#%3002
3226	21b6		ld      R6,@R11
3228	4d057e460080 	ld      %7e46,#%0080
322E	e821		jr      %3272
3230	210a1d1d 	ld      R10,#%1d1d
3234	3ba680f0 	out    %80f0,R10
3238	dfdc		calr    %3282
323A	27b9		bit     @R11,#9
323C	ee03		jr      nz,%3244
323E	610a8010 	ld      R10,%8010
3242	e802		jr      %3248
3244	610a8014 	ld      R10,%8014
3248	b3a1fff8 	srl     R10,#8
324C	a7a4		bit     R10,#4
324E	9e0e		ret     nz
3250	070a001f 	and     R10,#%001f
3254	9e06		ret     z
3256	4c017e3c0101 	cpb     %7e3c,#%01
325C	9e0e		ret     nz
325E	a1a8		ld      R8,R10
3260	0b080007 	cp      R8,#%0007
3264	e903		jr      ge,%326c
3266	01083003 	add     R8,#%3003
326A	e803		jr      %3272
326C	01083009 	add     R8,#%3009
3270	e800		jr      %3272
3272	4c017e3c0101 	cpb     %7e3c,#%01
3278	e601		jr      z,%327c
327A	a412		setb    RH1,#2
327C	5f0023e8 	call    %23e8
3280	9e08		ret     
3282	bdd8		ldk     R13,#8
3284	210cffff 	ld      R12,#%ffff
3288	fc81		djnz    R12,%3288
328A	fd84		djnz    R13,%3284
328C	9e08		ret     
328E	2101feca 	ld      R1,#%feca
3292	21000019 	ld      R0,#%0019
3296	0d18		clr     @R1
3298	a911		inc     R1,#2
329A	f083		djnz    R0,%3296
329C	4d08fed2 	clr     %fed2
32A0	4d05fed4fee2 	ld      %fed4,#%fee2
--------------------------------------------------------------------------------

; SMD controller test

32A6	210000a0 	ld      R0, #%00a0
32AA	3b067f00 	out	%7f00, R0
32AE	21084000 	ld      R8, #%4000
32B2	4d057e460000 	ld      %7e46, #%0000
32B8	8c18		clrb    RH1
32BA	3b047f00 	in	R0, %7f00
32BE	0b00ffff 	cp      R0, #%ffff
32C2	ee06		jr      nz, %32d0	; not ffff = ok.

32C4	4c017e3c0202 	cpb     %7e3c, #%02	; test boot device code
32CA	9e0e		ret     nz		; return if not SMC
32CC	5e08345c 	jp      %345c		; else error

32D0	2102306c 	ld      R2, #%306c	; "SMC"
32D4	7f0c		sc      #PUTMSG

32D6	210001f4 	ld      R0, #500
32DA	3b247f00 	in	R2, %7f00
32DE	a720		bit     R2, #0		; test busy
32E0	e603		jr      z, %32e8
32E2	5f003590 	call    %3590		; delay
32E6	f087		djnz    R0, %32da

32E8	21084003 	ld      R8, #%4003
32EC	4d057e460080 	ld      %7e46, #%0080
32F2	3b047f00 	in	R0, %7f00
32F6	a700		bit     R0, #0
32F8	e603		jr      z, %3300
32FA	a106		ld      R6, R0
32FC	5e083452 	jp      %3452

3300	2100feca 	ld      R0, #%feca	; address of dispatch table
3304	ac08		exb     RL0, RH0
3306	c804		ldb     RL0, #%04
3308	df54		calr    %3462		; LSB of DTA
330A	2100feca 	ld      R0, #%feca
330E	c805		ldb     RL0, #%05
3310	df58		calr    %3462
3312	8d08		clr     r0
3314	c806		ldb     RL0, #%06
3316	df5b		calr    %3462		; MSB of DTA
3318	2100c207 	ld      R0, #%c207
331C	df5e		calr    %3462		; interrupt vector
331E	21000001 	ld      R0, #%0001
3322	df61		calr    %3462		; read packet addresses

			; -----

3324	21084001 	ld      R8, #%4001	; test # 4001

3328	4d057e460000 	ld      %7e46, #%0000
332E	3b047f00 	in	R0, %7f00
3332	06088080 	andb    RL0, #%80	; ND bit still set?
3336	5e0e3452 	jp      nz, %3452	; yes, error

333A	4c017e3c0202 	cpb     %7e3c, #%02
3340	9e0e		ret     nz		; return if not boot device

			; -----

3342	21084004 	ld      R8, #%4004	; test #4004

3346	4d05fef00000 	ld      %fef0, #%0000	; packet unit number
334C	4d05fee20003 	ld      %fee2, #%0003	; packet command
3352	4d05feca0001 	ld      %feca, #%0001	; packet status GO
3358	21000048 	ld      R0, #%0048
335C	3b067f00 	out	%7f00, R0	; reset IP/IUS and wakeup

3360	21040003 	ld      R4, #%0003
3364	210b1770 	ld      R11, #%1770	; timeout value for interrupt pending

3368	3b047f00 	in	R0, %7f00
336C	a702		bit     R0, #2		; test interrupt pending
336E	e622		jr      z, %33b4	; cleared -> jump

3370	6100fee8 	ld      R0, %fee8	; get packet status
3374	a700		bit     R0, #0		; ready?
3376	ee07		jr      nz, %3386	; yes, jump

3378	4d05fee20003 	ld      %fee2, #%0003
337E	4d05fef20000 	ld      %fef2, #%0000
3384	e80c		jr      %339e

3386	a102		ld      R2, R0
3388	0702000c 	and     R2, #%000c	; check seek error and fault
338C	e615		jr      z, %33b8	; no error -> jump

338E	ab40		dec     R4, #1
3390	e513		jr      mi, %33b8

3392	4d05fee20007 	ld      %fee2, #%0007	; packet command: seek
3398	4d05fef2ffff 	ld      %fef2, #%ffff	; cylinder -1: recalibrate

339E	21000040 	ld      R0, #%0040
33A2	3b067f00 	out	%7f00, R0	; reset IP+IUS
33A6	4d05feca0001 	ld      %feca, #%0001	; packet status GO
33AC	21000048 	ld      R0, #%0048
33B0	3b067f00 	out	%7f00, R0	; wakeup

33B4	df13		calr    %3590		; delay
33B6	fba8		djnz    R11, %3368	; loop

			; drive select ok

33B8	21000040 	ld      R0, #%0040	; reset IP+IUS
33BC	3b067f00 	out	%7f00, R0

33C0	6100fee4 	ld      R0, %fee4	; packet ending status
33C4	0a080000 	cpb     RL0, #%00
33C8	ee44		jr      nz, %3452	; error -> jump

33CA	6100fee8 	ld      R0, %fee8	; packet drive status
33CE	a08c		ldb     RL4, RL0
33D0	07000100 	and     R0, #%0100	; port selected?
33D4	e63e		jr      z, %3452	; no -> error

33D6	a0c8		ldb     RL0, RL4
33D8	07000e00 	and     R0, #%0e00	; other ports selected, too?
33DC	ee3a		jr      nz, %3452	; yes -> error

			; -----

33DE	21084005 	ld      R8, #%4005	; test #4005

33E2	a0c8		ldb     RL0, RL4
33E4	06080101 	andb    RL0, #%01	; drive ready?
33E8	e634		jr      z, %3452	; no -> error

			; -----

33EA	21084006 	ld      R8, #%4006	; test #4006

33EE	a0c8		ldb     RL0, RL4
33F0	06080202 	andb    RL0, #%02	; drive on cylinder?
33F4	e62e		jr      z, %3452	; no -> error

			; -----

33F6	21084007 	ld      R8, #%4007	; test #4007

33FA	a0c8		ldb     RL0, RL4
33FC	06081010 	andb    RL0, #%10	; drive read only?
3400	ee28		jr      nz, %3452	; yes -> error

			; -----

3402	21084008 	ld      R8, #%4008

3406	a0c8		ldb     RL0, RL4
3408	06080808 	andb    RL0, #%08	; drive fault?
340C	ee22		jr      nz, %3452	; yes -> error

			; -----

340E	21084009 	ld      R8, #%4009	; test #4009

3412	060c0404 	andb    RL4, #%04	; seek error?
3416	ee1d		jr      nz, %3452	; yes -> error

			; -----

3418	21084010 	ld      R8, #%4010	; test #4010

341C	4d057e460080 	ld      %7e46, #%0080
3422	21040003 	ld      R4, #%0003	; number of retries

3426	4d08fef0 	clr     %fef0		; unit 0
342A	4d05fee2000f 	ld      %fee2, #%000f	; command: size disk
3430	dfe1		calr    %3470

3432	6106fee4 	ld      R6, %fee4	; ending status
3436	0a0e0000 	cpb     RL6, #%00
343A	9e06		ret     z		; return if no error

343C	4d08fef0 	clr     %fef0		; unit 0
3440	4d05fef2ffff 	ld      %fef2, #%ffff	; recalibrate
3446	4d05fee20007 	ld      %fee2, #%0007	; seek
344C	dfef		calr    %3470

344E	ab40		dec     R4, #1
3450	eeea		jr      nz, %3426
--------------------------------------------------------------------------------

3452	4c017e3c0202 	cpb     %7e3c, #%02
3458	e601		jr      z, %345c
345A	a412		setb    RH1, #2
345C	5f0023e8 	call    %23e8
3460	9e08		ret     
--------------------------------------------------------------------------------

; Send command byte to SMC and wait until not busy

3462	3b067f00 	out	%7f00, R0
3466	3b047f00 	in	R0, %7f00
346A	a700		bit     R0, #0
346C	eefc		jr      nz, %3466
346E	9e08		ret     
--------------------------------------------------------------------------------

3470	4d05feca0001 	ld      %feca, #%0001	; packet GO
3476	21000048 	ld      R0, #%0048
347A	3b067f00 	out	%7f00, R0	; wakeup

347E	3b047f00 	in	R0, %7f00
3482	a702		bit     R0, #2
3484	e6fc		jr      z, %347e	; wait until interrupt pending

3486	4d05feca0000 	ld      %feca, #%0000	; packet IDLE

348C	07003f00 	and     R0, #%3f00	; mask ending status
3490	0b000300 	cp      R0, #%0300	; DMA error?
3494	ee03		jr      nz, %349c	; no, jump
3496	4d05fee40003 	ld      %fee4, #%0003	; packet ending status: DMA error

349C	210b0040 	ld      R11, #%0040	; reset IP+IUS
34A0	3bb67f00 	out	%7f00, R11

34A4	9e08		ret     
--------------------------------------------------------------------------------

34A6	21082000 	ld      R8,#%2000
34AA	4d057e460000 	ld      %7e46,#%0000
34B0	8c18		clrb    RH1
34B2	cda5		ldb     RL5,#%a5
34B4	a0d5		ldb     RH5,RL5
34B6	3b560048 	out    %0048,R5
34BA	3b440048 	in     R4,%0048
34BE	8b45		cp      R5,R4
34C0	9e0e		ret     nz
34C2	93f1		push    @R15,R1
34C4	21023078 	ld      R2,#%3078
34C8	7f0c		sc      #%0c
34CA	97f1		pop     R1,@R15
34CC	5f003570 	call    %3570
34D0	a616		bitb    RH1,#6
34D2	9e0e		ret     nz
34D4	21082002 	ld      R8,#%2002
34D8	4d057e46001a 	ld      %7e46,#%001a
34DE	21070042 	ld      R7,#%0042
34E2	21050010 	ld      R5,#%0010
34E6	a411		setb    RH1,#1
34E8	210000c8 	ld      R0,#%00c8
34EC	3f75		out     @R7,R5
34EE	ab71		dec     R7,#2
34F0	21055555 	ld      R5,#%5555
34F4	3d74		in      R4,@R7
34F6	8b45		cp      R5,R4
34F8	e604		jr      z,%3502
34FA	5f003590 	call    %3590
34FE	f086		djnz    R0,%34f4
3500	e832		jr      %3566
3502	a971		inc     R7,#2
3504	3d74		in      R4,@R7
3506	5f002374 	call    %2374
350A	a616		bitb    RH1,#6
350C	ee2e		jr      nz,%356a
350E	0b07004e 	cp      R7,#%004e
3512	eef7		jr      nz,%3502
3514	06010202 	andb    RH1,#%02
3518	21082003 	ld      R8,#%2003
351C	21070040 	ld      R7,#%0040
3520	2105aaaa 	ld      R5,#%aaaa
3524	3f75		out     @R7,R5
3526	3d74		in      R4,@R7
3528	5f002374 	call    %2374
352C	a616		bitb    RH1,#6
352E	ee1d		jr      nz,%356a
3530	a971		inc     R7,#2
3532	0b07004e 	cp      R7,#%004e
3536	e3f6		jr      ule,%3524
3538	5f003590 	call    %3590
353C	21082004 	ld      R8,#%2004
3540	4d057e4600a8 	ld      %7e46,#%00a8
3546	8c18		clrb    RH1
3548	210a0040 	ld      R10,#%0040
354C	3da6		in      R6,@R10
354E	a660		bitb    RH6,#0
3550	9e06		ret     z
3552	210c004a 	ld      R12,#%004a
3556	210b004e 	ld      R11,#%004e
355A	3dc7		in      R7,@R12
355C	3db5		in      R5,@R11
355E	a6f2		bitb    RL7,#2
3560	e602		jr      z,%3566
3562	21082005 	ld      R8,#%2005
3566	5f0023e8 	call    %23e8
356A	6b007e40 	dec     %7e40,#1
356E	9e08		ret     
3570	21082001 	ld      R8,#%2001
3574	21002ee0 	ld      R0,#%2ee0
3578	3b440040 	in     R4,%0040
357C	a641		bitb    RH4,#1
357E	9e06		ret     z
3580	5f003590 	call    %3590
3584	f087		djnz    R0,%3578
3586	a412		setb    RH1,#2
3588	a416		setb    RH1,#6
358A	5f0023e8 	call    %23e8
358E	9e08		ret     
--------------------------------------------------------------------------------

3590	93f0		push    @R15,R0

3592	2100181e 	ld      R0, #%181e
3596	8d07		nop
3598	f082		djnz    R0, %3596

359A	97f0		pop     R0,@R15
359C	9e08		ret     
--------------------------------------------------------------------------------

359E	4d057e460000 	ld      %7e46,#%0000
35A4	8c18		clrb    RH1
35A6	210aaaaa 	ld      R10,#%aaaa
35AA	3ba61010 	out    %1010,R10
35AE	8da8		clr     R10
35B0	3ba41010 	in     R10,%1010
35B4	0b0aaaaa 	cp      R10,#%aaaa
35B8	9e0e		ret     nz
35BA	93f1		push    @R15,R1
35BC	21023072 	ld      R2,#%3072
35C0	7f0c		sc      #%0c
35C2	97f1		pop     R1,@R15
35C4	9e08		ret     
35C6	4d057e460000 	ld      %7e46,#%0000
35CC	8c18		clrb    RH1
35CE	bd00		ldk     R0,#0
35D0	21047000 	ld      R4,#%7000
35D4	a146		ld      R6,R4
35D6	a860		incb    RH6,#1
35D8	21051234 	ld      R5,#%1234
35DC	2107abcd 	ld      R7,#%abcd
35E0	7f01		sc      #%01
35E2	2f47		ld      @R4,R7
35E4	2f65		ld      @R6,R5
35E6	214a		ld      R10,@R4
35E8	216b		ld      R11,@R6
35EA	7f02		sc      #%02
35EC	8ba7		cp      R7,R10
35EE	e609		jr      z,%3602
35F0	8bb5		cp      R5,R11
35F2	e607		jr      z,%3602
35F4	a841		incb    RH4,#2
35F6	a861		incb    RH6,#2
35F8	a880		incb    RL0,#1
35FA	0a080808 	cpb     RL0,#%08
35FE	9e06		ret     z
3600	e8ef		jr      %35e0
3602	a10d		ld      R13,R0
3604	b3d10001 	sll     R13,#1
3608	61dc30a0 	ld      R12,%30a0(R13)
360C	3ec0		outb    @R12,Rh0
360E	a405		setb    RH0,#5
3610	3ec0		outb    @R12,Rh0
3612	7f01		sc      #%01
3614	214a		ld      R10,@R4
3616	216b		ld      R11,@R6
3618	7f02		sc      #%02
361A	8ba7		cp      R7,R10
361C	e6eb		jr      z,%35f4
361E	8bb5		cp      R5,R11
3620	e6e9		jr      z,%35f4
3622	a205		resb    RH0,#5
3624	3ec0		outb    @R12,Rh0
3626	030f001e 	sub     R15,#%001e
362A	1cf9000e 	ldm     @R15,R0,#15
362E	2102308a 	ld      R2,#%308a
3632	7f0c		sc      #%0c
3634	a089		ldb     RL1,RL0
3636	00093030 	addb    RL1,#%30
363A	7f16		sc      #%16
363C	7f10		sc      #OUTMSG
363E	1cf1000e 	ldm     R0,@R15,#15
3642	010f001e 	add     R15,#%001e
3646	e8d6		jr      %35f4
3648	4d057e460000 	ld      %7e46,#%0000
364E	8c18		clrb    RH1
3650	3b36200e 	out    %200e,R3
3654	3b362000 	out    %2000,R3
3658	21034321 	ld      R3,#%4321
365C	3b362002 	out    %2002,R3
3660	3b36200e 	out    %200e,R3
3664	3b362000 	out    %2000,R3
3668	3b442002 	in     R4,%2002
366C	8b43		cp      R3,R4
366E	9e0e		ret     nz
3670	3b36200e 	out    %200e,R3
3674	2102307e 	ld      R2,#%307e
3678	7f0c		sc      #%0c
367A	9e08		ret     
367C	4d057e460000 	ld      %7e46,#%0000
3682	8c18		clrb    RH1
3684	bd00		ldk     R0,#0
3686	ca02		ldb     RL2,#%02
3688	c2a0		ldb     RH2,#%a0
368A	a10d		ld      R13,R0
368C	b3d10001 	sll     R13,#1
3690	61d43090 	ld      R4,%3090(R13)
3694	3e4a		outb    @R4,RL2
3696	3e42		outb    @R4,Rh2
3698	3e4a		outb    @R4,RL2
369A	3c4b		inb     RL3,@R4
369C	060bf0f0 	andb    RL3,#%f0
36A0	8ab2		cpb     RH2,RL3
36A2	ee02		jr      nz,%36a8
36A4	5f0036b2 	call    %36b2
36A8	a880		incb    RL0,#1
36AA	0a080808 	cpb     RL0,#%08
36AE	9e06		ret     z
36B0	e8ec		jr      %368a
36B2	030f001e 	sub     R15,#%001e
36B6	1cf9000e 	ldm     @R15,R0,#15
36BA	21023084 	ld      R2,#%3084
36BE	7f0c		sc      #%0c
36C0	a089		ldb     RL1,RL0
36C2	00093030 	addb    RL1,#%30
36C6	7f16		sc      #%16
36C8	7f10		sc      #OUTMSG
36CA	1cf1000e 	ldm     R0,@R15,#15
36CE	010f001e 	add     R15,#%001e
36D2	9e08		ret     
--------------------------------------------------------------------------------

; Boot from SMD disk

; *** Boot from disk drive ***

36D4	21024000 	ld      R2, #%4000
36D8	7d2a		ldctl   FCW, R2

36DA	2102f000 	ld      R2, #%f000
36DE	76013710 	lda     R1, %3710
36E2	210e0339 	ld      R14, #%0339
36E6	bb110e20 	ldir	@R2, @R1, R14

			; relocate code to end of segment
36EA	2102f000 	ld      R2, #%f000
36EE	76013710 	lda     R1, %3710
36F2	210e0339 	ld      R14, #%0339
36F6	bb160e2e 	cpsir   @R2, @R1, R14, nz
36FA	e603		jr      z, %3702

36FC	210ff000 	ld      R15, #%f000
3700	1ef8		jp      @R15		; jump to relocated code

			; -----

3702	76021e86 	lda     R2, %1e86	; "UNABLE TO LOAD MEMORY"
3706	5f000692 	call    %0692
370A	7c05		ei      vi
370C	5e08026e 	jp      %026e
--------------------------------------------------------------------------------

; Locations $3710..3D82 will be relocated to $F000..F672

3710	91f6		pushl   @R15, RR6
3712	91f4		pushl   @R15, RR4

3714	6e0efeb4 	ldb     %feb4, RL6	; device code
3718	4d05febc0000 	ld      %febc, #%0000	; unit number

371E	ded6		calr    %3974		; setup controller and size disk

3720	4d08fec2 	clr     %fec2
3724	4d05feb60200 	ld      %feb6, #%0200	; byte count (one sector)
372A	140400000001 	ldl     RR4, #%00000001	
3730	5d04feb8 	ldl     %feb8, RR4
3734	2109f800 	ld      R9, #%f800
3738	140400000000 	ldl     RR4, #%00000000	; logical block number
373E	5d04febe 	ldl     %febe, RR4
3742	ded2		calr    %39a0		; read

3744	1404deadbabe 	ldl     RR4, #%deadbabe	; compare block 0 magic
374A	1094		cpl     RR4, @R9
374C	ee22		jr      nz, %3792

374E	4d05fec2ffff 	ld      %fec2, #%ffff
3754	a993		inc     R9, #4
3756	9594		popl    RR4, @R9	; secondary boot fstype
3758	5790febc 	pop     %febc, @R9	; secondary boot unit
375C	5590febe 	popl    %febe, @R9	; secondary boot offset

3760	100400000001 	cpl     RR4, #%00000001
3766	e60a		jr      z, %377c
3768	100400000002 	cpl     RR4, #%00000002
376E	5e0ef2be 	jp      nz, %f2be	; illegal block size

3772	4d05feb60400 	ld      %feb6, #%0400	; byte count
3778	5d04feb8 	ldl     %feb8, RR4

377C	4d01febc0000 	cp      %febc, #%0000	; unit number
3782	e601		jr      z, %3786
3784	df09		calr    %3974		; setup controller and size disk

3786	4df40000 	test    %0000(R15)	; autoboot flag set?
378A	ee08		jr      nz, %379c	; no -> jump

378C	340e05d6 	ldar    R14, %3d66	; "stand/boot"
3790	e805		jr      %379c

3792	4df40000 	test    %0000(R15)
3796	ee02		jr      nz, %379c
3798	340e05d0 	ldar    R14, %3d6c	; "boot"

379C	21000001 	ld      R0, #%0001
37A0	3b06ffc1 	out	%ffc1, R0	; [disable ROM ?]

			; clear first 16kw
37A4	bd20		ldk     R2, #0
37A6	bd12		ldk     R1, #2
37A8	21033fff 	ld      R3, #%3fff
37AC	0d28		clr     @R2
37AE	bb210310 	ldir	@R1, @R2, R3

37B2	340805ac 	ldar    R8, %3d62	; "> "
37B6	df56		calr    %390c

37B8	210afe28 	ld      R10, #%fe28	; address of file name
37BC	a1ab		ld      R11, R10
37BE	a1bc		ld      R12, R11
37C0	df4e		calr    %3926
37C2	0a080a0a 	cpb     RL0, #%0a	; LF ?
37C6	e60a		jr      z, %37dc
37C8	0a082f2f 	cpb     RL0, #%2f	; '/' ?
37CC	e603		jr      z, %37d4
37CE	2ec8		ldb     @R12, RL0
37D0	a9c0		inc     R12, #1
37D2	e8f6		jr      %37c0

37D4	8bbc		cp      R12, R11
37D6	e6f4		jr      z, %37c0

37D8	df6d		calr    %3900
37DA	e8f1		jr      %37be

37DC	df6f		calr    %3900

37DE	0cb8		clrb    @R11
37E0	bdb2		ldk     R11, #2		; start with inode 2 (root directory)

37E2	dfc9		calr    %3852		; read inode

37E4	0ca4		testb   @R10		; file name present?
37E6	e618		jr      z, %3818	; no, file found -> jump

			; find file
37E8	df7e		calr    %38ee		; read disk block
37EA	ee04		jr      nz, %37f4	; jump if read ok

37EC	34080582 	ldar    R8, %3d72	; "?"
37F0	df73		calr    %390c
37F2	e8df		jr      %37b2		; enter new file name

			; read ok, parse directory
37F4	979b		pop     R11, @R9
37F6	8db4		test    R11		; unused entry?
37F8	e607		jr      z, %3808	; yes -> jump

37FA	bd0e		ldk     R0, #14		; file name length
37FC	a191		ld      R1, R9
37FE	a1a2		ld      R2, R10
3800	ba1600ae 	cpsirb  @R10, @R1, R0, nz
3804	eeee		jr      nz, %37e2	; found, read first file inode

			; no match
3806	a12a		ld      R10, R2
3808	a99d		inc     R9, #14		; skip to next entry
380A	2101f800 	ld      R1, #%f800
380E	4101feb6 	add     R1, %feb6
3812	8b19		cp      R9, R1		; parsed complete block?
3814	efe9		jr      nc, %37e8	; yes, read next disk block
3816	e8ee		jr      %37f4		; no, parse next directory entry

3818	df96		calr    %38ee		; read first disk block
381A	0d91e707 	cp      @R9, #%e707	; non-segmented executable MAGIC ?
381E	ee0c		jr      nz, %3838	; no -> jump

			; N_MAGIC1 found
3820	619b0010 	ld      R11, %0010(R9)
3824	21000018 	ld      R0, #%0018
3828	4190000a 	add     R0, %000a(R9)
382C	8109		add     R9, R0
382E	bda0		ldk     R10, #0
3830	8d02		neg     R0
3832	4100feb6 	add     R0, %feb6	; block size in bytes
3836	e804		jr      %3840

			; 
3838	bdb0		ldk     R11, #0
383A	6100feb6 	ld      R0, %feb6	; block size in bytes
383E	bda0		ldk     R10, #0

3840	ba9100a0 	ldirb  @R10, @R9, R0	; copy sector
3844	dfac		calr    %38ee		; read next disk block
3846	6100feb6 	ld      R0, %feb6
384A	eefa		jr      nz, %3840

384C	95f4		popl    RR4, @R15
384E	95f6		popl    RR6, @R15
3850	1eb8		jp      @R11
--------------------------------------------------------------------------------

; Read inode specified in R11

3852	4d01feba0001 	cp      %feba, #%0001
3858	e60b		jr      z, %3870
385A	4d01feba0002 	cp      %feba, #%0002
3860	5e0ef2be 	jp      nz, %f2be	; 39CE illegal block size

			; 1k block size
3864	010b001f 	add     R11, #31
3868	a1b5		ld      R5, R11
386A	b351fffc 	srl     R5, #4		; 16 inodes per block
386E	e804		jr      %3878

			; 512b block size
3870	a9be		inc     R11, #15
3872	a1b5		ld      R5, R11
3874	b351fffd 	srl     R5, #3		; 8 inodes per block

3878	8d48		clr     R4
387A	df6e		calr    %39a0		; read

387C	4d01feba0001 	cp      %feba, #%0001
3882	e603		jr      z, %388a
3884	070b000f 	and     R11, #%000f
3888	e802		jr      %388e
388A	070b0007 	and     R11, #%0007

388E	b3b10006 	sll     R11, #6		; 64 bytes per inode
3892	010bf808 	add     R11, #%f808	; di_size
3896	95bc		popl    RR12, @R11	; get size in bytes

3898	4d01feba0001 	cp      %feba, #%0001
389E	e606		jr      z, %38ac

			; 1k block size
38A0	160c000003ff 	addl    RR12, #%000003ff
38A6	b3c5fff6 	srll    RR12, #10	; 1024 bytes per block
38AA	e805		jr      %38b6

			; 512b block size
38AC	160c000001ff 	addl    RR12, #%000001ff
38B2	b3c5fff7 	srll    RR12, #9	; 512 bytes per block

			; copy 10 disk block addresses to FC00
38B6	210cfc00 	ld      R12, #%fc00
38BA	a1c9		ld      R9, R12
38BC	bd1a		ldk     R1, #10
38BE	0c98		clrb    @R9
38C0	a990		inc     R9, #1
38C2	bd03		ldk     R0, #3		; 3 bytes per address
38C4	bab10090 	ldirb  @R9, @R11, R0
38C8	ab10		dec     R1, #1
38CA	eef9		jr      nz, %38be

38CC	0b0d000a 	cp      R13, #%000a
38D0	9e02		ret     le

38D2	8c48		clrb    RH4
38D4	20bc		ldb     RL4, @R11
38D6	a9b0		inc     R11, #1
38D8	20b5		ldb     RH5, @R11
38DA	a9b0		inc     R11, #1
38DC	20bd		ldb     RL5, @R11
38DE	dfa0		calr    %39a0		; read

38E0	2101f800 	ld      R1, #%f800
38E4	21000200 	ld      R0, #%0200
38E8	ba110090 	ldirb  @R9, @R1, R0
38EC	9e08		ret     
--------------------------------------------------------------------------------

; Read next disk block
;
; R12: ptr to disk block addresses
; R13: remaining addresses

38EE	8dd4		test    R13
38F0	9e06		ret     z

38F2	95c4		popl    RR4, @R12
38F4	dfab		calr    %39a0		; read
38F6	2109f800 	ld      R9, #%f800
38FA	abd0		dec     R13, #1
38FC	8d43		resflg  z

38FE	9e08		ret     
--------------------------------------------------------------------------------

3900	a9bd		inc     R11, #14
3902	8bbc		cp      R12, R11
3904	9e09		ret     ge

3906	0cc8		clrb    @R12
3908	a9c0		inc     R12, #1
390A	e8fb		jr      %3902
--------------------------------------------------------------------------------

390C	2088		ldb     RL0, @R8
390E	8c84		testb   RL0
3910	9e06		ret     z
3912	dfe7		calr    %3946
3914	a980		inc     R8, #1
3916	e8fa		jr      %390c
--------------------------------------------------------------------------------

3918	340e044a 	ldar    R14, %3d66	; "stand/boot"
391C	4d04fec2 	test    %fec2
3920	ee02		jr      nz, %3926
3922	340e0446 	ldar    R14, %3d6c	; "boot"

3926	8de4		test    R14
3928	e603		jr      z, %3930
392A	20e8		ldb     RL0, @R14
392C	a9e0		inc     R14, #1
392E	e806		jr      %393c

3930	3a84ff87 	inb	RL0, %ff87
3934	a680		bitb    RL0, #0
3936	e6fc		jr      z, %3930

3938	3a84ff83 	inb	RL0, %ff83
393C	a287		resb    RL0, #7
393E	0a080d0d 	cpb     RL0, #%0d
3942	ee01		jr      nz, %3946
3944	bd0a		ldk     R0, #%0a

3946	0a080a0a 	cpb     RL0, #%0a
394A	ee06		jr      nz, %3958

394C	8bac		cp      R12, R10
394E	e6e4		jr      z, %3918
3950	bde0		ldk     R14, #0
3952	bd0d		ldk     R0, #13
3954	dfff		calr    %3958
3956	bd0a		ldk     R0, #10

3958	3a04ff87 	inb	RH0, %ff87
395C	a602		bitb    RH0, #2
395E	e6fc		jr      z, %3958

3960	3a86ff83 	outb	%ff83, RL0

3964	9e08		ret     
--------------------------------------------------------------------------------

; Delay

3966	93f0		push    @R15, R0

3968	2100181e 	ld      R0, #%181e
396C	8d07		nop
396E	f082		djnz    R0, %396c

3970	97f0		pop     R0, @R15
3972	9e08		ret     
--------------------------------------------------------------------------------

3974	6009feb4 	ldb     RL1,%feb4	; boot device code
3978	0a090202 	cpb     RL1,#%02
397C	eb0e		jr      ugt,%399a

397E	6102febc 	ld      R2,%febc	; unit number
3982	0b020004 	cp      R2,#%0004
3986	e703		jr      c,%398e
3988	21023dd2 	ld      R2,#%3dd2	; "ILLEGAL UNIT NUMBER"
398C	e822		jr      %39d2

398E	8c18		clrb    RH1
3990	b3110001 	sll     R1,#1
3994	6112f666 	ld      R2,%f666(R1)	; setup controller and drive
3998	1e28		jp      @R2

399A	21021ff2 	ld      R2,#%1ff2	; "ILLEGAL BOOT DEVICE CODE"
399E	e819		jr      %39d2
--------------------------------------------------------------------------------

; Read from boot device

39A0	6009feb4 	ldb     RL1,%feb4	; device code
39A4	0a090202 	cpb     RL1,#%02
39A8	ebf8		jr      ugt,%399a

39AA	4d01feba0001 	cp      %feba,#%0001
39B0	e606		jr      z,%39be
39B2	4d01feba0002 	cp      %feba,#%0002
39B8	ee0a		jr      nz,%39ce

39BA	b3450001 	slll    RR4,#1
39BE	5604febe 	addl    RR4,%febe
39C2	8c18		clrb    RH1
39C4	b3110001 	sll     R1,#1
39C8	6112f66c 	ld      R2,%f66c(R1)	; read from drive
39CC	1e28		jp      @R2

39CE	21023db8 	ld      R2,#%3db8	; "ILLEGAL BLOCK SIZE"

39D2	8d08		clr     r0
39D4	3b06ffc1 	out	%ffc1,R0
39D8	5f000692 	call    %0692
39DC	7c05		ei      vi
39DE	5e08026e 	jp      %026e
--------------------------------------------------------------------------------

39E2	6100febc 	ld      R0,%febc
39E6	3b068001 	out    %8001,R0
39EA	3b148001 	in     R1,%8001
39EE	8a98		cpb     RL0,RL1
39F0	ee21		jr      nz,%3a34
39F2	4c05fec60303 	ldb     %fec6,#%03
39F8	4c05fec71818 	ldb     %fec7,#%18
39FE	2100fec4 	ld      R0,#%fec4
3A02	3b06800a 	out    %800a,R0
3A06	ac80		exb     RH0,RL0
3A08	3b06800b 	out    %800b,R0
3A0C	8d08		clr     r0
3A0E	3b06800c 	out    %800c,R0
3A12	3b068010 	out    %8010,R0
3A16	21000016 	ld      R0,#%0016
3A1A	3b068000 	out    %8000,R0
3A1E	3b048010 	in     R0,%8010
3A22	a707		bit     R0,#7
3A24	e6fc		jr      z,%3a1e
3A26	3b048010 	in     R0,%8010
3A2A	a701		bit     R0,#1
3A2C	9e0e		ret     nz
3A2E	a703		bit     R0,#3
3A30	e6fa		jr      z,%3a26
3A32	9e08		ret     
3A34	21023d94 	ld      R2,#%3d94
3A38	e8cc		jr      %39d2
3A3A	9442		ldl     RR2,Rr4
3A3C	8d08		clr     r0
3A3E	8d18		clr     R1
3A40	1a0000000018 	divl    rq0,#%00000018
3A46	3b168005 	out	%8005,R1
3A4A	6008fec6 	ldb     RL0,%fec6
3A4E	8c08		clrb    RH0
3A50	9b02		div     RR2,R0
3A52	3b268002 	out	%8002,R2
3A56	8d08		clr     r0
3A58	3b068010 	out	%8010,R0
3A5C	6100febc 	ld      R0,%febc
3A60	3b068001 	out	%8001,R0
3A64	8d08		clr     r0
3A66	3b068008 	out	%8008,R0
3A6A	3b06800a 	out	%800a,R0
3A6E	3b06800c 	out	%800c,R0
3A72	ac38		exb     RL0,RH3
3A74	3b368003 	out	%8003,R3
3A78	3b068004 	out	%8004,R0
3A7C	2100f800 	ld      R0,#%f800
3A80	ac08		exb     RL0,Rh0
3A82	3b06800b 	out	%800b,R0
3A86	6100feb6 	ld      R0,%feb6
3A8A	b301fff7 	srl     R0,#9
3A8E	3b068009 	out	%8009,R0
3A92	bd01		ldk     R0,#1
3A94	e8c2		jr      %3a1a
--------------------------------------------------------------------------------

; Setup SMD controller and size disk

(routine relocated to F386)

3A96	2107fee4 	ld      R7, #%fee4	; first packet address (drv. 0)

3A9A	6100febc 	ld      R0, %febc	; unit number
3A9E	8d04		test    R0
3AA0	e603		jr      z, %3aa8
3AA2	01070020 	add     R7, #%0020	; offset to next packet
3AA6	f083		djnz    R0, %3aa2

3AA8	6f07fec4 	ld      %fec4, R7

			; clear $FECC-FF03 (dispatch table DT + 1 packet)
3AAC	2101fecc 	ld      R1, #%fecc
3AB0	2100001c 	ld      R0, #%001c
3AB4	0d18		clr     @R1
3AB6	a911		inc     R1, #2
3AB8	f083		djnz    R0, %3ab4

			; setup dispatch table
3ABA	8d08		clr     r0
3ABC	2101fee4 	ld      R1, #%fee4
3AC0	5d00fed4 	ldl     %fed4, RR0	; packet address drive 0
3AC4	2101ff04 	ld      R1, #%ff04
3AC8	5d00fed8 	ldl     %fed8, RR0	; packet address drive 1
3ACC	2101ff24 	ld      R1, #%ff24
3AD0	5d00fedc 	ldl     %fedc, RR0	; packet address drive 2
3AD4	2101ff44 	ld      R1, #%ff44
3AD8	5d00fee0 	ldl     %fee0, RR0	; packet address drive 3

3ADC	210000a0 	ld      R0, #%00a0	; init controller,  disable ints
3AE0	3b067f00 	out	%7f00, R0
3AE4	8d07		nop
3AE6	8d07		nop
3AE8	3b047f00 	in	R0, %7f00	; read status
3AEC	0b00ffff 	cp      R0, #%ffff	; check if controller is responding
3AF0	5e06f526 	jp      z, %f526	; (3C36) SMC error

3AF4	dfab		calr    %3ba0		; wait while busy

3AF6	2100fecc 	ld      R0, #%fecc
3AFA	ac08		exb     RL0, RH0
3AFC	c804		ldb     RL0, #%04	; dispatch table address byte 0
3AFE	dfb2		calr    %3b9c
3B00	2100fecc 	ld      R0, #%fecc
3B04	c805		ldb     RL0, #%05	; dispatch table address byte 1
3B06	dfb6		calr    %3b9c
3B08	bd00		ldk     R0, #0
3B0A	c806		ldb     RL0, #%06	; dispatch table address byte 2
3B0C	dfb9		calr    %3b9c
3B0E	2100c207 	ld      R0, #%c207	; interrupt vector
3B12	dfbc		calr    %3b9c
3B14	21000001 	ld      R0, #%0001	; read packet addresses from DT
3B18	dfbf		calr    %3b9c

3B1A	3b047f00 	in	R0, %7f00
3B1E	06088080 	andb    RL0, #%80
3B22	5e0ef526 	jp      nz, %f526	; SMC error (no DT/int. vector)

3B26	6106febc 	ld      R6, %febc	
3B2A	3376000e 	ld      R7(#%000e), R6	; set unit

3B2E	bd13		ldk     R1, #3		; select drive
3B30	33710000 	ld      R7(#%0000), R1	; command

3B34	b3610001 	sll     R6, #1
3B38	0106fecc 	add     R6, #%fecc	; ptr to packet status
3B3C	0d650001 	ld      @R6, #%0001	; GO
3B40	21000048 	ld      R0, #%0048	; wakeup
3B44	3b067f00 	out	%7f00, R0

3B48	21012328 	ld      R1, #9000

3B4C	3b047f00 	in	R0, %7f00
3B50	a702		bit     R0, #2		; test interrupt pending flag
3B52	e60e		jr      z, %3b70

3B54	31700006 	ld      R0, R7(#%0006)	; get drive status
3B58	a700		bit     R0, #0		; test drive ready flag
3B5A	ee0c		jr      nz, %3b74

3B5C	21000040 	ld      R0, #%0040	; reset interrupt flags
3B60	3b067f00 	out	%7f00, R0

3B64	0d650001 	ld      @R6, #%0001
3B68	21000048 	ld      R0, #%0048	; wakeup
3B6C	3b067f00 	out	%7f00, R0

3B70	d106		calr    %3966		; delay
3B72	f194		djnz    R1, %3b4c

3B74	21000040 	ld      R0, #%0040	; reset interrupt flags
3B78	3b067f00 	out	%7f00, R0

3B7C	6101febc 	ld      R1, %febc	; unit number
3B80	3371000e 	ld      R7(#%000e), R1	; set unit

3B84	2101000f 	ld      R1, #%000f	; size disk
3B88	33710000 	ld      R7(#%0000), R1
3B8C	dfcf		calr    %3bf0

3B8E	31700016 	ld      R0, R7(#%0016)	; no. of sectors
3B92	31710012 	ld      R1, R7(#%0012)	; no. of heads
3B96	5d00fec8 	ldl     %fec8, RR0

3B9A	9e08		ret     
--------------------------------------------------------------------------------

; Send SMC and wait for ready

3B9C	3b067f00 	out    %7f00, R0

; Wait for SMC ready

3BA0	3b247f00 	in	R2, %7f00
3BA4	a720		bit     R2, #0
3BA6	eefc		jr      nz, %3ba0
3BA8	9e08		ret     
--------------------------------------------------------------------------------

; Read from SMD, block number in RR4, to memory at $F800

3BAA	6107fec4 	ld      R7,%fec4	; ptr. to packet

3BAE	9442		ldl     RR2,RR4		; block number

3BB0	8d08		clr     R0
3BB2	8d18		clr     R1
3BB4	4d08fec6 	clr     %fec6
3BB8	5a00fec6 	divl    RQ0,%fec6	; divide by no. of sectors (in FEC8)
3BBC	33710016 	ld      R7(#%0016),R1	; sector number

3BC0	5b02feca 	div     RR2,%feca	; divide by no. of heads
3BC4	ad32		ex      R2,R3
3BC6	37720010 	ldl     R7(#%0010),RR2	; cylinder number

3BCA	2101000e 	ld      R1,#%000e
3BCE	33710000 	ld      R7(#%0000),R1	; command READ

3BD2	6101feb6 	ld      R1,%feb6
3BD6	33710008 	ld      R7(#%0008),R1	; sector count

3BDA	bd10		ldk     R1,#0
3BDC	3371000a 	ld      R7(#%000a),R1	; DMA address high
3BE0	2101f800 	ld      R1,#%f800
3BE4	3371000c 	ld      R7(#%000c),R1	; DMA address low

3BE8	6101febc 	ld      R1,%febc
3BEC	3371000e 	ld      R7(#%000e),R1	; unit number
----

; Execute SMD controller command

3BF0	6106febc 	ld      R6, %febc	; unit number
3BF4	b3610001 	sll     R6, #1
3BF8	0106fecc 	add     R6, #%fecc	; ptr. to packet status
3BFC	0d650001 	ld      @R6, #%0001	; GO

3C00	21000048 	ld      R0, #%0048	; wakeup
3C04	3b067f00 	out	%7f00, R0

3C08	3b047f00 	in	R0, %7f00
3C0C	a702		bit     R0, #2
3C0E	e6fc		jr      z, %3c08		; wait for interrupt

3C10	0d650000 	ld      @R6, #%0000	; IDLE

3C14	07003f00 	and     R0, #%3f00	; mask status
3C18	03000300 	sub     R0, #%0300
3C1C	ee04		jr      nz, %3c26

3C1E	21010003 	ld      R1, #%0003
3C22	33710002 	ld      R7(#%0002), R1

3C26	31710002 	ld      R1, R7(#%0002)	; get status from packet
3C2A	8d14		test    R1

3C2C	21000040 	ld      R0, #%0040
3C30	3b067f00 	out	%7f00, R0

3C34	9e06		ret     z
----

3C36	21023d82 	ld      R2, #%3d82	; "SMC ERROR"
3C3A	5e08f2c2 	jp      %f2c2
--------------------------------------------------------------------------------

3C3E	dfc8		calr    %3cb0
3C40	2101f1f1 	ld      R1,#%f1f1
3C44	3b1680f0 	out    %80f0,R1
3C48	dfc4		calr    %3cc2
3C4A	8d18		clr     R1
3C4C	3b1680f0 	out    %80f0,R1
3C50	dfc8		calr    %3cc2
3C52	2102fec8 	ld      R2,#%fec8
3C56	3b2680f0 	out    %80f0,R2
3C5A	21002328 	ld      R0,#%2328
3C5E	d17d		calr    %3966
3C60	0d215555 	cp      @R2,#%5555
3C64	ee01		jr      nz,%3c68
3C66	f085		djnz    R0,%3c5e
3C68	0d24		test    @R2
3C6A	ee77		jr      nz,%3d5a
3C6C	21011d1d 	ld      R1,#%1d1d
3C70	3b1680f0 	out    %80f0,R1
3C74	dfda		calr    %3cc2
3C76	21000010 	ld      R0,#%0010
3C7A	2103000e 	ld      R3,#%000e
3C7E	2121		ld      R1,@R2
3C80	a719		bit     R1,#9
3C82	ee05		jr      nz,%3c8e
3C84	8d18		clr     R1
3C86	2100000c 	ld      R0,#%000c
3C8A	2103000a 	ld      R3,#%000a
3C8E	6f01fec4 	ld      %fec4,R1
3C92	a921		inc     R2,#2
3C94	6101febc 	ld      R1,%febc
3C98	8d14		test    R1
3C9A	e602		jr      z,%3ca0
3C9C	8102		add     R2,R0
3C9E	f182		djnz    R1,%3c9c
3CA0	6f02fec6 	ld      %fec6,R2
3CA4	71200300 	ld      R0,R2(R3)
3CA8	07001f00 	and     R0,#%1f00
3CAC	ee56		jr      nz,%3d5a
3CAE	9e08		ret     
--------------------------------------------------------------------------------

3CB0	2100ffff 	ld      R0,#%ffff
3CB4	2101fec8 	ld      R1,#%fec8
3CB8	21020021 	ld      R2,#%0021
3CBC	2f10		ld      @R1,R0
3CBE	f282		djnz    R2,%3cbc
3CC0	9e08		ret     
--------------------------------------------------------------------------------

3CC2	21010032 	ld      R1,#%0032
3CC6	d1b1		calr    %3966
3CC8	f182		djnz    R1,%3cc6
3CCA	9e08		ret     
--------------------------------------------------------------------------------

3CCC	21020001 	ld      R2,#%0001
3CD0	6100febc 	ld      R0,%febc
3CD4	8d04		test    r0
3CD6	e603		jr      z,%3cde

3CD8	b3210002 	sll     R2,#2
3CDC	f083		djnz    R0,%3cd8

3CDE	6107fec6 	ld      R7,%fec6
3CE2	21000010 	ld      R0,#%0010
3CE6	33700000 	ld      R7(#%0000),R0
3CEA	4d04fec4 	test    %fec4
3CEE	ee14		jr      nz,%3d18

3CF0	33750002 	ld      R7(#%0002),R5
3CF4	6100feb6 	ld      R0,%feb6
3CF8	b301fff7 	srl     R0,#9
3CFC	33700004 	ld      R7(#%0004),R0
3D00	2100f800 	ld      R0,#%f800
3D04	33700006 	ld      R7(#%0006),R0
3D08	bd00		ldk     R0,#0
3D0A	33700008 	ld      R7(#%0008),R0
3D0E	2103000a 	ld      R3,#%000a
3D12	73700300 	ld      R7(R3),R0
3D16	e814		jr      %3d40

3D18	37740002 	ldl     R7(#%0002),Rr4
3D1C	bd00		ldk     R0,#0
3D1E	6101feb6 	ld      R1,%feb6
3D22	b311fff7 	srl     R1,#9
3D26	37700006 	ldl     R7(#%0006),Rr0
3D2A	2101f800 	ld      R1,#%f800
3D2E	3371000a 	ld      R7(#%000a),R1
3D32	bd00		ldk     R0,#0
3D34	3370000c 	ld      R7(#%000c),R0
3D38	2103000e 	ld      R3,#%000e
3D3C	73700300 	ld      R7(R3),R0

3D40	6f02fec8 	ld      %fec8,R2
3D44	3b0680f0 	out	%80f0,R0
3D48	4d04fec8 	test    %fec8
3D4C	eefd		jr      nz,%3d48
3D4E	71710300 	ld      R1,R7(R3)
3D52	07011f00 	and     R1,#%1f00
3D56	eeba		jr      nz,%3ccc
3D58	9e08		ret     
--------------------------------------------------------------------------------

3D5A	21023da6 	ld      R2,#%3da6
3D5E	5e08f2c2 	jp      %f2c2
--------------------------------------------------------------------------------

3D62	3e20		.ascii	"> ", 0, 0
3D66	7374		.ascii	"stand/"
3D6C			.ascii	"boot", 10, 0
3D72	3f0a	 	.ascii	"?", 10, 0, 0
----

3D76/F666	 	.word	#%f2d2	; 39E2
3D78	f52e		.word	#%f52e	; 3C3E
3D7A	f386		.word	#%f386	; 3A96 init SMD

3D7C/F66C		.word	#%f32a	; 3A3A
3D7E	f5bc		.word	#%f5bc	; 3CCC
3D80	f49a		.word	#%f49a	; 3BAA read SMD

; END OF RELOCATED CODE (F000...)
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------


			.align
3D82	000f		.word	15
3D84	072a		.ascii	7, "*** SMC ERROR", 13

			.align
3D94	000f		.word	15
3D96	072a		.ascii	7, "*** WDC ERROR", 13

			.align
3DA6	000f		.word	15
3DA8	072a		.ascii	7, "*** MDC ERROR", 13

			.align
3DB8	0018		.word	24
3DBA	072a		.ascii	7, "*** ILLEGAL BLOCK SIZE", 13

			.align
3DD2	0019		.word	25
3DD4	072a		.ascii	7, "*** ILLEGAL UNIT NUMBER", 13
--------------------------------------------------------------------------------

3DEE	21004000 	ld      R0,#%4000	; non-segmented system mode
3DF2	7d0a		ldctl   FCW,R0

3DF4	2102f800 	ld      R2,#%f800
3DF8	76013e2a 	lda     R1,%3e2a
3DFC	2100004f 	ld      R0,#%004f
3E00	bb110020 	ldir    @R2,@R1,R0

3E04	2102f800 	ld      R2,#%f800
3E08	76013e2a 	lda     R1,%3e2a
3E0C	2100004f 	ld      R0,#%004f
3E10	bb16002e 	cpsir   @R2,@R1,R0,nz
3E14	e603		jr      z,%3e1c

3E16	210ff800 	ld      R15,#%f800
3E1A	1ef8		jp      @R15

3E1C	76021e86 	lda     R2,%1e86
3E20	5f000692 	call    %0692
3E24	7c05		ei      vi		; enable vectored interrupts
3E26	5e08026e 	jp      %026e
--------------------------------------------------------------------------------

			; Area 3E2A-3EC7 will be copied to <0>F800

3E2A	c8a5		ldb     RL0,#%a5
3E2C	a080		ldb     RH0,RL0
3E2E	3b060048 	out    %0048,R0
3E32	3b140048 	in     R1,%0048
3E36	8d28		clr     R2
3E38	3b260048 	out    %0048,R2
3E3C	8b10		cp      R0,R1
3E3E	e607		jr      z,%3e4e
3E40	76023ec8 	lda     R2,%3ec8
3E44	5f000692 	call    %0692
3E48	7c05		ei      vi
3E4A	5e08026e 	jp      %026e
3E4E	21000001 	ld      R0,#%0001
3E52	3b06ffc1 	out    %ffc1,R0
3E56	bd20		ldk     R2,#0
3E58	bd12		ldk     R1,#2
3E5A	21033fff 	ld      R3,#%3fff
3E5E	0d28		clr     @R2
3E60	bb210310 	ldir   @R1,@R2,R3
3E64	dfd7		calr    %3eb8
3E66	21000003 	ld      R0,#%0003
3E6A	dfdc		calr    %3eb4
3E6C	2100000a 	ld      R0,#%000a
3E70	dfdf		calr    %3eb4
3E72	2100000b 	ld      R0,#%000b
3E76	dfe2		calr    %3eb4
3E78	2100000f 	ld      R0,#%000f
3E7C	dfe5		calr    %3eb4
3E7E	2100000e 	ld      R0,#%000e
3E82	dfe8		calr    %3eb4
3E84	bd00		ldk     R0,#0
3E86	3b06004e 	out    %004e,R0
3E8A	21000009 	ld      R0,#%0009
3E8E	dfee		calr    %3eb4
3E90	3b04004a 	in     R0,%004a
3E94	a700		bit     R0,#0
3E96	eee6		jr      nz,%3e64
3E98	bd00		ldk     R0,#0
3E9A	3b060044 	out    %0044,R0
3E9E	3b060046 	out    %0046,R0
3EA2	21004000 	ld      R0,#%4000
3EA6	3b060048 	out    %0048,R0
3EAA	21000001 	ld      R0,#%0001
3EAE	dffe		calr    %3eb4

3EB0	5e080000 	jp      %0000
----

			; Send tape command and wait until ready

3EB4	3b060042 	out     %0042,R0	; tape command

3EB8	21000258 	ld      R0,#600
3EBC	f081		djnz    R0,%3ebc	; small delay

3EBE	3b040040 	in      R0,%0040
3EC2	a709		bit     R0,#9
3EC4	eefc		jr      nz,%3ebe	; loop until ready

3EC6	9e08		ret     
----

3EC8	000f		.word	15
3ECA	072a 		.ascii	7, "*** TCC ERROR", 13
----
			.align
			.word	0
----
			; ROM checksum
3EDC	cdf0	 	.word	#%cdf0
