Prince-of-Persia-Apple-II/02 POP Disk Routines/RW1835/POPBOOT35.S

211 lines
2.6 KiB
ArmAsm
Executable File

lst off
org $2000
*-------------------------------------------------
*
* 06/28/89 Prince of Persia boot code
* for rw18 3.5" version
*
* Last mod: 09/05/89
*
rw18 = $D000
slot = $FD
*-------------------------------------------------
*
* Tell RW18 which slot to use
*
start bit RW18temp
ldx #$FF
txs
lda $43 ;ProDOS boot drive
sta slot
* Clear screen, etc...
jsr init
* Check system for 128k of RAM
jsr check128k
* Determine if we are running on a GS
* and do GS specific stuff also...
jsr setGSflag
* Move rw18 to its home
jsr moverw18
* Start loading the game
jsr rw18
db 7,$A9 ;Bbund ID=$A9 for side one
jsr rw18 ;"seek" track one
db 2,0,1
jsr rw18 ;read in $EE00-FFFF
hex C3EE
jmp $EE00
*-------------------------------------------------
text = $fb2f
home = $fc58
vtab = $FB5B
cout = $FDF0
normal = $fe84
pr0 = $fe93
in0 = $fe89
init ldx #$ff
stx $4fb
stx $3f3
stx $3f4
stx $c000 ;80store off
stx $c002 ;RAMRD main
stx $c004 ;RAMWRT main
stx $c00c ;80col off
stx $c00e ;Altcharset off
stx $c081 ;write RAM, read ROM (2nd 4k bank)
jsr text
jsr home
jsr normal
jsr pr0
jsr in0
rts
*-------------------------------------------------
*
* Check to make sure //c or //e
* with 128k
*
check128k sta $C081
lda $FBB3 ;Apple // family ID byte
cmp #6
bne NOT128K ;Must be e/c/GS
bit $C017
bmi NOT128K
ldx #CHECKEND
:0 lda CHECKER,X
sta $180,X
dex
bpl :0
jsr $180
bcs NOT128K
rts
NOT128K jsr text
jsr home
lda #8
jsr vtab
ldy #0
:0 lda MEMTEXT,Y
beq *
jsr cout
cmp #$8D
bne :1
lda #4
sta $24
:1 iny
bne :0
MEMTEXT hex 8D
asc "REQUIRES A //C OR //E WITH 128K"
hex 00
*-------------------------------------------------
* Check for AUX memory routine
CHECKER lda #$EE
sta $C005
sta $C003
sta $0800
lda $0C00
cmp #$EE
bne :0
asl $0C00
lda $0800
cmp $0C00
beq :1
:0 clc
:1 sta $C004
sta $C002
rts
CHECKEND = *-CHECKER
*------------------------------------------------- setGSflag
*
* Set the GS? flag in rw18
*
setGSflag sta $C081
sec
jsr $FE1F
lda #$FF
adc #0
sta GS?
bpl :notGS
* Set background color to black, text to white
lda #$F0
sta $C022
* Set border color to black
lda $C034
and #$F0
sta $C034
:notGS rts
*------------------------------------------------- moverw18
*
* Move RW18 to it's final home in $D000
*
moverw18 bit $C08B
bit $C08B
ldy #0
:0 lda RW18temp,y
:1 sta $D000,y
iny
bne :0
inc :0+2
inc :1+2
bne :0
rts
*-------------------------------------------------
sav popboot35
*------------------------------------------------- EOF
dum *
RW18temp ds 3
GS? ds 1
dend
*-------------------------------------------------
lst off