Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Chris Torrence 2020-04-18 18:10:31 -06:00
commit 5a6b0e66c5
33 changed files with 695 additions and 144 deletions

View File

@ -1 +1 @@
# Pitch Dark games list # key=game directory, value=title AMFV=A MIND FOREVER VOYAGING BALLYHOO=BALLYHOO BEYOND.ZORK=BEYOND ZORK: THE COCONUT OF QUENDOR BORDER.ZONE=BORDER ZONE: A GAME OF INTRIGUE BUREAUCRACY=BUREAUCRACY: a paranoid fantasy CUTTHROATS=CUTTHROATS DEADLINE=DEADLINE: an Interlogic mystery ENCHANTER=ENCHANTER HGTTG=THE HITCHHIKER'S GUIDE TO THE GALAXY HOLLYWOOD=HOLLYWOOD HIJINX: a zany treasure hunt INFIDEL=INFIDEL LGOP=LEATHER GOODESSES OF PHOBOS: a racy space-age spoof LURKING.HORROR=THE LURKING HORROR MINI.ZORK=MINI-ZORK I: THE GREAT UNDERGROUND EMPIRE MOONMIST=MOONMIST NORD.AND.BERT=NORD AND BERT COULDN'T MAKE HEAD OR TAIL OF IT PLANETFALL=PLANETFALL PLUNDERED=PLUNDERED HEARTS SEASTALKER=SEASTALKER: <YOUR NAME> AND THE ULTRAMARINE BIOCEPTOR SHERLOCK=SHERLOCK: THE RIDDLE OF THE CROWN JEWELS SORCERER=SORCERER SPELLBREAKER=SPELLBREAKER STARCROSS=STARCROSS STATIONFALL=STATIONFALL SUSPECT=SUSPECT SUSPENDED=SUSPENDED TRINITY=TRINITY WISHBRINGER=WISHBRINGER: THE MAGICK STONE OF DREAMS WITNESS=THE WITNESS: an Interlogic mystery ZORK.I=ZORK I: THE GREAT UNDERGROUND EMPIRE ZORK.II=ZORK II: THE WIZARD OF FROBOZZ ZORK.III=ZORK III: THE DUNGEON MASTER ZTUU=ZORK: THE UNDISCOVERED UNDERGROUND [eof]
# Pitch Dark games list # key=game directory, value=title AMFV=A MIND FOREVER VOYAGING BALLYHOO=BALLYHOO BEYOND.ZORK=BEYOND ZORK: THE COCONUT OF QUENDOR BORDER.ZONE=BORDER ZONE: A GAME OF INTRIGUE BUREAUCRACY=BUREAUCRACY: a paranoid fantasy CUTTHROATS=CUTTHROATS DEADLINE=DEADLINE: an Interlogic mystery ENCHANTER=ENCHANTER HGTTG=THE HITCHHIKER'S GUIDE TO THE GALAXY HOLLYWOOD=HOLLYWOOD HIJINX: a zany treasure hunt INFIDEL=INFIDEL LGOP=LEATHER GOODESSES OF PHOBOS: a racy space-age spoof LURKING.HORROR=THE LURKING HORROR MINI.ZORK=MINI-ZORK I: THE GREAT UNDERGROUND EMPIRE MINI.ZORK.2=MINI-ZORK II: something something MOONMIST=MOONMIST NORD.AND.BERT=NORD AND BERT COULDN'T MAKE HEAD OR TAIL OF IT PLANETFALL=PLANETFALL PLUNDERED=PLUNDERED HEARTS SEASTALKER=SEASTALKER: <YOUR NAME> AND THE ULTRAMARINE BIOCEPTOR SHERLOCK=SHERLOCK: THE RIDDLE OF THE CROWN JEWELS SORCERER=SORCERER SPELLBREAKER=SPELLBREAKER STARCROSS=STARCROSS STATIONFALL=STATIONFALL SUSPECT=SUSPECT SUSPENDED=SUSPENDED TRINITY=TRINITY WISHBRINGER=WISHBRINGER: THE MAGICK STONE OF DREAMS WITNESS=THE WITNESS: an Interlogic mystery ZORK.I=ZORK I: THE GREAT UNDERGROUND EMPIRE ZORK.II=ZORK II: THE WIZARD OF FROBOZZ ZORK.III=ZORK III: THE DUNGEON MASTER ZORK.ZERO=ZORK ZERO: something something ZTUU=ZORK: THE UNDISCOVERED UNDERGROUND [eof]

View File

@ -1 +1 @@
# Pitch Dark preferences file # Do not edit by hand. # Or do. I'm a comment, not a cop. # value=0|1 FORCE40COLUMNS=0 FORCEUPPERCASE=0 SCRIPTTOFILE=0 AUTOSCRIPT=0 # value=game directory LASTPLAYED=ZORK.I # key=game directory, value=filename of selected version AMFV=R79.DEPROT.Z4 BALLYHOO=R97.851218.Z3 BEYOND.ZORK=R57.871221.Z5 BORDER.ZONE=R9.871008.Z5 BUREAUCRACY=R116.DEPROT.Z4 CUTTHROATS=R23.DEPROT.Z3 DEADLINE=R27.831005.Z3 ENCHANTER=R29.860820.Z3 HGTTG=R59.851108.Z3 HOLLYWOOD=R37.861215.Z3 INFIDEL=R22.830916.Z3 LGOP=R59.860730.Z3 LURKING.HORROR=R221.DEPROT.Z3 MINI.ZORK=R34.871124.Z3 7.851218.Z3 BUREAUCRACY=R116.DEPROT.Z4 7.851218.Z3 CUTTHROATS=R23.DEPROT.Z3 PLANETFALL=R37.851003.Z3 PLUNDERED=R26.870730.Z3 SEASTALKER=R16B.850603.Z3 SHERLOCK=R26.880127.Z5 SORCERER=R18.DEPROT.Z3 SPELLBREAKER=R87.DEPROT.Z3 STARCROSS=R17.DEPROT.Z3 STATIONFALL=R107.DEPROT.Z3 BEYOND.ZORK=R57.871221.Z5 BUREAUCRACY=R116.DEPROT.Z4 BEYOND.ZORK=R57.871221.Z5 CUTTHROATS=R23.DEPROT.Z3 BEYOND.ZORK=R57.871221.Z5 DEADLINE=R27.831005.Z3 WISHBRINGER=R69.850920.Z3 BEYOND.ZORK=R57.871221.Z5 HGTTG=R59.851108.Z3 ZORK.I=R88.840726.Z3 ZORK.II=R48.840904.Z3 ZORK.III=R17.840727.Z3 ZTUU=R16.970828.Z5 [eof]
# Pitch Dark preferences file # Do not edit by hand. # Or do. I'm a comment, not a cop. # value=0|1 FORCE40COLUMNS=0 FORCEUPPERCASE=0 SCRIPTTOFILE=0 AUTOSCRIPT=0 # value=game directory LASTPLAYED=ZORK.I # key=game directory, value=filename of selected version AMFV=R79.DEPROT.Z4 BALLYHOO=R99.861014.Z3 BEYOND.ZORK=R60.880610.Z5 BORDER.ZONE=R9.871008.Z5 BORDER.ZONE=R9.871008.Z5 BUREAUCRACY=R116.DEPROT.Z4 BORDER.ZONE=R9.871008.Z5 CUTTHROATS=R23.DEPROT.Z3 BORDER.ZONE=R9.871008.Z5 DEADLINE=R27.831005.Z3 ENCHANTER=R29.860820.Z3 HGTTG=R60.861002.Z3 HOLLYWOOD=R37.861215.Z3 INFIDEL=R22.830916.Z3 LGOP=R59.860730.Z3 LURKING.HORROR=R221.DEPROT.Z3 MINI.ZORK=R34.871124.Z3 MINI.ZORK.2=R2.871123.Z3 MOONMIST=R13.880501.Z3 BUREAUCRACY=R116.DEPROT.Z4 BUREAUCRACY=R116.DEPROT.Z4 7.851218.Z3 PLUNDERED=R26.870730.Z3 SEASTALKER=R18.850919.Z3 SHERLOCK=R4.880324.Z5 SORCERER=R18.DEPROT.Z3 SPELLBREAKER=R87.DEPROT.Z3 STARCROSS=R18.DEPROT.Z3 STATIONFALL=R107.DEPROT.Z3 BUREAUCRACY=R116.DEPROT.Z4 CUTTHROATS=R23.DEPROT.Z3 BUREAUCRACY=R116.DEPROT.Z4 DEADLINE=R27.831005.Z3 TRINITY=R15.870628.Z4 WISHBRINGER=R69.850920.Z3 BUREAUCRACY=R116.DEPROT.Z4 HGTTG=R59.851108.Z3 ZORK.I=R88.840726.Z3 ZORK.II=R48.840904.Z3 ZORK.III=R25.860811.Z3 ZORK.ZERO=R153.880510.Z5 ZTUU=R16.970828.Z5 [eof]

View File

@ -23,11 +23,12 @@
lot, trying to set you up for a permanent slot in the freak show.
[versions]
R99.861014.Z3=Release 99 / Serial number 861014
R97.851218.Z3=Release 97 / Serial number 851218
[options]
ARTWORK=1
CLUES=1
VERSIONS=0
VERSIONS=1
[eof]

View File

@ -41,6 +41,7 @@
increases and their character grows in strength and power.
[versions]
R60.880610.Z5=Release 60 / Serial number 880610
R57.871221.Z5=Release 57 / Serial number 871221
R51.870923.Z5=Release 51 / Serial number 870923
R49.870917.Z5=Release 49 / Serial number 870917

View File

@ -40,6 +40,7 @@
are in the paranoid's house, he will not ask you any questions.
[versions]
R160.DEPROT.Z4=Release 160 / Licence number 880521 (patched)
R116.DEPROT.Z4=Release 116 / Licence number 870602 (patched)
R86.DEPROT.Z4=Release 86 / Licence number 870212 (patched)

View File

@ -25,11 +25,12 @@
which item you are shown, you can visit either wreck.
[versions]
R25.DEPROT.Z3=Release 25 / Serial number 840917 (patched)
R23.DEPROT.Z3=Release 23 / Serial number 840809 (patched)
[options]
ARTWORK=1
CLUES=1
VERSIONS=0
VERSIONS=1
[eof]

View File

@ -20,6 +20,7 @@
you in.
[versions]
R28.850129.Z3=Release 28 / Serial number 850129
R27.831005.Z3=Release 27 / Serial number 831005
R26.821108.Z3=Release 26 / Serial number 821108
R22.820809.Z3=Release 22 / Serial number 820809

View File

@ -28,6 +28,7 @@
certainly end up getting misled.
[versions]
R60.861002.Z3=Release 60 / Serial number 861002
R59.851108.Z3=Release 59 / Serial number 851108
R58.851002.Z3=Release 58 / Serial number 851002
R56.841221.Z3=Release 56 / Serial number 841221

20
res/text/mini.zork.2.txt Normal file
View File

@ -0,0 +1,20 @@
[info]
MINI-ZORK II: something something
by Dave Lebling and Marc Blank
Copyright sometime Infocom, Inc.
Genre: fantasy
Difficulty: ^^^&&
[description]
text
[versions]
R2.871123.Z3=Release 2 / Serial number 871123
[options]
ARTWORK=0
CLUES=0
VERSIONS=0
[eof]

View File

@ -19,10 +19,11 @@
[versions]
R34.871124.Z3=Release 34 / Serial number 871124
R2.840207.Z3=Release 2 / Serial number 840207
[options]
ARTWORK=0
CLUES=0
VERSIONS=0
VERSIONS=1
[eof]

View File

@ -26,6 +26,7 @@
soundly. The next victim might be you.
[versions]
R13.880501.Z3=Release 13 / Serial number 880501
R9.861022.Z3=Release 9 / Serial number 861022
R4.860918.Z3=Release 4 / Serial number 860918

View File

@ -43,11 +43,12 @@
mind is constantly working on artful new turns of phrase.
[versions]
R20.870722.Z4=Release 19 / Serial number 870722
R19.870722.Z4=Release 19 / Serial number 870722
[options]
ARTWORK=1
CLUES=1
VERSIONS=0
VERSIONS=1
[eof]

View File

@ -22,6 +22,7 @@
the cosmic cookie crumbles.
[versions]
R39.880501.Z3=Release 39 / Serial number 880501
R37.851003.Z3=Release 37 / Serial number 851003
R29.840118.Z3=Release 29 / Serial number 840118
R26.831014.Z3=Release 26 / Serial number 831014

View File

@ -22,10 +22,10 @@
shark bait!
[versions]
R18.850919.Z3=Release 18 / Serial number 850919
R16B.850603.Z3=Release 16 / Serial number 850603
R16A.850515.Z3=Release 16 / Serial number 850515
R15B.840522.Z3=Release 15 / Serial number 840522
R15A.840501.Z3=Release 15 / Serial number 840501
R15.840501.Z3=Release 15 / Serial number 840501
R86.840320.Z3=Release 86 / Serial number 840320
[options]

View File

@ -48,7 +48,9 @@
And now, come, Watson! The game is afoot...
[versions]
R4.880324.Z5=Release 4 / Serial number 880324
R26.880127.Z5=Release 26 / Serial number 880127
R22.880112.Z5=Release 22 / Serial number 880112
R21.871214.Z5=Release 21 / Serial number 871214
[options]

View File

@ -21,6 +21,7 @@
course for a UM, you may enter any coordinates for R, THETA, and PHI.
[versions]
R18.DEPROT.Z3=Release 18 / Serial number 830114 (patched)
R17.DEPROT.Z3=Release 17 / Serial number 821021 (patched)
R15.DEPROT.Z3=Release 15 / Serial number 820901 (patched)

View File

@ -23,6 +23,7 @@
invitation to the social event of the season. Then spoil it all.
[versions]
R18.850222.Z3=Release 18 / Serial number 850222
R14.841005.Z3=Release 14 / Serial number 841005
[options]

View File

@ -24,8 +24,7 @@
Good morning.
[versions]
R8B.840521.Z3=Release 8 / Serial number 840521
R8A.830521.Z3=Release 8 / Serial number 830521
R8.830521.Z3=Release 8 / Serial number 830521
R7.830419.Z3=Release 7 / Serial number 830419
R5.830222.Z3=Release 5 / Serial number 830222

View File

@ -22,6 +22,7 @@
puts the course of history in your hands.
[versions]
R15.870628.Z4=Release 15 / Serial number 870628
R12.860926.Z4=Release 12 / Serial number 860926
R11.860509.Z4=Release 11 / Serial number 860509

View File

@ -23,6 +23,7 @@
because you are The Witness.
[versions]
R23.840925.Z3=Release 23 / Serial number 840925
R22.840924.Z3=Release 22 / Serial number 840924
R21.831208.Z3=Release 21 / Serial number 831208
R20.831119.Z3=Release 20 / Serial number 831119

View File

@ -22,6 +22,7 @@
all.
[versions]
R25.860811.Z3=Release 25 / Serial number 860811
R17.840727.Z3=Release 17 / Serial number 840727
R16.830410.Z3=Release 16 / Serial number 830410
R15B.840518.Z3=Release 15 / Serial number 840518

20
res/text/zork.zero.txt Normal file
View File

@ -0,0 +1,20 @@
[info]
ZORK ZERO: something something
by people
Copyright some time Infocom, Inc.
Genre: fantasy
Difficulty: ^^^&&
[description]
text
[versions]
R153.880510.Z5=Release 153 / Serial number 880510
[options]
ARTWORK=0
CLUES=0
VERSIONS=0
[eof]

View File

@ -17,7 +17,7 @@
;~7400...... - program data (approximate)
;
kPitchDarkBinaryAddress = $3F55
kPitchDarkBinaryAddress = $3F2D
kGameInfoBuffer = $0800 ; used by LoadGameInfo
kProDOSFileBuffer = $1C00 ; 1K buffer for ProDOS MLI calls

View File

@ -1,6 +1,6 @@
;license:BSD-3-Clause
;extended open/read/write binary file in ProDOS filesystem, with random access
;copyright (c) Peter Ferrie 2013-18
;copyright (c) Peter Ferrie 2013-19
ver_02 = 1
@ -180,7 +180,6 @@ tmp = $8
init lda DEVNUM
sta x80_parms + 1
sta unrunit
and #$70
pha
ldx #1
@ -200,6 +199,9 @@ init lda DEVNUM
;find current directory name in directory
sec
php
readblock jsr MLI
!byte $80
!word x80_parms
@ -221,7 +223,8 @@ inextent ldy #0
;match failed, move to next directory in this block, if possible
- pla
clc
skiphdr clc
lda bloklo
adc #ENTRY_SIZE
sta bloklo
@ -250,7 +253,17 @@ ifoundname dex
lda (namlo), y
cmp #'/'
bne -
tya
pla
and #$20 ;Volume Directory Header XOR subdirectory
beq adjpath
pla
clc
php
lsr
bcc skiphdr
inx
adjpath tya
eor #$ff
adc sizelo
sta sizelo
@ -258,9 +271,8 @@ ifoundname dex
tya
adc namlo
sta namlo
pla
and #$20 ;Volume Directory Header XOR subdirectory
bne ++
dex
beq ++
;cache block number of current directory
;as starting position for subsequent searches
@ -276,22 +288,79 @@ ifoundname dex
stx x80_parms + 5
++ lda sizelo
bne readblock
pla
;unit to slot for SmartPort interface
;unit to slot for ProDOS interface
+++ pla
lsr
lsr
lsr
tax
lsr
ora #$c0
ldy DEVADR01HI, x
cpy #$c8
bcs set_slot
tya
set_slot sta slot + 2
sta unrentry + 1
tay
ldx DEVADR01HI, y
cpx #$c8
bcc set_slot
;find SmartPort device for basic MicroDrive support
ldx #$c8
- dex
stx blokhi
ldy #0
sty bloklo
iny
lda (bloklo), y
cmp #$20
bne -
iny
iny
lda (bloklo), y
bne -
iny
iny
lda (bloklo), y
cmp #3
bne -
ldy #$ff
lda (bloklo), y
beq -
set_slot stx slot + 2
stx unrentry1 + 2
stx unrentry3 + 2
slot ldx $cfff
;use SmartPort entrypoint instead
inx
inx
inx
stx unrentry1 + 1
stx unrentry3 + 1
ldx #2
stx x80_parms + 4
lda #0
sta x80_parms + 5
jsr MLI
!byte $80
!word x80_parms
iterunit inc unrunit2
unrentry1 jsr $d1d1
!byte cmdread
!word unrpacket
bcs iterunit
ldy #$0f
- lda readbuff + 4, y
cmp readbuff + $204, y
bne iterunit
dey
bpl -
!if load_aux = 1 {
sta SETAUXWR + (load_banked * 4) ;SETAUXWR or SETAUXZP
} ;load_aux
@ -330,8 +399,6 @@ yyy
;copy new RWTS and interpreter support routines
slot lda $cfff
sta unrentry
ldy #0
- lda unrelochdd, y
sta reloc, y
@ -1554,22 +1621,32 @@ hddreaddirsect
sty adrhi
hddseekrd ldy #cmdread
!if (aligned_read + enable_write) > 1 {
hddseekrdwr sty command
hddseekrdwr sty pcommand
} else { ;not (aligned_read or enable_write)
sty command
sty pcommand
hddseekrdwr
} ;aligned_read and enable_write
stx bloklo
sta blokhi
stx pblock
sta pblock + 1
hddcallsp
unrunit = unrelochdd + (* + 1 - reloc)
lda #$d1
sta unit
lda adrhi
sta paddr + 1
lda adrlo
sta paddr
unrentry3 = unrelochdd + (* - reloc)
jsr $d1d1
pcommand !byte 0
!word packet
rts
unrentry = unrelochdd + (* + 1 - reloc)
jmp $d1d1
unrpacket = unrelochdd + (* - reloc)
packet !byte 3
unrunit2 = unrelochdd + (* - reloc)
!byte 0
paddr !word readbuff + $200
pblock !byte 2, 0, 0
casemap
ora #$80
@ -1734,7 +1811,7 @@ hddsavetreehi = * + 1
lda hdddirbuf, y
ora hdddirbuf + 256, y
beq sparseblk
inc command
inc pcommand
copyblock ldy #0
- lda $900, y
@ -1792,11 +1869,11 @@ sparseblk ldx #2
lda adrhi
cmp #(>hddencbuf) + 2
bne --
ldx bloklo
ldx pblock
inx
bne +
inc blokhi
+ lda blokhi
inc pblock + 1
+ lda pblock + 1
dec ldrhi
bne ---
@ -1825,7 +1902,7 @@ foundbit lda (adrlo), y
jmp copyblock
writeimm sta adrhi
inc command
inc pcommand
jmp hddcallsp
readpart lda istree

View File

@ -1,6 +1,6 @@
;license:BSD-3-Clause
;extended open/read/write binary file in ProDOS filesystem, with random access
;copyright (c) Peter Ferrie 2013-18
;copyright (c) Peter Ferrie 2013-19
ver_02 = 1
@ -180,7 +180,6 @@ tmp = $8
init lda DEVNUM
sta x80_parms + 1
sta unrunit
and #$70
pha
ldx #1
@ -200,6 +199,9 @@ init lda DEVNUM
;find current directory name in directory
sec
php
readblock jsr MLI
!byte $80
!word x80_parms
@ -221,7 +223,8 @@ inextent ldy #0
;match failed, move to next directory in this block, if possible
- pla
clc
skiphdr clc
lda bloklo
adc #ENTRY_SIZE
sta bloklo
@ -250,7 +253,17 @@ ifoundname dex
lda (namlo), y
cmp #'/'
bne -
tya
pla
and #$20 ;Volume Directory Header XOR subdirectory
beq adjpath
pla
clc
php
lsr
bcc skiphdr
inx
adjpath tya
eor #$ff
adc sizelo
sta sizelo
@ -258,9 +271,8 @@ ifoundname dex
tya
adc namlo
sta namlo
pla
and #$20 ;Volume Directory Header XOR subdirectory
bne ++
dex
beq ++
;cache block number of current directory
;as starting position for subsequent searches
@ -276,22 +288,79 @@ ifoundname dex
stx x80_parms + 5
++ lda sizelo
bne readblock
pla
;unit to slot for SmartPort interface
;unit to slot for ProDOS interface
+++ pla
lsr
lsr
lsr
tax
lsr
ora #$c0
ldy DEVADR01HI, x
cpy #$c8
bcs set_slot
tya
set_slot sta slot + 2
sta unrentry + 1
tay
ldx DEVADR01HI, y
cpx #$c8
bcc set_slot
;find SmartPort device for basic MicroDrive support
ldx #$c8
- dex
stx blokhi
ldy #0
sty bloklo
iny
lda (bloklo), y
cmp #$20
bne -
iny
iny
lda (bloklo), y
bne -
iny
iny
lda (bloklo), y
cmp #3
bne -
ldy #$ff
lda (bloklo), y
beq -
set_slot stx slot + 2
stx unrentry1 + 2
stx unrentry3 + 2
slot ldx $cfff
;use SmartPort entrypoint instead
inx
inx
inx
stx unrentry1 + 1
stx unrentry3 + 1
ldx #2
stx x80_parms + 4
lda #0
sta x80_parms + 5
jsr MLI
!byte $80
!word x80_parms
iterunit inc unrunit2
unrentry1 jsr $d1d1
!byte cmdread
!word unrpacket
bcs iterunit
ldy #$0f
- lda readbuff + 4, y
cmp readbuff + $204, y
bne iterunit
dey
bpl -
!if load_aux = 1 {
sta SETAUXWR + (load_banked * 4) ;SETAUXWR or SETAUXZP
} ;load_aux
@ -319,8 +388,6 @@ set_slot sta slot + 2
;copy new RWTS and interpreter support routines
slot lda $cfff
sta unrentry
ldy #0
- lda unrelochdd, y
sta reloc, y
@ -1560,22 +1627,32 @@ hddreaddirsect
sty adrhi
hddseekrd ldy #cmdread
!if (aligned_read + enable_write) > 1 {
hddseekrdwr sty command
hddseekrdwr sty pcommand
} else { ;not (aligned_read or enable_write)
sty command
sty pcommand
hddseekrdwr
} ;aligned_read and enable_write
stx bloklo
sta blokhi
stx pblock
sta pblock + 1
hddcallsp
unrunit = unrelochdd + (* + 1 - reloc)
lda #$d1
sta unit
lda adrhi
sta paddr + 1
lda adrlo
sta paddr
unrentry3 = unrelochdd + (* - reloc)
jsr $d1d1
pcommand !byte 0
!word packet
rts
unrentry = unrelochdd + (* + 1 - reloc)
jmp $d1d1
unrpacket = unrelochdd + (* - reloc)
packet !byte 3
unrunit2 = unrelochdd + (* - reloc)
!byte 0
paddr !word readbuff + $200
pblock !byte 2, 0, 0
hddcodeend
!if swap_zp = 1 {
@ -1746,7 +1823,7 @@ hddsavetreehi = * + 1
lda hdddirbuf, y
ora hdddirbuf + 256, y
beq sparseblk
inc command
inc pcommand
copyblock ldy #0
- lda $a00, y
@ -1804,11 +1881,11 @@ sparseblk ldx #2
lda adrhi
cmp #(>hddencbuf) + 2
bne --
ldx bloklo
ldx pblock
inx
bne +
inc blokhi
+ lda blokhi
inc pblock + 1
+ lda pblock + 1
dec ldrhi
bne ---
@ -1837,7 +1914,7 @@ foundbit lda (adrlo), y
jmp copyblock
writeimm sta adrhi
inc command
inc pcommand
jmp hddcallsp
readpart lda istree

View File

@ -1,6 +1,6 @@
;license:BSD-3-Clause
;extended open/read/write binary file in ProDOS filesystem, with random access
;copyright (c) Peter Ferrie 2013-18
;copyright (c) Peter Ferrie 2013-19
ver_02 = 1
@ -180,7 +180,6 @@ tmp = $8
init lda DEVNUM
sta x80_parms + 1
sta unrunit
and #$70
pha
ldx #1
@ -200,6 +199,9 @@ init lda DEVNUM
;find current directory name in directory
sec
php
readblock jsr MLI
!byte $80
!word x80_parms
@ -221,7 +223,8 @@ inextent ldy #0
;match failed, move to next directory in this block, if possible
- pla
clc
skiphdr clc
lda bloklo
adc #ENTRY_SIZE
sta bloklo
@ -250,7 +253,17 @@ ifoundname dex
lda (namlo), y
cmp #'/'
bne -
tya
pla
and #$20 ;Volume Directory Header XOR subdirectory
beq adjpath
pla
clc
php
lsr
bcc skiphdr
inx
adjpath tya
eor #$ff
adc sizelo
sta sizelo
@ -258,9 +271,8 @@ ifoundname dex
tya
adc namlo
sta namlo
pla
and #$20 ;Volume Directory Header XOR subdirectory
bne ++
dex
beq ++
;cache block number of current directory
;as starting position for subsequent searches
@ -276,22 +288,79 @@ ifoundname dex
stx x80_parms + 5
++ lda sizelo
bne readblock
pla
;unit to slot for SmartPort interface
;unit to slot for ProDOS interface
+++ pla
lsr
lsr
lsr
tax
lsr
ora #$c0
ldy DEVADR01HI, x
cpy #$c8
bcs set_slot
tya
set_slot sta slot + 2
sta unrentry + 1
tay
ldx DEVADR01HI, y
cpx #$c8
bcc set_slot
;find SmartPort device for basic MicroDrive support
ldx #$c8
- dex
stx blokhi
ldy #0
sty bloklo
iny
lda (bloklo), y
cmp #$20
bne -
iny
iny
lda (bloklo), y
bne -
iny
iny
lda (bloklo), y
cmp #3
bne -
ldy #$ff
lda (bloklo), y
beq -
set_slot stx slot + 2
stx unrentry1 + 2
stx unrentry3 + 2
slot ldx $cfff
;use SmartPort entrypoint instead
inx
inx
inx
stx unrentry1 + 1
stx unrentry3 + 1
ldx #2
stx x80_parms + 4
lda #0
sta x80_parms + 5
jsr MLI
!byte $80
!word x80_parms
iterunit inc unrunit2
unrentry1 jsr $d1d1
!byte cmdread
!word unrpacket
bcs iterunit
ldy #$0f
- lda readbuff + 4, y
cmp readbuff + $204, y
bne iterunit
dey
bpl -
!if load_aux = 1 {
sta SETAUXWR + (load_banked * 4) ;SETAUXWR or SETAUXZP
} ;load_aux
@ -319,8 +388,6 @@ set_slot sta slot + 2
;copy new RWTS and interpreter support routines
slot lda $cfff
sta unrentry
ldy #0
- lda unrelochdd, y
sta reloc, y
@ -1560,22 +1627,32 @@ hddreaddirsect
sty adrhi
hddseekrd ldy #cmdread
!if (aligned_read + enable_write) > 1 {
hddseekrdwr sty command
hddseekrdwr sty pcommand
} else { ;not (aligned_read or enable_write)
sty command
sty pcommand
hddseekrdwr
} ;aligned_read and enable_write
stx bloklo
sta blokhi
stx pblock
sta pblock + 1
hddcallsp
unrunit = unrelochdd + (* + 1 - reloc)
lda #$d1
sta unit
lda adrhi
sta paddr + 1
lda adrlo
sta paddr
unrentry3 = unrelochdd + (* - reloc)
jsr $d1d1
pcommand !byte 0
!word packet
rts
unrentry = unrelochdd + (* + 1 - reloc)
jmp $d1d1
unrpacket = unrelochdd + (* - reloc)
packet !byte 3
unrunit2 = unrelochdd + (* - reloc)
!byte 0
paddr !word readbuff + $200
pblock !byte 2, 0, 0
hddcodeend
!if swap_zp = 1 {
@ -1746,7 +1823,7 @@ hddsavetreehi = * + 1
lda hdddirbuf, y
ora hdddirbuf + 256, y
beq sparseblk
inc command
inc pcommand
copyblock ldy #0
- lda $a00, y
@ -1804,11 +1881,11 @@ sparseblk ldx #2
lda adrhi
cmp #(>hddencbuf) + 2
bne --
ldx bloklo
ldx pblock
inx
bne +
inc blokhi
+ lda blokhi
inc pblock + 1
+ lda pblock + 1
dec ldrhi
bne ---
@ -1837,7 +1914,7 @@ foundbit lda (adrlo), y
jmp copyblock
writeimm sta adrhi
inc command
inc pcommand
jmp hddcallsp
readpart lda istree
@ -1859,11 +1936,11 @@ readpart lda istree
sta istree
ldy lastblk
rts
}
-}
save_end
hookkbd
!pseudopc $2b5 {;;-(callback_e-callback1) {
!pseudopc $2a7 {;;-(callback_e-callback1) {
callback1
ldx #<callback2
lda #$8d

View File

@ -43,6 +43,44 @@
dec DEVCNT ; reduce ProDOS device count
@noRAMdisk
;------------------------------------------------------------------------------
; detect VidHD by searching for magic bytes across all slots
;------------------------------------------------------------------------------
ldx #$c7
@findVidHD
stx @matchVidHD+2
ldy #2
@matchVidHD
lda $c700, y ; SMC
cmp @kVidHDID, y
bne @nextslot
dey
bpl @matchVidHD
lda #$90
sta PatchVidHD
bne @setSHR ; always
@kVidHDID
!byte $24, $EA, $4C
@nextslot
dex
cpx #$c0
bne @findVidHD
;------------------------------------------------------------------------------
; detect IIGS by running CPU-specific magic
;------------------------------------------------------------------------------
!cpu 65816
rep #2 ; clear Z flag on 65816 only
!cpu 65c02
beq + ; skip GS-specific code on non-GS machines (required, will crash on //c, grr)
@setSHR
inc WeCanHazSHR+1
+
;------------------------------------------------------------------------------
; clear options script and make checksum invalid
;------------------------------------------------------------------------------

View File

@ -184,22 +184,25 @@ LoadSHRFile
bne -
jsr _openfile
bcs @exit ; C set on error
sta @saverefnum ; store file refnum
bcs exit ; C set on error
sta saverefnum ; store file refnum
ldy #$20
stz mliparam+2 ; read into $2000 in main mem
sty mliparam+3
stz mliparam+4 ; read length = $2000 bytes (one quarter of file)
sty mliparam+5
sty @shrdest+2
sty shrdest+2
ldx #4 ; four quarters
- lda @saverefnum ; file refnum
- lda saverefnum ; file refnum
jsr _readfile
bcs @close
bcs close
phx
PatchVidHD
bcs copyvidhd
!cpu 65816
xce
rep #$30
@ -208,29 +211,58 @@ LoadSHRFile
lda #$1FFF
tax
inx
@shrdest ldy #$FD00 ; SMC
shrdest ldy #$FD00 ; SMC
phb
mvn 0,$E1
plb
sty @shrdest+1
sty shrdest+1
!as
!rs
sec
xce
!cpu 65C02
resumeread
plx
dex
bne -
@close php ; save flags from readfile
@saverefnum=*+1
close php ; save flags from readfile
saverefnum=*+1
lda #$FD ; file refnum (SMC)
jsr _closefile
plp ; restore flags from readfile
@exit rts
exit rts
copyvidhd
lda $C035
and #$F7 ;Enable SHR shadowing
sta $C035
lda #$a0
sec
@calcdest
sbc #$20
dex
bne @calcdest
sta $45
stx $44
ldx #$20
ldy #0
stx $43
sty $42
sta $C005 ;CPU writes go to aux 64K
@copyshr
lda ($42), y
sta ($44), y
iny
bne @copyshr
inc $43
inc $45
dex
bne @copyshr
sta $C004 ;CPU writes go to main 64K
clc
bcc resumeread
;-------------------------------
; SaveFile
; save a file to disk all at once, using ProDOS MLI calls
;

View File

@ -23,20 +23,15 @@ kArtworkGSRootDirectory ; length-prefixed pathname of SHGR graphic
; out: all registers and flags clobbered
;------------------------------------------------------------------------------
DisplayArtwork
ldx #0 ; set Z flag always
!cpu 65816
rep #2 ; clear Z flag on 65816 only
!cpu 65c02
beq + ; skip GS-specific code on non-GS machines (required, will crash on //c, grr)
lda $C029
ora #$40
sta $C029 ; set GS NEWVIDEO mode to turn off linearize
inx
+ jsr ResetPath
WeCanHazSHR
ldx #0 ; SMC
jsr ResetPath
+LDADDR kArtworkRootDirectory
dex
bne +
lda $C029
ora #$40
sta $C029 ; set GS NEWVIDEO mode to turn off linearize
+LDADDR kArtworkGSRootDirectory
+ phx
jsr AddToPath
@ -72,7 +67,7 @@ DisplayArtwork
plx
bcs -
lda $C029
ora #$C1
ora #$81
sta $C029 ; set GS NEWVIDEO mode to turn on SHR mode
@waitKey
@ -81,9 +76,10 @@ DisplayArtwork
- jsr AnyKeyOrClick
bcc -
sta $C051 ; back to text
sta $C056 ; turn off hires
plx
bne +
lda $C029
and #$3F
and #$7F
sta $C029 ; back to text GS-style
+ jmp ClearPendingInput

View File

@ -40,11 +40,26 @@ bureaur116db
!text "R116.DEPROT.SAV"
bureaur116de
!byte bureaur160e-bureaur160b
bureaur160b
!text "R160.880521.SAV"
bureaur160e
!byte bureaur160de-bureaur160db
bureaur160db
!text "R160.DEPROT.SAV"
bureaur160de
!byte nordr19e-nordr19b
nordr19b
!text "R19.870722.SAV"
nordr19e
!byte nordr20e-nordr20b
nordr20b
!text "R20.870722.SAV"
nordr20e
!byte trinityr11e-trinityr11b
trinityr11b
!text "R11.860509.SAV"
@ -55,6 +70,11 @@ trinityr12b
!text "R12.860926.SAV"
trinityr12e
!byte trinityr15e-trinityr15b
trinityr15b
!text "R15.870628.SAV"
trinityr15e
!byte 0 ;end of list
gameloc
@ -82,15 +102,27 @@ gameloc
;bureaur116d
!byte $b6
;bureaur160
!byte $b5
;bureaur160d
!byte $b5
;nordr19
!byte $91
;nordr20
!byte $92
;trinityr11
!byte $be
;trinityr12
!byte $be
;trinityr15
!byte $be
gametime
;amfvr77
!byte $50
@ -110,24 +142,47 @@ gametime
;bureaur86
!byte 0 ;no time
!byte 0 ;no time
;bureaur86d
!byte 0 ;no time
!byte 0 ;no time
;bureaur116
!byte 0 ;no time
!byte 0 ;no time
;bureaur86d
;bureaur116d
!byte 0 ;no time
!byte 0 ;no time
;bureaur160
!byte 0 ;no time
!byte 0 ;no time
;bureaur160d
!byte 0 ;no time
!byte 0 ;no time
;nordr19
!byte 0 ;no time
!byte 0 ;no time
;nordr20
!byte 0 ;no time
!byte 0 ;no time
;trinityr11
!byte 0 ;no time
!byte 0 ;no time
;trinityr12
!byte 0 ;no time
!byte 0 ;no time
;trinityr15
!byte 0 ;no time
!byte 0 ;no time
gamescore
;amfvr77
@ -151,18 +206,30 @@ gamescore
;bureaur116
!byte $a1
;bureaur86d
;bureaur116d
!byte $a1
;bureaur160
!byte $9f
;bureaur160d
!byte $9f
;nordr19
!byte 0 ;per-scenario score, not supported yet
;nordr20
!byte 0 ;per-scenario score, not supported yet
;trinityr11
!byte $aa
;trinityr12
!byte $aa
;trinityr15
!byte $aa
gamemoves
;amfvr77
!byte 0 ;no moves
@ -185,18 +252,30 @@ gamemoves
;bureaur116
!byte $8e
;bureaur86d
;bureaur116d
!byte $8e
;bureaur160
!byte $8c
;bureaur160d
!byte $8c
;nordr19
!byte 0 ;no moves
;nordr20
!byte 0 ;no moves
;trinityr11
!byte $95
;trinityr12
!byte $95
;trinityr15
!byte $95
gamemonth
;amfvr77
!byte $18
@ -226,7 +305,15 @@ gamemonth
!byte 0 ;no month
!byte 0 ;no month
;bureaur86d
;bureaur116d
!byte 0 ;no month
!byte 0 ;no month
;bureaur160
!byte 0 ;no month
!byte 0 ;no month
;bureaur160d
!byte 0 ;no month
!byte 0 ;no month
@ -234,6 +321,10 @@ gamemonth
!byte 0 ;no month
!byte 0 ;no month
;nordr20
!byte 0 ;no month
!byte 0 ;no month
;trinityr11
!byte 0 ;no month
!byte 0 ;no month
@ -242,6 +333,10 @@ gamemonth
!byte 0 ;no month
!byte 0 ;no month
;trinityr15
!byte 0 ;no month
!byte 0 ;no month
gameday
;amfvr77
!byte $91
@ -271,7 +366,15 @@ gameday
!byte 0 ;no day
!byte 0 ;no day
;bureaur86d
;bureaur116d
!byte 0 ;no day
!byte 0 ;no day
;bureaur160
!byte 0 ;no day
!byte 0 ;no day
;bureaur160d
!byte 0 ;no day
!byte 0 ;no day
@ -279,6 +382,10 @@ gameday
!byte 0 ;no day
!byte 0 ;no day
;nordr20
!byte 0 ;no day
!byte 0 ;no day
;trinityr11
!byte 0 ;no day
!byte 0 ;no day
@ -287,6 +394,10 @@ gameday
!byte 0 ;no day
!byte 0 ;no day
;trinityr15
!byte 0 ;no day
!byte 0 ;no day
gameyear
;amfvr77
!byte $bb
@ -316,7 +427,15 @@ gameyear
!byte 0 ;no year
!byte 0 ;no year
;bureaur86d
;bureaur116d
!byte 0 ;no year
!byte 0 ;no year
;bureaur160
!byte 0 ;no year
!byte 0 ;no year
;bureaur160d
!byte 0 ;no year
!byte 0 ;no year
@ -324,6 +443,10 @@ gameyear
!byte 0 ;no year
!byte 0 ;no year
;nordr20
!byte 0 ;no year
!byte 0 ;no year
;trinityr11
!byte 0 ;no year
!byte 0 ;no year
@ -331,3 +454,7 @@ gameyear
;trinityr12
!byte 0 ;no year
!byte 0 ;no year
;trinityr15
!byte 0 ;no year
!byte 0 ;no year

View File

@ -25,11 +25,21 @@ sherlockr21b
!text "R21.871214.SAV"
sherlockr21e
!byte sherlockr22e-sherlockr22b
sherlockr22b
!text "R22.880112.SAV"
sherlockr22e
!byte sherlockr26e-sherlockr26b
sherlockr26b
!text "R26.880127.SAV"
sherlockr26e
!byte sherlockr4e-sherlockr4b
sherlockr4b
!text "R4.880324.SAV"
sherlockr4e
!byte wishbringr23e-wishbringr23b
wishbringr23b
!text "R23.880706.SAV"
@ -40,6 +50,11 @@ zorkr52b
!text "R52.871125.SAV"
zorkr52e
!byte zzeror153e-zzeror153b
zzeror153b
!text "R153.880510.SAV"
zzeror153e
!byte ztuur16e-ztuur16b
ztuur16b
!text "R16.970828.SAV"
@ -233,15 +248,24 @@ gameloc
;sherlockr21
!byte $75
;sherlockr22
!byte $75
;sherlockr26
!byte $74
;sherlockr4
!byte $75
;wishbringr23
!byte $b1
;zorkr52
!byte $7b
;zzeror153
!byte $b7
;ztuur16
!byte $28
@ -363,15 +387,24 @@ gametime
;sherlockr21
!byte $6e
;sherlockr22
!byte $6e
;sherlockr26
!byte $6d
;sherlockr4
!byte $6e
;wishbringr23
!byte $9a
;zorkr52
!byte 0 ;no time
;zzeror153
!byte 0 ;no time
;ztuur16
!byte 0 ;no time
@ -493,15 +526,24 @@ gamescore
;sherlockr21
!byte $aa
;sherlockr22
!byte $aa
;sherlockr26
!byte $ab
;sherlockr4
!byte $aa
;wishbringr23
!byte $9c
;zorkr52
!byte $6e
;zzeror153
!byte $85
;ztuur16
!byte $16
@ -623,15 +665,24 @@ gamemoves
;sherlockr21
!byte 0 ;no moves
;sherlockr22
!byte 0 ;no moves
;sherlockr26
!byte 0 ;no moves
;sherlockr4
!byte 0 ;no moves
;wishbringr23
!byte $8d
;zorkr52
!byte $64
;zzeror153
!byte $6e
;ztuur16
!byte $17
@ -753,15 +804,24 @@ gameday
;sherlockr21
!byte $6e
;sherlockr22
!byte $6e
;sherlockr26
!byte $6d
;sherlockr4
!byte $6e
;wishbringr23
!byte 0 ;no day
;zorkr52
!byte 0 ;no day
;zzeror153
!byte 0 ;no day
;ztuur16
!byte 0 ;no day

View File

@ -20,6 +20,11 @@ bzork57b
!text "R57.871221.SAV"
bzork57e
!byte bzork60e-bzork60b
bzork60b
!text "R60.880610.SAV"
bzork60e
!byte allroadse-allroadsb
allroadsb
!text "ALLROADS.SAV"
@ -50,6 +55,9 @@ gameloc
;bzork57
!byte $a6
;bzork60
!byte $a6
;allroads
!byte $13
@ -72,6 +80,9 @@ gamemoves
;bzork57
!byte $8c
;bzork60
!byte $8c
;allroads
!byte 0 ;no moves