HelpScreen:
	move.l	$5c(a6),-(a7)		;Save Cursor Pos.
	move.w	$14a(a6),-(a7)		;Save Screen Scrollvalue
	addq.b	#1,$1a8(a6)		;Turn on Infoline
	bsr	MakeScreenBackup
	move.l	$150(a6),-(a7)		;Save Text Start
	move.l	$154(a6),-(a7)		;Save Text End
	move.l	$158(a6),-(a7)		;Save Text Linenr
	lea	HelpText1(pc),a0
	lea	HelpText1End(pc),a1
	moveq	#$00,d0
	move.l	a0,$150(a6)		;Start Text
	move.l	a1,$154(a6)		;End Text
	move.l	d0,$158(a6)		;Line nr
	bsr	GotoCurrentLine
	move.l	$15c(a6),$170(a6)	;Top Line=Current Line
	clr.w	$166(a6)		;Clear Column nr
	clr.w	$16e(a6)		;Clear Column start
HelpScreen1:
	bsr	UpdateTextII
	bsr	HelpScreen9	;Info text
HelpScreen2:
	jsr	_ReadKeyboard(a6)
	tst.b	d0
	beq.s	HelpScreen2
	cmp.b	#$9b,d0			;CSI code
	beq.s	HelpScreen4
HelpScreen3:				;Exit
	move.l	(a7)+,$158(a6)		;Restore Text Linenr
	move.l	(a7)+,$154(a6)		;Restore Text End
	move.l	(a7)+,$150(a6)		;Restore Text Start
	bsr	MakeScreenBackup
	move.w	(a7)+,$14a(a6)		;Restore Screen Scrollvalue
	bsr	RestoreScreen
	move.l	(a7)+,$5c(a6)		;Restore Cursor Pos.
	bsr	CalcYAddr
	clr.w	$68(a6)			;Empty Keyboard
	clr.b	$1a8(a6)		;No infoline
	bra	Loop
HelpScreen4:
	moveq	#$00,d6
HelpScreenNum1:
	jsr	_ReadKeyboard(a6)
	tst.b	d0
	beq.s	HelpScreenNum1
	cmp.b	#$39,d0
	bhi.s	HelpScreenNum2
	cmp.b	#$2f,d0
	bls.s	HelpScreenNum2
	and.w	#$000f,d0
	mulu	#10,d6
	add.w	d0,d6
	bra.s	HelpScreenNum1
HelpScreenNum2:
	cmp.b	#$01,d0		;KEYPAD & CURSOR SPECIAL
	beq	HelpScreenNum3
	bra	HelpScreen3
HelpScreenNum3:
	cmp.b	#1,d6
	beq.s	HelpScreen5
	cmp.b	#6,d6
	beq.s	HelpScreen6
	cmp.b	#2,d6
	beq	HelpScreen8
	cmp.b	#7,d6
	beq	HelpScreen7
	bra	HelpScreen3
HelpScreen5:			;Cursor Up
	move.l	$170(a6),d0	;Top Line
	cmp.l	$150(a6),d0	;Text Start
	beq	HelpScreen2
	jsr	_ScrollDown(a6)
	bsr	GotoPrecCurLine
	move.l	$15c(a6),-(a7)		;Last line
	move.l	$170(a6),$15c(a6)	;Top line
	bsr	GotoPrecCurLine
	move.l	$15c(a6),$170(a6)
	move.l	(a7)+,$15c(a6)
	addq.b	#1,$75(a6)
HelpScreen5a:
	tst.b	$75(a6)
	bne.s	HelpScreen5a
	clr.w	$5c(a6)		;Top Line
	bsr	UpdateLine
	bsr	HelpScreen9	;Info text
	bra	HelpScreen2

HelpScreen6:			;Cursor Down
	move.l	$15c(a6),d1
	bsr	GotoNextCurLine
	move.l	$15c(a6),d0
	cmp.l	$154(a6),d0
	beq	HelpScreen6b
	bsr	GotoNextTopLine
	jsr	_ScrollUp(a6)
	move.w	$14c(a6),d0	;ScreenLastLine
	subq.w	#3,d0
	move.w	d0,$5c(a6)
	addq.b	#1,$75(a6)
HelpScreen6a:
	tst.b	$75(a6)
	bne.s	HelpScreen6a
	bsr	UpdateLine
	bsr	HelpScreen9	;Info text
	bra	HelpScreen2
HelpScreen6b:
	move.l	d1,$15c(a6)
	bra	HelpScreen2

HelpScreen7:			;Page Down
	move.w	$14c(a6),d2	;ScreenLastLine
	subq.w	#3,d2
HelpScreen7a:
	move.l	$15c(a6),d1
	bsr	GotoNextCurLine
	move.l	$15c(a6),d0
	cmp.l	$154(a6),d0
	beq	HelpScreen1
	bsr	GotoNextTopLine
	dbf	d2,HelpScreen7a
	bra	HelpScreen1

HelpScreen8:			;Page Up
	move.w	$14c(a6),d2	;ScreenLastLine
	subq.w	#3,d2
HelpScreen8a:
	move.l	$170(a6),d0	;Top Line
	cmp.l	$150(a6),d0	;Text Start
	beq	HelpScreen1
	bsr	GotoPrecTopLine
	dbf	d2,HelpScreen8a
	bra	HelpScreen1

HelpScreen9:			;Show Info
	move.w	$14c(a6),d0	;ScreenLastLine
	subq.w	#2,d0
	move.w	d0,$5c(a6)
	clr.w	$5e(a6)
	lea	HelpInfoText(pc),a0
	jsr	_WriteString(a6)
	jsr	_ClearToEOL(a6)
	rts

HelpText1:
	dc.b	"* A <addr> <mnemonics>",9,9,9,9,9,";Assemble",10
	dc.b	"* B <addr>",9,9,9,9,9,9,";Breakpoint",10
	dc.b	"* C <startaddr> <endaddr> <compareaddr>",9,9,9,";Compare",10
	dc.b	"* D <startaddr> [<endaddr>]",9,9,9,9,";Disassemble",10
	dc.b	"* , <addr> <words> <mnemonics>",9,9,9,9,";Edit Disassemble",10
	dc.b	"* E <startaddr> <endaddr> <exchangeaddr>",9,9,";Exchange"
	dc.b	10
	dc.b	"* F <startaddr> <endaddr> <bytes>",9,9,9,";Fill Memory",10
	dc.b	"* F <startaddr> <endaddr> ",34,"<string>",34,9,9
	dc.b	9,";Fill Memory",10
	dc.b	"* G [<addr>]",9,9,9,9,9,9,";Go Program (JMP)",10
	dc.b	"* H <startaddr> <endaddr> <bytes>",9,9,9,";Hunt Memory",10
	dc.b	"* H <startaddr> <endaddr> ",34,"<string>",34,9,9
	dc.b	9,";Hunt Memory",10
	dc.b	"* I <startaddr> [<endaddr>]",9,9,9,9,";Interpret",10
	dc.b	"* ' <addr> <chars>",9,9,9,9,9,";Edit Memory in text",10
	dc.b	"* J [<addr>]",9,9,9,9,9,9,";Jump Program (JSR)",10
	dc.b	"* L ",34,"<filename>",34," <startaddr> [<endaddr>]",9,9
	dc.b	";Load file",10
	dc.b	"* L <drive> <blocknr> <number> <startaddr>",9,9
	dc.b	";Load blocks",10
	dc.b	"* M <startaddr> [<endaddr>]",9,9,9,9,";Memory",10
	dc.b	"* : <addr> <bytes>",9,9,9,9,9,";Edit Memory",10
	dc.b	"* N <startaddr> <endaddr> <abslow> <abshigh> <newabs>"
	dc.b	9,";New Locator",10
	dc.b	"* Q [<addr>]",9,9,9,9,9,9,";Quicktrace",10
	dc.b	"* R ",9,9,9,9,9,9,9,";Register",10
	dc.b	"* ; <register> ...",9,9,9,9,9,";Edit Register",10
	dc.b	"* S ",34,"<filename>",34," <startaddr> <endaddr>",9,9,9
	dc.b	";Save file",10
	dc.b	"* S <drive> <blocknr> <number> <startaddr>",9,9
	dc.b	";Save blocks",10
	dc.b	"* T <startaddr> <endaddr> <transferaddr>",9,9,";Transfer",10
	dc.b	"* W [<addr>]",9,9,9,9,9,9,";Walktrace",10
	dc.b	"* X",9,9,9,9,9,9,9,";Exit mon",10
	dc.b	"* CD [",34,"<directory>",34,"]",9,9,9,9,9,";Change Directory",10
	*dc.b	"* COPY ",34,"<filename>",34,32,34,"<filename>",34,9,9,9
	*dc.b	";Copy file",10
	dc.b	"* CLOSE",9,9,9,9,9,9,9,";Close textfile",10
	dc.b	"* DATE [<Day-Mon-Year>] [<Hour:Min:Sec>]",9,9,";Time",10
	dc.b	"* DELETE ",34,"<filename>",34,9,9,9,9,9,";Delete File",10
	dc.b	"* DIR [",34,"<directory>",34,"]",9,9,9,9,9,";Directory",10
	dc.b	"* DISKCOPY ",34,"<drive>",34,32,34,"<drive>",34,9,9,9,9
	dc.b	";Copy Disk",10
	dc.b	"* FILENOTE ",34,"<filename>",34,32,34,"<comment>",34,9,9,9
	dc.b	";Set comment",10
	dc.b	"* FORMAT ",34,"<drive>",34,32,34,"<name>",34,9,9,9,9
	dc.b	";Format Disk",10
	dc.b	"* HUNTDIS <startaddr> <endaddr> ",34,"<string>",34,9,9
	dc.b	";Hunt Disassemble",10
	dc.b	"* INFO",9,9,9,9,9,9,9,";Info",10
	dc.b	"* INSTALL ",34,"<drive>",34,9,9,9,9,9,";Install disk",10
	dc.b	"* LOADSEG ",34,"<filename>",34," <addr>",9,9,9,9,";Load segment",10
	dc.b	"* MAKEDIR ",34,"<filename>",34,9,9,9,9,9
	dc.b	";Create Directory",10
	dc.b	"* MERGE ",34,"<filename>",34,9,9,9,9,9,";Merge textfile",10
	dc.b	"* NEW",9,9,9,9,9,9,9,";Clear textbuffer",10
	dc.b	"* OPEN ",34,"<filename>",34,9,9,9,9,9,";Open textfile",10
	dc.b	"* PROTECT ",34,"<filename>",34,32,34,"<protect>",34,9,9,9
	dc.b	";Protect File",10
	dc.b	"* RENAME ",34,"<filename>",34,32,34,"<filename>",34,9,9,9
	dc.b	";Rename File",10
	dc.b	"* RELABEL ",34,"<drive>",34,32,34,"<name>",34,9,9,9,9
	dc.b	";Relabel Disk",10
	dc.b	"* SAVE [",34,"<filename>","]",9,9,9,9,9,";Save textfile",10
	dc.b	"* SHOWSEG <addr>",9,9,9,9,9,";Show segmentlist",10
	dc.b	"* TYPE ",34,"<filename>",34,9,9,9,9,9,";Type file",10
	dc.b	"* WORKBUF [<startaddr> <endaddr>]",9,9,9,";Workbuffer",10
HelpText1End:
HelpInfoText:
	dc.b "Scroll with CRSR UP/DOWN and PAGE UP/DOWN",0
	even

UpdateTextII:				;Place First Line on Top
	movem.l	d1-d2/a0-a3,-(a7)	;of Screen
	move.l	$170(a6),a0		;Top Line Addr
	move.l	$154(a6),a1
	move.l	a0,$15c(a6)		;Last Line Addr
	clr.w	$5c(a6)
UpdateTextII1:
	cmp.l	a0,a1
	beq.s	UpdateTextII6
	clr.w	$5e(a6)
	move.w	$14c(a6),d0		;ScreenLastLine
	subq.w	#2,d0
	cmp.w	$5c(a6),d0
	beq.s	UpdateTextII6
	move.l	a0,$15c(a6)		;Last Line Addr
UpdateTextII2:
	cmp.l	a0,a1
	beq.s	UpdateTextII6
	move.b	(a0)+,d0
	cmp.b	#$0a,d0			;LF
	beq.s	UpdateTextII5
	cmp.b	#$09,d0
	bne.s	UpdateTextII3
	jsr	_ClearToTAB(a6)
UpdateTextII3:
	jsr	_WriteChar(a6)
	tst.w	$5e(a6)
	bne.s	UpdateTextII2
UpdateTextII4:
	cmp.l	a0,a1
	beq.s	UpdateTextII6
	move.b	(a0)+,d0
	cmp.b	#$0a,d0
	bne.s	UpdateTextII4
	bra.s	UpdateTextII1
UpdateTextII5:
	jsr	_ClearToEOL(a6)
	jsr	_WriteChar(a6)
	bra.s	UpdateTextII1
UpdateTextII6:
	move.w	$14c(a6),d0		;ScreenLastLine
	subq.w	#2,d0
	cmp.w	$5c(a6),d0
	beq.s	UpdateTextII8
	tst.w	$5e(a6)
	bne.s	UpdateTextII7
	jsr	_ClearLine(a6)
	addq.w	#1,$5c(a6)
	bra.s	UpdateTextII6
UpdateTextII7:
	jsr	_ClearToEOL(a6)
	clr.w	$5e(a6)
	addq.w	#1,$5c(a6)
	bra.s	UpdateTextII6
UpdateTextII8:
	movem.l	(a7)+,d1-d2/a0-a3
	rts
