First public commit.
This commit is contained in:
parent
2a48f52979
commit
4bac9d83ed
288 changed files with 18417 additions and 1076 deletions
204
lenser/apple/viewer/slideshow.s
Normal file
204
lenser/apple/viewer/slideshow.s
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
; lenser -- Apple II HGR slideshow loader + viewer (self-contained, no DOS).
|
||||
;
|
||||
; The Disk II boot ROM loads track 0 sector 0 to $0800 and JMPs $0801. This
|
||||
; loader reads ALL the slideshow's HGR images (NIMAGES * 32 sectors) contiguously
|
||||
; into a RAM buffer from $4000 up (image i at $4000 + i*$2000), then cycles --
|
||||
; copying each image into HGR page 1 ($2000), switching on graphics, and waiting
|
||||
; (key / seconds / both) before the next. Looping is RAM-only (no re-seek).
|
||||
;
|
||||
; #defines from the wrapper --
|
||||
; WAITMODE 1 key / 2 seconds / 3 both WAITSECS seconds (~) NIMAGES count
|
||||
; LOOPFLAG 1 wrap / 0 stop ENDPAGE one past the last buffer page ($40+N*$20)
|
||||
;
|
||||
; assembled by apple/viewer/assemble.py via xa
|
||||
|
||||
src = $06 ; zero-page copy pointers
|
||||
dst = $08
|
||||
ssidx = $19
|
||||
|
||||
* = $0800
|
||||
.byte $01 ; ROM scratch (boot sector byte 0)
|
||||
entry: ; $0801, (re)entered after every ROM read
|
||||
lda dpage
|
||||
cmp #ENDPAGE
|
||||
bcs loaded ; whole buffer read -> start the show
|
||||
lda psec
|
||||
cmp #$10
|
||||
bcc readit
|
||||
jsr seeknext
|
||||
lda #$00
|
||||
sta psec
|
||||
readit:
|
||||
lda psec
|
||||
sta $3d
|
||||
lda curtrk
|
||||
sta $41
|
||||
lda #$00
|
||||
sta $26
|
||||
lda dpage
|
||||
sta $27
|
||||
inc psec
|
||||
inc dpage
|
||||
ldx $2b
|
||||
jmp $c65c ; slot-6 ROM read; reads a sector then JMP $0801
|
||||
|
||||
loaded:
|
||||
lda #$00
|
||||
sta ssidx
|
||||
cyc:
|
||||
; ---- copy image ssidx ($4000 + ssidx*$2000) -> HGR page 1 ($2000) ----
|
||||
lda ssidx
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl ; ssidx * $20 pages (carry clear, <=4 images)
|
||||
adc #$40
|
||||
sta src+1 ; source hi = $40 + ssidx*$20
|
||||
lda #$00
|
||||
sta src
|
||||
sta dst
|
||||
lda #$20
|
||||
sta dst+1 ; dest = $2000
|
||||
ldx #$20 ; 32 pages
|
||||
ldy #$00
|
||||
cpyl:
|
||||
lda (src),y
|
||||
sta (dst),y
|
||||
iny
|
||||
bne cpyl
|
||||
inc src+1
|
||||
inc dst+1
|
||||
dex
|
||||
bne cpyl
|
||||
|
||||
lda $c050 ; graphics
|
||||
lda $c054 ; page 1
|
||||
lda $c057 ; hi-res
|
||||
|
||||
jsr sswait
|
||||
|
||||
inc ssidx
|
||||
lda ssidx
|
||||
cmp #NIMAGES
|
||||
bcc cyc
|
||||
#if LOOPFLAG == 1
|
||||
jmp loaded ; wrap (re-uses the ssidx=0 init at loaded)
|
||||
#else
|
||||
lda $c051 ; text
|
||||
lda $c054
|
||||
jmp $e000 ; Applesoft cold start
|
||||
#endif
|
||||
|
||||
; ---- wait (returns); clears the key strobe first ----
|
||||
sswait:
|
||||
bit $c010
|
||||
#if WAITMODE == 1
|
||||
swk:
|
||||
lda $c000
|
||||
bpl swk
|
||||
bit $c010
|
||||
rts
|
||||
#endif
|
||||
#if WAITMODE == 2
|
||||
lda #WAITSECS
|
||||
sta $fd
|
||||
so:
|
||||
lda #$03
|
||||
sta $fc
|
||||
sm:
|
||||
ldx #$00
|
||||
sx:
|
||||
ldy #$00
|
||||
sy:
|
||||
dey
|
||||
bne sy
|
||||
dex
|
||||
bne sx
|
||||
dec $fc
|
||||
bne sm
|
||||
dec $fd
|
||||
bne so
|
||||
rts
|
||||
#endif
|
||||
#if WAITMODE == 3
|
||||
lda #WAITSECS
|
||||
sta $fd
|
||||
bo:
|
||||
lda #$03
|
||||
sta $fc
|
||||
bm:
|
||||
ldx #$00
|
||||
bx:
|
||||
lda $c000
|
||||
bmi bdone ; a key ends the slide
|
||||
ldy #$00
|
||||
by:
|
||||
dey
|
||||
bne by
|
||||
dex
|
||||
bne bx
|
||||
dec $fc
|
||||
bne bm
|
||||
dec $fd
|
||||
bne bo
|
||||
bdone:
|
||||
bit $c010 ; (also harmless on timeout)
|
||||
rts
|
||||
#endif
|
||||
|
||||
; advance the head one track (two half-steps), phase-overlap step (from hgr.s)
|
||||
seeknext:
|
||||
inc curtrk
|
||||
lda #$00
|
||||
sta $0a
|
||||
jsr onestep
|
||||
jsr onestep
|
||||
lda halftrk
|
||||
and #$03
|
||||
asl
|
||||
ora $2b
|
||||
tax
|
||||
lda $c080,x
|
||||
rts
|
||||
onestep:
|
||||
lda halftrk
|
||||
clc
|
||||
adc #$01
|
||||
and #$03
|
||||
asl
|
||||
ora $2b
|
||||
tax
|
||||
lda $c081,x
|
||||
ldx $0a
|
||||
lda ontable,x
|
||||
jsr wait
|
||||
lda halftrk
|
||||
and #$03
|
||||
asl
|
||||
ora $2b
|
||||
tax
|
||||
lda $c080,x
|
||||
ldx $0a
|
||||
lda offtable,x
|
||||
jsr wait
|
||||
inc halftrk
|
||||
inc $0a
|
||||
rts
|
||||
ontable: .byte $13,$0a,$08,$06
|
||||
offtable: .byte $46,$1a,$10,$0c
|
||||
wait:
|
||||
tay
|
||||
w1:
|
||||
ldx #$00
|
||||
w2:
|
||||
dex
|
||||
bne w2
|
||||
dey
|
||||
bne w1
|
||||
rts
|
||||
|
||||
psec: .byte $01 ; next physical sector (track 0 starts at 1)
|
||||
dpage: .byte $40 ; next destination page ($4000)
|
||||
halftrk: .byte $00
|
||||
curtrk: .byte $00
|
||||
Loading…
Add table
Add a link
Reference in a new issue