First public commit.
This commit is contained in:
parent
2a48f52979
commit
4bac9d83ed
288 changed files with 18417 additions and 1076 deletions
116
lenser/iigs/viewer/iigs.s
Normal file
116
lenser/iigs/viewer/iigs.s
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
; lenser -- Apple IIGS Super Hi-Res boot loader + viewer (8-bit, no GS/OS).
|
||||
;
|
||||
; The Disk II boot ROM (slot 6) loads track 0 sector 0 to $0800 and JMPs $0801.
|
||||
; This re-entrant loader reads the 32K SHR block (pixels $2000-$9CFF, SCBs
|
||||
; $9D00, palettes $9E00) into main RAM $2000-$9FFF, then copies it to AUX RAM
|
||||
; with SHR shadowing enabled -- so the writes mirror into bank $E1 (the SHR
|
||||
; screen) -- and turns SHR on (NEWVIDEO bit 7). All 8-bit, no 65C816 needed.
|
||||
|
||||
* = $0800
|
||||
.byte $01 ; ROM scratch (boot sector byte 0)
|
||||
entry: ; $0801, re-entered after every ROM read
|
||||
lda dpage
|
||||
cmp #$a0
|
||||
bcs done ; loaded $2000..$9FFF -> show it
|
||||
lda psec
|
||||
cmp #$10
|
||||
bcc readit ; sectors left on this track
|
||||
jsr seeknext ; finished a track -> step to the next
|
||||
lda #$00
|
||||
sta psec
|
||||
readit:
|
||||
lda psec
|
||||
sta $3d ; desired sector
|
||||
lda curtrk
|
||||
sta $41 ; desired track
|
||||
lda #$00
|
||||
sta $26 ; buffer lo
|
||||
lda dpage
|
||||
sta $27 ; buffer hi
|
||||
inc psec
|
||||
inc dpage
|
||||
ldx $2b ; slot*16 (set by boot ROM)
|
||||
jmp $c65c ; slot 6 ROM read; reads sector then JMP $0801
|
||||
|
||||
done:
|
||||
; Turn on Super Hi-Res (bit 7) AND linearize (bit 6) FIRST. With these
|
||||
; set, CPU writes to bank $E1 $2000-$9FFF are de-interleaved by hardware
|
||||
; into the megaII layout the video reads -- so we can copy our linear SHR
|
||||
; block straight in and it displays correctly.
|
||||
lda $c029
|
||||
ora #$c0
|
||||
sta $c029
|
||||
; copy 32K from bank $00 $2000 -> bank $E1 $2000 (65C816 block move)
|
||||
clc
|
||||
xce ; -> native mode
|
||||
rep #$30 ; 16-bit A/X/Y
|
||||
.al
|
||||
.xl
|
||||
lda #$7fff ; count-1 (32768 bytes)
|
||||
ldx #$2000 ; source offset
|
||||
ldy #$2000 ; dest offset
|
||||
.byte $54, $e1, $00 ; MVN src bank $00 -> dest bank $E1
|
||||
sep #$30 ; 8-bit
|
||||
.as
|
||||
.xs
|
||||
sec
|
||||
xce ; -> emulation mode
|
||||
lda $c034 ; border colour is the low nibble of $C034
|
||||
and #$f0
|
||||
sta $c034 ; black border
|
||||
hang:
|
||||
jmp hang
|
||||
|
||||
; advance the head one track (two half-steps), phase-overlap step.
|
||||
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
|
||||
dpage: .byte $20
|
||||
halftrk: .byte $00
|
||||
curtrk: .byte $00
|
||||
Loading…
Add table
Add a link
Reference in a new issue