mirror of https://github.com/a2-4am/4sports.git
Compare commits
6 Commits
78c069d6bd
...
9e19e4e4b1
Author | SHA1 | Date |
---|---|---|
4am | 9e19e4e4b1 | |
4am | 6fb946b086 | |
4am | 71f2ca9006 | |
4am | bcb24ae38d | |
4am | 2da68a8cd7 | |
4am | adbb1d8dbe |
|
@ -50,13 +50,13 @@ cat res/GAMES.CONF |
|
|||
grep '^\!to' src/demo/*.a | cut -d'/' -f5-|cut -d'#' -f1 |
|
||||
grep -v "SPCARTOON" |
|
||||
while read f; do
|
||||
grep "$f=0" res/ATTRACT.CONF >/dev/null || echo "unused demo: $f";
|
||||
grep "^$f=0" res/ATTRACT.CONF >/dev/null || echo "unused demo: $f";
|
||||
done
|
||||
|
||||
# warn about unused slideshows
|
||||
cd res/SS
|
||||
for f in *.CONF; do
|
||||
grep "$f" ../ATTRACT.CONF >/dev/null || echo "unused slideshow: $f";
|
||||
grep "^$f=" ../ATTRACT.CONF >/dev/null || echo "unused slideshow: $f";
|
||||
done
|
||||
cd ../..
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -66,6 +66,7 @@ ACTBOXING.CONF=2
|
|||
CATBOARD.CONF=1
|
||||
ACTDIVEBMB.CONF=2
|
||||
ACTDHGRWD.CONF=4
|
||||
TITLENR2.CONF=1
|
||||
SHR3.CONF=5
|
||||
|
||||
#set 4
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
#
|
||||
# Attract mode for GO.FOUR.IT
|
||||
# This file is automatically generated
|
||||
#
|
||||
|
||||
GO.FOUR.IT=A
|
||||
|
||||
[eof]
|
|
@ -0,0 +1,8 @@
|
|||
#
|
||||
# Attract mode for ODIN
|
||||
# This file is automatically generated
|
||||
#
|
||||
|
||||
ODIN=A
|
||||
|
||||
[eof]
|
BIN
res/CACHE00.IDX
BIN
res/CACHE00.IDX
Binary file not shown.
BIN
res/CACHE01.IDX
BIN
res/CACHE01.IDX
Binary file not shown.
BIN
res/CACHE10.IDX
BIN
res/CACHE10.IDX
Binary file not shown.
BIN
res/CACHE11.IDX
BIN
res/CACHE11.IDX
Binary file not shown.
|
@ -0,0 +1,22 @@
|
|||
|
||||
|
||||
Get four in a row horizontally,
|
||||
|
||||
vertically, or diagonally
|
||||
|
||||
|
||||
|
||||
< select >
|
||||
|
||||
press Return to place
|
||||
|
||||
|
||||
|
||||
S* * * * * * * * * * * * * *toggle sound
|
||||
|
||||
T* * * * * * * * * * * * *take back move
|
||||
|
||||
A* * * * * * * * * * * * * * * * *advice
|
||||
|
||||
Esc* * * * * * * * * * * * * * * * *quit
|
||||
[eof]
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Place your pieces
|
||||
|
||||
Flip your opponent's pieces
|
||||
|
||||
|
||||
|
||||
joystick or keyboard
|
||||
|
||||
< select >
|
||||
|
||||
press Return to place
|
||||
[eof]
|
|
@ -48,6 +48,7 @@
|
|||
10001,FUJI.SPEED.WAY=Fuji Crowded Speedway/1983
|
||||
10000,GFL.FOOTBALL=GFL Championship Football/1987
|
||||
00001,GO=Go/1982
|
||||
00001,GO.FOUR.IT=Go Four It/1988
|
||||
10001,HARDBALL=Hardball/1985
|
||||
10001,HIRES.FOOTBALL=Hi-Res Football/1980
|
||||
10001,HIRES.SOCCER=Hi-Res Soccer/1980
|
||||
|
@ -65,6 +66,7 @@
|
|||
00001,MU.TORERE=Mu Torere/1988
|
||||
00001,NIMWIT=Nimwit/1988
|
||||
00001,NINE.MENS=Nine Men's Morris/1988
|
||||
00001,ODIN=Odin/1982
|
||||
10001,ONE.ON.ONE=One on One/1983
|
||||
01100,PAY.DAY=Pay Day/1990
|
||||
00001,PENSATE=Pensate/1983
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
REVERSI
|
||||
CHECKERS
|
||||
MICROCHESS
|
||||
GO.FOUR.IT
|
||||
ODIN
|
||||
PENSATE
|
||||
GO
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ INTL.HOCKEY
|
|||
GO
|
||||
HIRES.FOOTBALL
|
||||
GFL.FOOTBALL
|
||||
GO.FOUR.IT
|
||||
INTL.GRAN.PRIX
|
||||
|
||||
[eof]
|
||||
|
|
|
@ -6,5 +6,6 @@ ONE.ON.ONE2=ONE.ON.ONE
|
|||
ROCK.N.SCROLL
|
||||
POOL
|
||||
NIMWIT
|
||||
ODIN
|
||||
|
||||
[eof]
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#
|
||||
|
||||
PENSATE
|
||||
ODIN
|
||||
GO.FOUR.IT
|
||||
REVERSI
|
||||
GO
|
||||
CHECKERS
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
GFL.FOOTBALL
|
||||
JUMP.PIT
|
||||
HARDBALL
|
||||
GO.FOUR.IT
|
||||
HIRES.SOCCER
|
||||
GO
|
||||
INTL.GRAN.PRIX
|
||||
|
|
|
@ -7,9 +7,5 @@ POOL
|
|||
NINE.MENS
|
||||
NIMWIT
|
||||
ONE.ON.ONE
|
||||
REVERSI
|
||||
PLACE.BALL
|
||||
PENSATE
|
||||
PITSTOP.II
|
||||
|
||||
[eof]
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
#
|
||||
# HGR title slideshow of games that begin with "N"-"R"
|
||||
#
|
||||
|
||||
REVERSI
|
||||
PLACE.BALL
|
||||
ODIN
|
||||
PENSATE
|
||||
PITSTOP.II
|
||||
|
||||
[eof]
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -13,6 +13,7 @@
|
|||
- F-15 Strike Eagle
|
||||
- Fox & Geese
|
||||
- Go
|
||||
- Go Four It
|
||||
- GFL Championship Football
|
||||
- Hi-Res Football
|
||||
- Hi-Res Soccer
|
||||
|
@ -27,6 +28,7 @@
|
|||
- Mu Torere
|
||||
- Nimwit
|
||||
- Nine Men's Morris
|
||||
- Odin
|
||||
- Pay Day
|
||||
- Place Ball
|
||||
- Press Your Luck
|
||||
|
|
|
@ -31,43 +31,38 @@ Dave Winfield's Batter Up [4am crack][64K]
|
|||
Earl Weaver Baseball [4am crack][HGR-but-128K][priority]
|
||||
Fathom's 40 [4am crack][48K]
|
||||
Fore! [4am crack][48K]
|
||||
Golf Course (Main Street Publishing)
|
||||
Golf's Best
|
||||
Hi-Res Computer Golf [4am crack]
|
||||
Hi-Res Computer Golf 2
|
||||
Hi-Res Computer Golf 2 [needs-crack][48K][supports-data-disk]
|
||||
Jet [priority][64K][supports-data-disk]
|
||||
Joe Thiesmann's Pro Football [4am crack]
|
||||
John Elway's Quarterback
|
||||
John Madden Football
|
||||
Ken Uston's Professional Blackjack (latest version is 1.23?) [4am crack]
|
||||
Maxi Golf
|
||||
Micro League Baseball (1984 version, not 1980)
|
||||
Odin (Odesta) [needs-crack][48K]
|
||||
Olympic Decathlon [priority]
|
||||
Joe Thiesmann's Pro Football [4am crack][64K]
|
||||
John Elway's Quarterback [HGR-but-128K]
|
||||
John Madden Football [needs-crack][offdisk][64K]
|
||||
Ken Uston's Professional Blackjack v1.23 [4am crack][48K]
|
||||
Maxi Golf [needs-crack]
|
||||
Micro League Baseball (1984 version, not 1980) [needs-crack][64K][supports-data-disk]
|
||||
Olympic Decathlon [priority][needs-crack][48K]
|
||||
Pro Football (Systems Design Lab)
|
||||
Pro Golf (Home-Computer Software)
|
||||
Professional Tour Golf [4am crack]
|
||||
Pure Stat Baseball
|
||||
Pure Stat Baseball [needs-crack][64K]
|
||||
Pure Stat College Basketball
|
||||
Ringside Seat (SSI)
|
||||
Sargon III (Spinnaker) [supports-data-disk]
|
||||
Ringside Seat (SSI) [4am/san inc crack][48K]
|
||||
Sargon III (Hayden) [4am crack][supports-data-disk]
|
||||
Spinout (Chris Oberth) [48K][unreleased, see <https://www.gamingalexandria.com/wp/2021/08/oberth-archives-one/>]
|
||||
Sports Spectacular (Keypunch) [unprotected]
|
||||
Star League Baseball
|
||||
Star League Baseball [needs-crack][64K]
|
||||
Star Rank Boxing II [4am crack][priority]
|
||||
Sub Battle Simulator [4am crack]
|
||||
Super Sunday [4am crack]
|
||||
Sub Battle Simulator [4am crack][64K]
|
||||
Super Sunday [4am crack][64K]
|
||||
Superstar Indoor Sports [priority]
|
||||
Techo-Sport Racing (K-Tek) [Tom Greene]
|
||||
Tennis (Softdisk) [unprotected]
|
||||
Tuesday Morning Quarterback [4am crack]
|
||||
Tuesday Morning Quarterback [4am crack][48K]
|
||||
The Fidelity Chessmaster 2100 (Software Toolworks) [priority]
|
||||
The World's Greatest Baseball Game (Enhanced Version) [4am crack]
|
||||
The World's Greatest Football Game [4am crack]
|
||||
Top Fuel Eliminator (Activision)
|
||||
Trick Shot (IDSI) [needs-crack][supports-data-disk]
|
||||
Ultracheckers (Malibu Microcomputing) [needs-crack]
|
||||
World Class Leader Board (Access Software)
|
||||
The World's Greatest Baseball Game (Enhanced Version) [4am crack][64K][supports-data-disk]
|
||||
The World's Greatest Football Game [4am crack][64K]
|
||||
Top Fuel Eliminator (Activision) [4am crack][HGR-but-128K]
|
||||
Trick Shot (IDSI) [needs-crack][48K][supports-data-disk]
|
||||
Ultracheckers (Malibu Microcomputing) [needs-crack][48K]
|
||||
World Class Leader Board (Access Software) [64K]
|
||||
World Series Baseball
|
||||
|
||||
//idea:game shows
|
||||
|
@ -98,7 +93,7 @@ Clue
|
|||
Risk v1.4
|
||||
Monty Plays Scrabble v4
|
||||
Shanghai
|
||||
Sorry
|
||||
Sorry [DHGR][128K]
|
||||
|
||||
//idea:quiz games
|
||||
Tic Tac Show
|
||||
|
|
|
@ -6,11 +6,10 @@
|
|||
!src "../common/src/macros.a"
|
||||
|
||||
+INIT_MACHINE
|
||||
jsr decrunch
|
||||
|
||||
!if * != $211F {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!if * != $211C {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch
|
||||
jmp $4000
|
||||
|
||||
get_crunched_byte
|
||||
|
|
|
@ -18,11 +18,10 @@
|
|||
dec ExoProgressPtr+1
|
||||
dec ExoProgressPtr+1
|
||||
dec ExoProgressPtr+1
|
||||
jsr decrunch_no_reset_progress ; decompress more data into $6000/main
|
||||
|
||||
!if * != $485C {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!if * != $4859 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch_no_reset_progress ; decompress more data into $6000/main
|
||||
jmp $AEE0
|
||||
|
||||
get_crunched_byte
|
||||
|
|
|
@ -16,7 +16,7 @@ SHOW_PROGRESS_DURING_DECRUNCH = 0
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $B8B4 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to change JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -17,7 +17,7 @@ kExoProgressWidth = 18 ; depends on total size, max 38
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $B9ED {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -0,0 +1,51 @@
|
|||
# https://sourceforge.net/projects/acme-crossass/
|
||||
ACME=acme
|
||||
|
||||
# https://github.com/mach-kernel/cadius
|
||||
CADIUS=cadius
|
||||
|
||||
EXOMIZER=exomizer mem -lnone -P23 -f -q
|
||||
|
||||
BUILDDIR=build
|
||||
DISKVOLUME=GO.FOUR.IT
|
||||
LOADER=$(BUILDDIR)/LOADER.SYSTEM\#FF2000
|
||||
EXE=$(BUILDDIR)/GO.FOUR.IT\#068000
|
||||
COMPRESSED=src/OBJ.X
|
||||
SOURCES=$(wildcard src/*.a) $(COMPRESSED)
|
||||
RES=$(wildcard res/*) $(wildcard ../common/res/*)
|
||||
BUILDDISK=$(BUILDDIR)/$(DISKVOLUME).po
|
||||
|
||||
.PHONY: clean mount all
|
||||
|
||||
$(BUILDDISK): $(EXE) $(LOADER) $(RES)
|
||||
|
||||
$(LOADER): $(SOURCES) | $(BUILDDIR)
|
||||
$(ACME) src/loader.a
|
||||
$(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$(LOADER)" -C
|
||||
@touch "$@"
|
||||
|
||||
$(EXE): $(SOURCES) $(COMPRESSED) | $(BUILDDIR)
|
||||
$(ACME) src/go.four.it.a
|
||||
$(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$(EXE)" -C
|
||||
@touch "$@"
|
||||
|
||||
$(RES): $(BUILDDIR)
|
||||
$(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$@" -C
|
||||
@touch "$@"
|
||||
|
||||
$(COMPRESSED):
|
||||
$(EXOMIZER) src/OBJ@0x4000 -o "$@"
|
||||
|
||||
mount: $(BUILDDISK)
|
||||
@open "$(BUILDDISK)"
|
||||
|
||||
clean:
|
||||
rm -rf "$(BUILDDIR)"
|
||||
|
||||
$(BUILDDIR):
|
||||
mkdir -p "$@"
|
||||
$(CADIUS) CREATEVOLUME "$(BUILDDISK)" "$(DISKVOLUME)" 140KB -C
|
||||
|
||||
all: clean mount
|
||||
|
||||
.NOTPARALLEL:
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,29 @@
|
|||
!cpu 6502
|
||||
*=$8000
|
||||
!to "build/GO.FOUR.IT#068000",plain
|
||||
|
||||
!src "../common/src/constants.a"
|
||||
!src "../common/src/macros.a"
|
||||
|
||||
jmp start
|
||||
|
||||
compressed_data
|
||||
!bin "src/OBJ.X"
|
||||
FORWARD_DECRUNCHING = 1
|
||||
SHOW_PROGRESS_DURING_DECRUNCH = 0
|
||||
!src "../common/src/exodecrunch.a"
|
||||
|
||||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $9001 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
jmp $6000
|
||||
|
||||
get_crunched_byte
|
||||
lda compressed_data
|
||||
inc get_crunched_byte+1
|
||||
bne +
|
||||
inc get_crunched_byte+2
|
||||
+ rts
|
|
@ -0,0 +1,25 @@
|
|||
!cpu 6502
|
||||
*=$2000
|
||||
!to "build/LOADER.SYSTEM#FF2000",plain
|
||||
|
||||
!src "../common/src/constants.a"
|
||||
!src "../common/src/macros.a"
|
||||
|
||||
+READ_ENTIRE_FILE parm_boot_open, parm_boot_read
|
||||
jmp (entry)
|
||||
|
||||
parm_boot_open
|
||||
!byte 3
|
||||
!word filename
|
||||
!word $2100
|
||||
!byte 0
|
||||
|
||||
parm_boot_read
|
||||
!byte 4
|
||||
!byte 1
|
||||
entry !word $8000
|
||||
!word $FFFF
|
||||
!word 0
|
||||
|
||||
filename
|
||||
!text 10,"GO.FOUR.IT"
|
|
@ -16,7 +16,7 @@ SHOW_PROGRESS_DURING_DECRUNCH = 0
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $9C5F {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
jmp $800
|
||||
|
|
|
@ -17,7 +17,7 @@ kExoProgressWidth = 14 ; depends on total size, max 38
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $AD5C {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
jsr ROM_TEXT ; game expects current VTAB to be at bottom
|
||||
|
|
|
@ -23,7 +23,7 @@ start
|
|||
bit HIRES
|
||||
bit FULLGFX
|
||||
!if * != $BC4D {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; decompress game code at $4000
|
||||
jmp $4000
|
||||
|
|
|
@ -22,10 +22,10 @@ start
|
|||
bit PAGE1
|
||||
bit HIRES
|
||||
bit FULLGFX
|
||||
jsr decrunch_no_reset_progress
|
||||
!if * != $B8A9 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!if * != $B8A6 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch_no_reset_progress
|
||||
jsr $900
|
||||
bit CLEARKBD
|
||||
jsr PRODOS_MLI
|
||||
|
|
|
@ -17,7 +17,7 @@ kExoProgressWidth = 19 ; depends on total size, max 38
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $B9AD {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -22,10 +22,10 @@ start
|
|||
bit PAGE1
|
||||
bit HIRES
|
||||
bit FULLGFX
|
||||
jsr decrunch_no_reset_progress
|
||||
!if * != $B057 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!if * != $B054 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch_no_reset_progress
|
||||
jsr $900
|
||||
bit CLEARKBD
|
||||
jsr PRODOS_MLI
|
||||
|
|
|
@ -28,7 +28,7 @@ start
|
|||
@next iny
|
||||
bne @loop
|
||||
!if * != $9667 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -16,7 +16,7 @@ SHOW_PROGRESS_DURING_DECRUNCH = 0
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $18B6 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
jmp $5000
|
||||
|
|
|
@ -16,7 +16,7 @@ SHOW_PROGRESS_DURING_DECRUNCH = 0
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $9E01 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
jmp $2000
|
||||
|
|
|
@ -16,7 +16,7 @@ SHOW_PROGRESS_DURING_DECRUNCH = 0
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $A6A5 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
jmp $2000
|
||||
|
|
|
@ -22,10 +22,10 @@ start
|
|||
bit PAGE1
|
||||
bit HIRES
|
||||
bit FULLGFX
|
||||
jsr decrunch_no_reset_progress
|
||||
!if * != $B1A0 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!if * != $B19D {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch_no_reset_progress
|
||||
jsr $900
|
||||
bit CLEARKBD
|
||||
jsr PRODOS_MLI
|
||||
|
|
|
@ -17,7 +17,7 @@ kExoProgressWidth = 18 ; depends on total size, max 38
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $B75E {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -22,6 +22,9 @@ start
|
|||
bit PAGE1
|
||||
bit HIRES
|
||||
bit FULLGFX
|
||||
!if * != $B915 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch_no_reset_progress
|
||||
jsr $900
|
||||
ldx #$20
|
||||
|
@ -34,9 +37,6 @@ start
|
|||
inc @b+2
|
||||
dex
|
||||
bne @a
|
||||
!if * != $B931 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
}
|
||||
jsr $906
|
||||
bit CLEARKBD
|
||||
jsr PRODOS_MLI
|
||||
|
|
|
@ -17,7 +17,7 @@ kExoProgressWidth = 18 ; depends on total size, max 38
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $BC5B {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
# https://sourceforge.net/projects/acme-crossass/
|
||||
ACME=acme
|
||||
|
||||
# https://github.com/mach-kernel/cadius
|
||||
CADIUS=cadius
|
||||
|
||||
EXOMIZER=exomizer mem -lnone -P23 -f -q
|
||||
|
||||
BUILDDIR=build
|
||||
DISKVOLUME=ODIN
|
||||
LOADER=$(BUILDDIR)/LOADER.SYSTEM\#FF2000
|
||||
EXE=$(BUILDDIR)/ODIN\#068000
|
||||
COMPRESSED1=src/OBJ1.X
|
||||
COMPRESSED2=src/OBJ2.X
|
||||
SOURCES=$(wildcard src/*.a) $(COMPRESSED1) $(COMPRESSED2)
|
||||
RES=$(wildcard res/*) $(wildcard ../common/res/*)
|
||||
BUILDDISK=$(BUILDDIR)/$(DISKVOLUME).po
|
||||
|
||||
.PHONY: clean mount all
|
||||
|
||||
$(BUILDDISK): $(EXE) $(LOADER) $(RES)
|
||||
|
||||
$(LOADER): $(SOURCES) | $(BUILDDIR)
|
||||
$(ACME) src/loader.a
|
||||
$(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$(LOADER)" -C
|
||||
@touch "$@"
|
||||
|
||||
$(EXE): $(SOURCES) $(COMPRESSED1) $(COMPRESSED2) | $(BUILDDIR)
|
||||
$(ACME) src/odin.a
|
||||
$(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$(EXE)" -C
|
||||
@touch "$@"
|
||||
|
||||
$(RES): $(BUILDDIR)
|
||||
$(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$@" -C
|
||||
@touch "$@"
|
||||
|
||||
$(COMPRESSED1):
|
||||
$(EXOMIZER) src/OBJ1@0x0800 -o "$@"
|
||||
|
||||
$(COMPRESSED2):
|
||||
$(EXOMIZER) src/OBJ2@0x4000 -o "$@"
|
||||
|
||||
mount: $(BUILDDISK)
|
||||
@open "$(BUILDDISK)"
|
||||
|
||||
clean:
|
||||
rm -rf "$(BUILDDIR)"
|
||||
|
||||
$(BUILDDIR):
|
||||
mkdir -p "$@"
|
||||
$(CADIUS) CREATEVOLUME "$(BUILDDISK)" "$(DISKVOLUME)" 140KB -C
|
||||
|
||||
all: clean mount
|
||||
|
||||
.NOTPARALLEL:
|
|
@ -0,0 +1,43 @@
|
|||
bootloader sets up $200..$2FF (important)
|
||||
also $4E=A5 (important)
|
||||
|
||||
$26=8C
|
||||
$3E=00
|
||||
$3F=8C
|
||||
$41=00
|
||||
$C0=00
|
||||
$C1=13
|
||||
$C2=FE
|
||||
$C3=DF
|
||||
$C4=00
|
||||
$C5=00
|
||||
$C6=FF
|
||||
$C7=FF
|
||||
$C8=51
|
||||
$C9=8B
|
||||
(none seem important)
|
||||
|
||||
bootloader on text page 1 pushes $7F/$41 then exits via $FC58
|
||||
then execution continues at $7F42
|
||||
uses $4E as part of decryption key
|
||||
decrypts downward until self-modifies branch target
|
||||
then execution continues at $7F6E
|
||||
which copies/decrypts onto zero page + stack
|
||||
RTS pops address just decrypted onto bottom of stack
|
||||
then execution continues at $00AB
|
||||
clears memory $8ABC..$BFFF and $0C00..$1FFF
|
||||
uses $200..$25F as decryption key
|
||||
decrypts more then self-modifies to jump to $7E54
|
||||
|
||||
entry point at $7E54 clears part of zero page where
|
||||
previous phase lived, then continues to game
|
||||
|
||||
once execution hits $7E54, all of zero page (including $4E)
|
||||
has been clobbered and $200..$2FF is never used again
|
||||
all registers are irrelevant
|
||||
stack is irrelevant
|
||||
regions that were clobbered earlier are irrelevant
|
||||
|
||||
can break at $7E54, capture $800..$BFF and $4000..$8ABB,
|
||||
then later jump to $7E54 to start game
|
||||
($4000..$5FFF and $800..$BFF still showing title screen at this point)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,25 @@
|
|||
!cpu 6502
|
||||
*=$2000
|
||||
!to "build/LOADER.SYSTEM#FF2000",plain
|
||||
|
||||
!src "../common/src/constants.a"
|
||||
!src "../common/src/macros.a"
|
||||
|
||||
+READ_ENTIRE_FILE parm_boot_open, parm_boot_read
|
||||
jmp (entry)
|
||||
|
||||
parm_boot_open
|
||||
!byte 3
|
||||
!word filename
|
||||
!word $2100
|
||||
!byte 0
|
||||
|
||||
parm_boot_read
|
||||
!byte 4
|
||||
!byte 1
|
||||
entry !word $8000
|
||||
!word $FFFF
|
||||
!word 0
|
||||
|
||||
filename
|
||||
!text 4,"ODIN"
|
|
@ -0,0 +1,45 @@
|
|||
!cpu 6502
|
||||
*=$8000
|
||||
!to "build/ODIN#068000",plain
|
||||
|
||||
!src "../common/src/constants.a"
|
||||
!src "../common/src/macros.a"
|
||||
|
||||
jmp start
|
||||
|
||||
compressed_data
|
||||
!bin "src/OBJ1.X"
|
||||
!bin "src/OBJ2.X"
|
||||
FORWARD_DECRUNCHING = 1
|
||||
SHOW_PROGRESS_DURING_DECRUNCH = 1
|
||||
kExoProgressWidth = 12 ; depends on total size, max 38
|
||||
!src "../common/src/exodecrunch.a"
|
||||
|
||||
start
|
||||
+INIT_MACHINE
|
||||
jsr decrunch ; compressed data contains target address
|
||||
!if * != $AA2C {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch_no_reset_progress
|
||||
bit GFXMODE
|
||||
bit PAGE2
|
||||
bit HIRES
|
||||
bit MIXEDGFX
|
||||
bit CLEARKBD
|
||||
ldy #$19 ; wait loop based on code from original game
|
||||
- bit KBD ; but allow pressing key to start game early
|
||||
bmi +
|
||||
lda #$00
|
||||
jsr ROM_WAIT
|
||||
dey
|
||||
bne -
|
||||
+ bit CLEARKBD
|
||||
jmp $7E54
|
||||
|
||||
get_crunched_byte
|
||||
lda compressed_data
|
||||
inc get_crunched_byte+1
|
||||
bne +
|
||||
inc get_crunched_byte+2
|
||||
+ rts
|
|
@ -41,11 +41,10 @@
|
|||
sta _byte_lo
|
||||
lda #$50
|
||||
sta _byte_hi
|
||||
jsr decrunch_no_reset_progress
|
||||
|
||||
!if * != $879 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!if * != $876 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch_no_reset_progress
|
||||
jmp $4000
|
||||
|
||||
parm_obj_x_open
|
||||
|
|
|
@ -22,6 +22,9 @@ start
|
|||
bit PAGE1
|
||||
bit HIRES
|
||||
bit FULLGFX
|
||||
!if * != $B26D {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch_no_reset_progress
|
||||
ldx #$0C
|
||||
ldy #$00
|
||||
|
@ -37,9 +40,6 @@ start
|
|||
sta $5101
|
||||
lda #>load_level
|
||||
sta $5102
|
||||
!if * != $B290 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
}
|
||||
jsr $900
|
||||
bit CLEARKBD
|
||||
jsr PRODOS_MLI
|
||||
|
|
|
@ -20,7 +20,7 @@ start
|
|||
+INIT_MACHINE
|
||||
jsr title
|
||||
!if * != $9FB3 {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
jmp $404B
|
||||
|
|
|
@ -27,7 +27,7 @@ print_loop
|
|||
bne print_loop
|
||||
+
|
||||
!if * != $B55F {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -17,7 +17,7 @@ kExoProgressWidth = 18 ; depends on total size, max 38
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $B9DE {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -17,7 +17,7 @@ kExoProgressWidth = 19 ; depends on total size, max 38
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $BA3C {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
bit GFXMODE
|
||||
|
|
|
@ -17,7 +17,7 @@ kExoProgressWidth = 13 ; depends on total size, max 38
|
|||
start
|
||||
+INIT_MACHINE
|
||||
!if * != $356C {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
|
||||
}
|
||||
jsr decrunch ; compressed data contains target address
|
||||
jmp $4000
|
||||
|
|
|
@ -22,6 +22,9 @@ start
|
|||
bit PAGE1
|
||||
bit HIRES
|
||||
bit FULLGFX
|
||||
!if * != $B9BC {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
}
|
||||
jsr decrunch_no_reset_progress
|
||||
ldx #$0C
|
||||
ldy #$00
|
||||
|
@ -37,9 +40,6 @@ start
|
|||
sta $514A
|
||||
lda #>load_level
|
||||
sta $514B
|
||||
!if * != $B9DF {
|
||||
!serious "Adjust prelaunch to patch JSR at ", *
|
||||
}
|
||||
jsr $900
|
||||
bit CLEARKBD
|
||||
jsr PRODOS_MLI
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2566141
|
||||
!be24 2598963
|
||||
!le16 592
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2550629
|
||||
!le16 1526
|
||||
!be24 2583302
|
||||
!le16 1543
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2538517
|
||||
!le16 507
|
||||
!be24 2570964
|
||||
!le16 514
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2541060
|
||||
!le16 876
|
||||
!be24 2573566
|
||||
!le16 883
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2544024
|
||||
!le16 829
|
||||
!be24 2576589
|
||||
!le16 843
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2547902
|
||||
!le16 1283
|
||||
!be24 2580533
|
||||
!le16 1297
|
||||
|
|
|
@ -3,4 +3,4 @@
|
|||
;
|
||||
; This file is automatically generated
|
||||
;
|
||||
!word 38
|
||||
!word 40
|
||||
|
|
|
@ -3,4 +3,4 @@
|
|||
;
|
||||
; This file is automatically generated
|
||||
;
|
||||
!word 57
|
||||
!word 59
|
||||
|
|
|
@ -3,4 +3,4 @@
|
|||
;
|
||||
; This file is automatically generated
|
||||
;
|
||||
!word 59
|
||||
!word 61
|
||||
|
|
|
@ -3,4 +3,4 @@
|
|||
;
|
||||
; This file is automatically generated
|
||||
;
|
||||
!word 83
|
||||
!word 85
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2566733
|
||||
!be24 2599555
|
||||
!le16 306
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2567383
|
||||
!be24 2600205
|
||||
!le16 336
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2567719
|
||||
!be24 2600541
|
||||
!le16 303
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2053780
|
||||
!be24 2071181
|
||||
!le16 69
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2554795
|
||||
!be24 2587485
|
||||
!le16 1640
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2567115
|
||||
!be24 2599937
|
||||
!le16 67
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2566129
|
||||
!be24 2598951
|
||||
!le16 12
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2565015
|
||||
!be24 2597837
|
||||
!le16 1062
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2562559
|
||||
!be24 2595353
|
||||
!le16 365
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2552155
|
||||
!be24 2584845
|
||||
!le16 2640
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2556793
|
||||
!le16 1444
|
||||
!be24 2589483
|
||||
!le16 1472
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2567039
|
||||
!be24 2599861
|
||||
!le16 76
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2566077
|
||||
!be24 2598899
|
||||
!le16 52
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2567182
|
||||
!be24 2600004
|
||||
!le16 201
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2562924
|
||||
!be24 2595718
|
||||
!le16 421
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2563345
|
||||
!le16 192
|
||||
!be24 2596139
|
||||
!le16 209
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2563537
|
||||
!be24 2596348
|
||||
!le16 107
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2563644
|
||||
!le16 281
|
||||
!be24 2596455
|
||||
!le16 292
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2563925
|
||||
!be24 2596747
|
||||
!le16 778
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2564703
|
||||
!be24 2597525
|
||||
!le16 285
|
||||
|
|
|
@ -4,5 +4,5 @@
|
|||
; This file is automatically generated
|
||||
;
|
||||
!byte 0
|
||||
!be24 2564988
|
||||
!be24 2597810
|
||||
!le16 27
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue