working 128K check, new covers

This commit is contained in:
4am 2018-08-29 15:27:30 -04:00
parent b03ac885e4
commit 7cc325e35b
11 changed files with 156 additions and 184 deletions

View File

@ -27,16 +27,17 @@ dsk: md asm
cp res/_FileInformation.txt build/ cp res/_FileInformation.txt build/
$(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "res/PRODOS" >/dev/null $(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "res/PRODOS" >/dev/null
$(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "build/LAUNCHER.SYSTEM" >/dev/null $(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "build/LAUNCHER.SYSTEM" >/dev/null
$(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "res/games.conf" >/dev/null
$(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "res/COVER" >/dev/null $(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "res/COVER" >/dev/null
$(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "res/COVER.A2FC" >/dev/null $(CADIUS) ADDFILE build/"$(DISK)" "/${VOLUME}/" "res/COVER.A2FC" >/dev/null
$(CADIUS) CREATEFOLDER build/"$(DISK)" "/${VOLUME}/X/" >/dev/null $(CADIUS) CREATEFOLDER build/"$(DISK)" "/${VOLUME}/X/" >/dev/null
bin/do2po.py res/dsk/ build/po/ # bin/do2po.py res/dsk/ build/po/
rsync -a res/dsk/*.po build/po/ # rsync -a res/dsk/*.po build/po/
bin/extract.py build/po/ | sh # bin/extract.py build/po/ | sh >/dev/null
rm -f build/X/**/.DS_Store # rm -f build/X/**/.DS_Store
rm -f build/X/**/PRODOS # rm -f build/X/**/PRODOS
rm -f build/X/**/LOADER.SYSTEM # rm -f build/X/**/LOADER.SYSTEM
$(CADIUS) ADDFOLDER build/"$(DISK)" "/${VOLUME}/X" "build/X" # $(CADIUS) ADDFOLDER build/"$(DISK)" "/${VOLUME}/X" "build/X" >/dev/null
artwork: dsk artwork: dsk
# $(CADIUS) ADDFOLDER build/"$(DISK)" "/${VOLUME}/ARTWORK" "res/artwork" # $(CADIUS) ADDFOLDER build/"$(DISK)" "/${VOLUME}/ARTWORK" "res/artwork"

BIN
res/COVER

Binary file not shown.

Binary file not shown.

View File

@ -1,4 +1,4 @@
PRODOS=Type(FF),AuxType(0000),Access(C3) PRODOS=Type(FF),AuxType(0000),Access(C3)
LAUNCHER.SYSTEM=Type(FF),AuxType(2000),Access(C3) LAUNCHER.SYSTEM=Type(FF),AuxType(2000),Access(C3)
COVER=Type(06),AuxType(4000),Access(C3) COVER=Type(06),AuxType(2000),Access(C3)
COVER.A2FC=Type(06),AuxType(2000),Access(C3) COVER.A2FC=Type(06),AuxType(2000),Access(C3)

BIN
res/attic/COVER Normal file

Binary file not shown.

BIN
res/attic/COVER.A2FC Normal file

Binary file not shown.

View File

@ -2,63 +2,99 @@
!to "build/LAUNCHER.SYSTEM",plain !to "build/LAUNCHER.SYSTEM",plain
*=$2000 *=$2000
jmp Start
!source "src/constants.a" !source "src/constants.a"
!source "src/macros.a" !source "src/macros.a"
jsr DisableAccelerator ; set to 1 MHz
jsr Has128K ; check for 128K (64K is OK, we just filter out some games)
ror MachineStatus
jsr HasJoystick ; check for joystick (keyboard-only is OK, we just filter out some games)
ror MachineStatus
lda LCBANK1WRITE ; read ROM / write LC bank 1
lda LCBANK1WRITE
ldx #$00
FM lda FirstMover,x
sta $D000,x
inx
bne FM
; inc FM+2
; inc FM+5
; lda FM+5
; cmp #>LastMover
; bcc FM
jsr init ; initialize ProRWTS2 (bye bye ProDOS)
lda LCBANK1 ; read/write LC bank 1
lda LCBANK1
jmp Start
!source "src/memcheck.a" !source "src/memcheck.a"
!source "src/joystick.a" !source "src/joystick.a"
!source "src/normfast.a" !source "src/normfast.a"
!source "src/prorwts2.a"
!zone { FirstMover
!pseudopc $D000 {
!zone
Start Start
jsr $FE89 lda #$00 ; read first $2000 bytes
jsr $FE93 sta sizelo
jsr $FB2F lda #$20
jsr $FC58 sta sizehi
jsr Has128K lda #0 ; 0 = read into main memory
bmi @found128K sta auxreq
ldy #9 lda #cmdread ; read (instead of write)
- lda @s_needs128K,y sta reqcmd
sta $400,y bit MachineStatus
dey bvs @ShowCover128K
bpl - lda #<cover64 ; pointer to length-prefixed filename
@hang bmi @hang sta namlo
@s_needs128K lda #>cover64
!text "NEEDS 128K" sta namhi
@found128K jsr hddopendir ; call ProRWTS2
jsr DisableAccelerator clc
jsr HasJoystick bcc @Show
bcc @hang @ShowCover128K
ldy #10 inc auxreq ; 1 = read into aux memory
- lda @s_nojoystick,y lda #<cover128 ; pointer to length-prefixed filename
sta $400,y sta namlo
dey lda #>cover128
bpl - sta namhi
bmi @hang jsr hddopendir ; call ProRWTS2
@s_nojoystick lda #$20 ; read next $2000 bytes
!text "NO JOYSTICK" sta sizehi
} dec auxreq ; 0 = read into main memory
jsr hddrdwrpart ; call ProRWTS2
; jsr init ; initialize ProRWTS2 sta $C000 ; display double hi-res page 1
; lda $C08B sta $C00D
; lda $C08B sta $C05E
; lda #<cover sta $C001
; sta namlo @Show
; lda #>cover sta $C057
; sta namhi sta $C052
; lda #0 sta $C054
; sta sizelo sta $C050
; lda #$20
; sta sizehi bit $C010
; jsr hddopendir - lda $C000
; bit $C055 bpl -
; bit $C052 bit $C010
; bit $C057 brk
; bit $C050
;cover !byte cover_e-cover_b cover64
;cover_b !text "COVER" !byte cover64_e-cover64_b
;cover_e cover64_b
!text "COVER"
cover64_e
cover128
!byte cover128_e-cover128_b
cover128_b
!text "COVER.A2FC"
cover128_e
}
LastMover
;LoadDHGR ;LoadDHGR
; sta $C000 ; sta $C000

View File

@ -16,8 +16,10 @@ SLOT3STATUS = $C017 ; read high bit only
LCBANK2READ = $C080 ; read once to R RAM bank 2 / no write LCBANK2READ = $C080 ; read once to R RAM bank 2 / no write
ROMIN = $C081 ; read twice to R ROM / W RAM bank 2 ROMIN = $C081 ; read twice to R ROM / W RAM bank 2
LCBANK2 = $C083 ; read twice to R/W RAM bank 2 ROMONLY = $C082 ; read once to R ROM / no write
;LCBANK2 = $C083 ; read twice to R/W RAM bank 2
LCBANK1READ = $C088 ; read once to R RAM bank 1 / no write LCBANK1READ = $C088 ; read once to R RAM bank 1 / no write
LCBANK1WRITE = $C089 ; read twice to R ROM / W RAM bank 1
LCBANK1 = $C08B ; read twice to R/W RAM bank 1 LCBANK1 = $C08B ; read twice to R/W RAM bank 1
; ROM ; ROM
@ -29,3 +31,5 @@ PTR = $02
SRC = $04 SRC = $04
DEST = $06 DEST = $06
SAVE = $08 SAVE = $08
MachineStatus =$FF ; bit 7 = 1 if machine has joystick
; bit 6 = 1 if machine has 128K

View File

@ -3,8 +3,8 @@
; Checks whether computer has joystick connected ; Checks whether computer has joystick connected
; ;
; in: none ; in: none
; out: C clear if joystick found ; out: C set if joystick found
; C set if no joystick found ; C clear if no joystick found
; other flags clobbered ; other flags clobbered
; A,X clobbered ; A,X clobbered
; Y preserved ; Y preserved
@ -13,28 +13,30 @@
; (c) 1989 Broderbund Software ; (c) 1989 Broderbund Software
; https://github.com/jmechner/Prince-of-Persia-Apple-II/blob/master/01%20POP%20Source/Source/GRAFIX.S#L1225 ; https://github.com/jmechner/Prince-of-Persia-Apple-II/blob/master/01%20POP%20Source/Source/GRAFIX.S#L1225
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
!zone {
HasJoystick HasJoystick
lda #0 lda #0
sta joyX sta @joyX
sta joyY sta @joyY
lda $C070 ; reset analog input timers lda $C070 ; reset analog input timers
@loop ldx #1 @loop ldx #1
@1 lda $C064,x ; check timer input @1 lda $C064,x ; check timer input
bpl @beat bpl @beat
inc joyX,x ; still high, increment counter inc @joyX,x ; still high, increment counter
@nextpdl dex @nextpdl dex
bpl @1 bpl @1
lda $C064 lda $C064
ora $C065 ora $C065
bpl @rts ; both inputs low, we're done bpl @yes ; both inputs low, we're done
lda joyX lda @joyX
ora joyY ora @joyY
bpl @loop ; do it again bpl @loop ; do it again
sec @no clc
+HIDE_NEXT_BYTE +HIDE_NEXT_BYTE
@rts clc @yes sec
rts rts
@beat nop @beat nop
bpl @nextpdl ; kill time bpl @nextpdl ; kill time
joyX !byte 0 @joyX !byte 0
joyY !byte 0 @joyY !byte 0
}

View File

@ -1,121 +1,52 @@
Has128KStatus =$FF ; [byte] set by Has128K
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; Has128K ; Has128K
; Checks whether computer has auxiliary memory (i.e. 128K) ; Checks whether computer has functioning auxiliary memory (128K)
; ;
; in: none ; in: none
; out: zero page $FF has ; out: C set if 128K detected
; $00 = not a //e ; C clear if 128K not detected
; $20 = //e but no 80-col card ; all other flags and registers clobbered
; $40 = 80-col card but no aux mem ; zp $80-$9F clobbered
; $80 = aux mem detected (yay!) ; ROM in memory (not LC RAM bank)
; all other flags clobbered
; all registers clobbered
; zero page $1A-$1D clobbered
; ;
; original was AUX.MEM.CHECK from "Extra K" ; adapted from "Prince of Persia" by Jordan Mechner
; (c) 1986 Beagle Bros ; (c) 1989 Broderbund Software
; written by Alan Bird and Mark Simonsen, 1986-03-28 ; https://github.com/jmechner/Prince-of-Persia-Apple-II/blob/master/01%20POP%20Source/Source/BOOT.S#L119
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
!zone {
Has128K Has128K
php sta ROMONLY ; need ROM for machine ID byte
sei
lda $E000 ; store values from language card
sta $1A ; (used later to determine which
lda $D000 ; RAM bank is active and reset it)
sta $1B
lda $D400
sta $1C
lda $D800
sta $1D
lda ROMIN
lda ROMIN
lda MACHINEID lda MACHINEID
cmp #$06 cmp #6
bne @noiie bne @no ; earlier than //e -> no 128K
lda SLOT3STATUS lda SLOT3STATUS
bmi @no80col bmi @no ; no 80-column card -> no 128K
lda AUXMEMSTATUS ldx #@checklen
bmi @yesauxmem - lda @checker,x
lda AUXZPSTATUS sta $80,x
bmi @yesauxmem dex
ldy #$28
- ldx @checker,Y
lda $100,Y
sta @checker,Y
txa
sta $100,Y
dey
bpl - bpl -
jmp $100 jmp $80 ; check if auxmem actually works
@postcheck
ldy #$28
- lda @checker,Y
sta $100,Y
dey
bpl -
bcs @noauxmem
@yesauxmem
lda #$80
+HIDE_NEXT_2_BYTES
@noauxmem
lda #$40
+HIDE_NEXT_2_BYTES
@no80col
lda #$20
+HIDE_NEXT_2_BYTES
@noiie
lda #$00
sta Has128KStatus
lda $E000
cmp $1A
bne @tryRAMbank1
lda $D000
cmp $1B
bne @tryRAMbank1
lda $D400
cmp $1C
bne @tryRAMbank1
lda $D800
cmp $1D
beq @done
@tryRAMbank1
lda LCBANK1READ
lda $E000
cmp $1A
bne @tryRAMbank2
lda $D000
cmp $1B
bne @tryRAMbank2
lda $D400
cmp $1C
bne @tryRAMbank2
lda $D800
cmp $1D
beq @done
@tryRAMbank2
lda LCBANK2READ
@done
plp
lda Has128KStatus
rts
@checker @checker
lda #$EE lda #$EE
sta WRITEAUXMEM sta WRITEAUXMEM
sta READAUXMEM sta READAUXMEM
sta $800 sta $0C00
lda $C00 sta $0800
lda $0C00
cmp #$EE cmp #$EE
bne @auxworks bne @no
asl $C00 asl $0C00
lda $800 asl
cmp $C00 cmp $0C00
bne @auxworks bne @no
sec cmp $0800
bne @yes
@no clc
+HIDE_NEXT_BYTE +HIDE_NEXT_BYTE
@auxworks @yes sec
clc @finish sta WRITEMAINMEM
sta WRITEMAINMEM
sta READMAINMEM sta READMAINMEM
jmp @postcheck rts
@checklen=*-@checker
}

View File

@ -13,7 +13,7 @@ ver_02 = 1
;place no code before init label below. ;place no code before init label below.
;user-defined options ;user-defined options
verbose_info = 1 ;set to 1 to enable display of memory usage verbose_info = 0 ;set to 1 to enable display of memory usage
enable_floppy = 0 ;set to 1 to enable floppy drive support enable_floppy = 0 ;set to 1 to enable floppy drive support
poll_drive = 0 ;set to 1 to check if disk is in drive, recommended if allow_multi is enabled poll_drive = 0 ;set to 1 to check if disk is in drive, recommended if allow_multi is enabled
override_adr = 0 ;set to 1 to require an explicit load address override_adr = 0 ;set to 1 to require an explicit load address
@ -25,10 +25,10 @@ ver_02 = 1
;seeking with aligned_read=1 requires non-zero offset ;seeking with aligned_read=1 requires non-zero offset
allow_multi = 0 ;set to 1 to allow multiple floppies allow_multi = 0 ;set to 1 to allow multiple floppies
check_chksum = 0 ;set to 1 to enforce checksum verification for floppies check_chksum = 0 ;set to 1 to enforce checksum verification for floppies
allow_subdir = 0 ;set to 1 to allow opening subdirectories to access files allow_subdir = 1 ;set to 1 to allow opening subdirectories to access files
might_exist = 0 ;set to 1 if file is not known to always exist already might_exist = 0 ;set to 1 if file is not known to always exist already
;makes use of status to indicate success or failure ;makes use of status to indicate success or failure
allow_aux = 0 ;set to 1 to allow read/write directly to/from aux memory allow_aux = 1 ;set to 1 to allow read/write directly to/from aux memory
;requires load_high to be set for arbitrary memory access ;requires load_high to be set for arbitrary memory access
;else driver must be running from same memory target ;else driver must be running from same memory target
;i.e. running from main if accessing main, running from aux if accessing aux ;i.e. running from main if accessing main, running from aux if accessing aux
@ -38,11 +38,11 @@ ver_02 = 1
always_trees = 0 ;set to 1 if the only file access involves tree files always_trees = 0 ;set to 1 if the only file access involves tree files
;not compatible with allow_subdir, allow_saplings ;not compatible with allow_subdir, allow_saplings
detect_treof = 0 ;detect EOF during read of tree files detect_treof = 0 ;detect EOF during read of tree files
allow_sparse = 0 ;enable support for reading sparse files allow_sparse = 1 ;enable support for reading sparse files
bounds_check = 0 ;set to 1 to prevent access beyond the end of the file bounds_check = 1 ;set to 1 to prevent access beyond the end of the file
;but limits file size to 64k-2 bytes. ;but limits file size to 64k-2 bytes.
no_interrupts= 1 ;set to 1 to disable interrupts across calls no_interrupts= 0 ;set to 1 to disable interrupts across calls
detect_err = 1 ;set to 1 to to detect errors in no_interrupt mode detect_err = 0 ;set to 1 to to detect errors in no_interrupt mode
swap_zp = 0 ;set to 1 to include code to preserve zpage swap_zp = 0 ;set to 1 to include code to preserve zpage
;used only by rwts_mode ;used only by rwts_mode
rwts_mode = 0 ;set to 1 to enable emulation of DOS RWTS when running from hard disk rwts_mode = 0 ;set to 1 to enable emulation of DOS RWTS when running from hard disk
@ -2102,13 +2102,11 @@ hddfoundname iny
!if (allow_subdir + allow_saplings + allow_trees) > 0 { !if (allow_subdir + allow_saplings + allow_trees) > 0 {
sta hdddirbuf sta hdddirbuf
!if fast_trees = 0 { !if fast_trees = 0 {
sta treeblklo
} ;fast_trees } ;fast_trees
iny iny
lda (bloklo), y lda (bloklo), y
sta hdddirbuf + 256 sta hdddirbuf + 256
!if fast_trees = 0 { !if fast_trees = 0 {
sta treeblkhi
} ;fast_trees } ;fast_trees
!if (allow_trees and always_trees) = 0 { !if (allow_trees and always_trees) = 0 {
plp plp