This commit is contained in:
4am 2024-04-21 15:14:08 -04:00
parent 78c069d6bd
commit adbb1d8dbe
72 changed files with 294 additions and 65 deletions

View File

@ -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.

BIN
res/ACTION.HGR/ODIN Normal file

Binary file not shown.

View File

@ -66,6 +66,7 @@ ACTBOXING.CONF=2
CATBOARD.CONF=1
ACTDIVEBMB.CONF=2
ACTDHGRWD.CONF=4
TITLENR2.CONF=1
SHR3.CONF=5
#set 4

8
res/ATTRACT/ODIN Normal file
View File

@ -0,0 +1,8 @@
#
# Attract mode for ODIN
# This file is automatically generated
#
ODIN=A
[eof]

18
res/GAMEHELP/ODIN Normal file
View File

@ -0,0 +1,18 @@
Place your pieces
Flip your opponent's pieces
joystick or keyboard
< select >
press Return to place
[eof]

View File

@ -65,6 +65,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

View File

@ -5,6 +5,7 @@
REVERSI
CHECKERS
MICROCHESS
ODIN
PENSATE
GO

View File

@ -6,5 +6,6 @@ ONE.ON.ONE2=ONE.ON.ONE
ROCK.N.SCROLL
POOL
NIMWIT
ODIN
[eof]

View File

@ -3,6 +3,7 @@
#
PENSATE
ODIN
REVERSI
GO
CHECKERS

View File

@ -7,9 +7,5 @@ POOL
NINE.MENS
NIMWIT
ONE.ON.ONE
REVERSI
PLACE.BALL
PENSATE
PITSTOP.II
[eof]

11
res/SS/TITLENR2.CONF Normal file
View File

@ -0,0 +1,11 @@
#
# HGR title slideshow of games that begin with "N"-"R"
#
REVERSI
PLACE.BALL
ODIN
PENSATE
PITSTOP.II
[eof]

BIN
res/TITLE.HGR.UNPACKED/ODIN Normal file

Binary file not shown.

BIN
res/TITLE.HGR/ODIN Normal file

Binary file not shown.

BIN
res/dsk/odin (4am pack).po Normal file

Binary file not shown.

View File

@ -27,6 +27,7 @@
- Mu Torere
- Nimwit
- Nine Men's Morris
- Odin
- Pay Day
- Place Ball
- Press Your Luck

View File

@ -42,7 +42,6 @@ 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]
Pro Football (Systems Design Lab)
Pro Golf (Home-Computer Software)

55
res/ports/odin/Makefile Normal file
View File

@ -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:

43
res/ports/odin/notes.txt Normal file
View File

@ -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)

BIN
res/ports/odin/src/OBJ1 Normal file

Binary file not shown.

BIN
res/ports/odin/src/OBJ1.X Normal file

Binary file not shown.

BIN
res/ports/odin/src/OBJ2 Normal file

Binary file not shown.

BIN
res/ports/odin/src/OBJ2.X Normal file

Binary file not shown.

View File

@ -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"

45
res/ports/odin/src/odin.a Normal file
View File

@ -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
jsr decrunch_no_reset_progress
!if * != $AA2F {
!serious "Adjust prelaunch to RTS at ", *
}
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

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2566141
!be24 2585326
!le16 592

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2550629
!le16 1526
!be24 2569733
!le16 1543

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2538517
!be24 2557550
!le16 507

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2541060
!be24 2560113
!le16 876

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2544024
!be24 2563097
!le16 829

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2547902
!be24 2566995
!le16 1283

View File

@ -3,4 +3,4 @@
;
; This file is automatically generated
;
!word 38
!word 39

View File

@ -3,4 +3,4 @@
;
; This file is automatically generated
;
!word 57
!word 58

View File

@ -3,4 +3,4 @@
;
; This file is automatically generated
;
!word 59
!word 60

View File

@ -3,4 +3,4 @@
;
; This file is automatically generated
;
!word 83
!word 84

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2566733
!be24 2585918
!le16 306

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2567383
!be24 2586568
!le16 336

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2567719
!be24 2586904
!le16 303

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2053780
!be24 2061933
!le16 69

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2554795
!be24 2573916
!le16 1640

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2567115
!be24 2586300
!le16 67

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2566129
!be24 2585314
!le16 12

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2565015
!be24 2584200
!le16 1062

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2562559
!be24 2581733
!le16 365

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2552155
!be24 2571276
!le16 2640

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2556793
!le16 1444
!be24 2575914
!le16 1455

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2567039
!be24 2586224
!le16 76

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2566077
!be24 2585262
!le16 52

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2567182
!be24 2586367
!le16 201

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2562924
!be24 2582098
!le16 421

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2563345
!be24 2582519
!le16 192

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2563537
!be24 2582711
!le16 107

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2563644
!le16 281
!be24 2582818
!le16 292

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2563925
!be24 2583110
!le16 778

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2564703
!be24 2583888
!le16 285

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2564988
!be24 2584173
!le16 27

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2568022
!be24 2587207
!le16 2370

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2559974
!le16 852
!be24 2579126
!le16 863

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2560826
!be24 2579989
!le16 596

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2549185
!le16 1444
!be24 2568278
!le16 1455

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 812075
!be24 819755
!le16 8184

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 828451
!be24 836131
!le16 8184

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 820259
!be24 827939
!le16 8192

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2537240
!le16 1277
!be24 2556253
!le16 1297

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2539024
!le16 2036
!be24 2558057
!le16 2056

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2541936
!le16 2088
!be24 2560989
!le16 2108

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2544853
!le16 3049
!be24 2563926
!le16 3069

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2556435
!be24 2575556
!le16 358

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2558237
!le16 1737
!be24 2577369
!le16 1757

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2561422
!le16 1137
!be24 2580585
!le16 1148

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 2536616
!le16 624
!be24 2555616
!le16 637

23
src/prelaunch/odin.a Normal file
View File

@ -0,0 +1,23 @@
;license:MIT
!cpu 6502
!to "build/PRELAUNCH.INDEXED/ODIN",plain
*=$106
!source "src/prelaunch/common.a"
+ENABLE_ACCEL
lda $AA2F
pha
lda #$60
sta $AA2F
jsr $8000
pla
sta $AA2F
+DISABLE_ACCEL
+NEW_RESET_VECTOR $200
jmp $AA2F
!if * > $1C0 {
!error "code is too large, ends at ", *
}