.DEFINE textpos $f7
.DEFINE textposh $f8
.DEFINE screen $f9
.DEFINE screenh $fa
.DEFINE finescroll $fd
.DEFINE scrolladd $fe
.DEFINE flip $ff
.DEFINE textstart $9800
.DEFINE textend $9800+$28*197
;***** QUICK HELP VIEWER *************************************************
Help:
lda #$0e
sta finescroll
lda #$00
sta $d020
sta $d021
sta scrolladd
sta textpos
lda #$04
sta flip
lda #textstart/256
sta textposh
jsr drawscreen
helploop:
jsr SCNKEY
ldx #$fc
_hlwait:
cpx $d012
bne _hlwait
jsr setscreen
lda $c5
cmp #$3f ; run/stop
beq _exithelp
cmp #$3c ; space
beq _exithelp
cmp #$03 ; f7
beq _exithelp
cmp #$07 ; cursor up/down
bne _nomove
lda $028d
and #$01
beq _moveup
lda scrolladd
cmp #$0c
beq _keydown
inc scrolladd
jmp _keydown
_moveup:
lda scrolladd
cmp #$f4
beq _keydown
dec scrolladd
jmp _keydown
_nomove:
lda scrolladd ; slow down scroller if no key
beq _keydown
bmi _inctoslow
dec scrolladd
jmp _keydown
_inctoslow:
inc scrolladd
_keydown:
jsr scrollhelp
jmp helploop
_exithelp:
lda #$00 ; clear keyboard buffer
sta $c6
rts
;----- scroll screen
scrollhelp:
lda scrolladd
clc
adc finescroll
sta finescroll
bmi _leapup
cmp #$10
bcc _noleap
and #$0f
sta finescroll
lda textpos ; check text top
cmp #textstart&255
bne _nottopoftext
lda textposh
cmp #textstart/256
beq _topoftext
_nottopoftext:
lda textpos ; leap
sec
sbc #$28
sta textpos
lda textposh
sbc #$00
sta textposh
jmp drawscreen ; rts there
_topoftext:
lda #$0e ; hard stop at top
sta finescroll
lda #$00
sta scrolladd
_noleap:
rts
_leapup:
and #$0f
sta finescroll
lda textpos ; check text end
cmp #textend&255
bne _notbotoftext
lda textposh
cmp #textend/256
beq _botoftext
_notbotoftext:
lda #$28 ; leap
clc
adc textpos
sta textpos
lda #$00
adc textposh
sta textposh
jsr drawscreen
rts
_botoftext:
lda #$00 ; hard stop at end
sta finescroll
sta scrolladd
rts
;----- set scroll register and visible screen buffer
setscreen:
lda #$36
ldx flip
cpx #$04
bne _not4
lda #$16
_not4:
sta $d018
lda finescroll
rol
lda finescroll
ror
clc
adc #$10
sta $d011
rts
;----- draw new screen buffer
drawscreen:
lda #$00
sta screen
lda flip
eor #$08
sta flip
sta screenh
lda textposh
pha
lda #$36
sta $01
ldy #$00
ldx #$04
_scrlp:
lda (textpos),y
sta (screen),y
iny
lda (textpos),y
sta (screen),y
iny
lda (textpos),y
sta (screen),y
iny
lda (textpos),y
sta (screen),y
iny
bne _scrlp
inc textpos+1
inc screen+1
dex
bne _scrlp
lda #$37
sta $01
pla
sta textposh
rts