diff --git a/res/ATTRACT/ROULETTE b/res/ATTRACT/ROULETTE new file mode 100644 index 0000000..710da57 --- /dev/null +++ b/res/ATTRACT/ROULETTE @@ -0,0 +1,5 @@ +# +# Attract mode for ROULETTE +# This file is automatically generated +# + diff --git a/res/CACHE00.IDX b/res/CACHE00.IDX index 6af78ac..7b72fd4 100644 Binary files a/res/CACHE00.IDX and b/res/CACHE00.IDX differ diff --git a/res/CACHE01.IDX b/res/CACHE01.IDX index 807bcc9..e5e144f 100644 Binary files a/res/CACHE01.IDX and b/res/CACHE01.IDX differ diff --git a/res/CACHE10.IDX b/res/CACHE10.IDX index 7a62564..b55ad19 100644 Binary files a/res/CACHE10.IDX and b/res/CACHE10.IDX differ diff --git a/res/CACHE11.IDX b/res/CACHE11.IDX index e59a93b..1e66e13 100644 Binary files a/res/CACHE11.IDX and b/res/CACHE11.IDX differ diff --git a/res/GAMES.CONF b/res/GAMES.CONF index 901ffe9..75f6a60 100755 --- a/res/GAMES.CONF +++ b/res/GAMES.CONF @@ -81,6 +81,7 @@ 011000,PRESS.YOUR.LK=Press Your Luck/1988 000010,REVERSI=Reversi/1981 000010,ROCK.N.SCROLL=Rock & Scroll/1987 +000010,ROULETTE=Roulette/1979 000010,SEEGA=Seega/1988 000010,SHUFFLEBOARD=Shuffleboard/1981 100001,SILENT.SERVICE=Silent Service/1985 diff --git a/res/SS/CATLOUNGE.CONF b/res/SS/CATLOUNGE.CONF index 3df86b1..092c1a3 100644 --- a/res/SS/CATLOUNGE.CONF +++ b/res/SS/CATLOUNGE.CONF @@ -2,5 +2,6 @@ SHUFFLEBOARD CRAPS VIDEO.VEGAS +ROULETTE CMPTR.FOOSBALL POOL diff --git a/res/SS/TITLENOPQR.CONF b/res/SS/TITLENOPQR.CONF index 86e8cc2..656457e 100644 --- a/res/SS/TITLENOPQR.CONF +++ b/res/SS/TITLENOPQR.CONF @@ -2,5 +2,6 @@ ROCK.N.SCROLL POOL NINE.MENS +ROULETTE NIMWIT ONE.ON.ONE diff --git a/res/TITLE.HGR.UNPACKED/ROULETTE b/res/TITLE.HGR.UNPACKED/ROULETTE new file mode 100644 index 0000000..a6d41dc Binary files /dev/null and b/res/TITLE.HGR.UNPACKED/ROULETTE differ diff --git a/res/TITLE.HGR/ROULETTE b/res/TITLE.HGR/ROULETTE new file mode 100644 index 0000000..37f2a4b Binary files /dev/null and b/res/TITLE.HGR/ROULETTE differ diff --git a/res/dsk/roulette (4am pack).po b/res/dsk/roulette (4am pack).po new file mode 100644 index 0000000..17e2283 Binary files /dev/null and b/res/dsk/roulette (4am pack).po differ diff --git a/res/notes/wishlist.txt b/res/notes/wishlist.txt index b500c76..3dd1fb4 100644 --- a/res/notes/wishlist.txt +++ b/res/notes/wishlist.txt @@ -54,7 +54,6 @@ Pure Stat Baseball [needs-crack][64K] Pure Stat College Basketball Pyramid of Ra Ringside Seat (SSI) [4am/san inc crack][48K] -Roulette (Softape) [48K][BASIC] Sargon III (Hayden) [4am crack][supports-data-disk] Star League Baseball [needs-crack][64K] Star Rank Boxing II [4am crack][priority] diff --git a/res/ports/roulette/Makefile b/res/ports/roulette/Makefile new file mode 100644 index 0000000..8857b08 --- /dev/null +++ b/res/ports/roulette/Makefile @@ -0,0 +1,53 @@ +# 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=ROULETTE +LOADER=$(BUILDDIR)/LOADER.SYSTEM\#FF2000 +EXEADDR=4000 +DECOMPADDR=0800 +EXE=$(BUILDDIR)/ROULETTE\#06$(EXEADDR) +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/roulette.a + $(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$(EXE)" -C + @touch "$@" + +$(RES): $(BUILDDIR) + $(CADIUS) REPLACEFILE "$(BUILDDISK)" "/$(DISKVOLUME)/" "$@" -C + @touch "$@" + +$(COMPRESSED): + $(EXOMIZER) src/OBJ@0x$(DECOMPADDR) -o "$@" + +mount: $(BUILDDISK) + @open "$(BUILDDISK)" + +clean: + rm -rf "$(BUILDDIR)" + +$(BUILDDIR): + mkdir -p "$@" + $(CADIUS) CREATEVOLUME "$(BUILDDISK)" "$(DISKVOLUME)" 140KB -C + +all: clean mount + +.NOTPARALLEL: diff --git a/res/ports/roulette/src/OBJ b/res/ports/roulette/src/OBJ new file mode 100644 index 0000000..7270b59 Binary files /dev/null and b/res/ports/roulette/src/OBJ differ diff --git a/res/ports/roulette/src/OBJ.X b/res/ports/roulette/src/OBJ.X new file mode 100644 index 0000000..3f6c1a1 Binary files /dev/null and b/res/ports/roulette/src/OBJ.X differ diff --git a/res/ports/roulette/src/loader.a b/res/ports/roulette/src/loader.a new file mode 100644 index 0000000..36dbaf7 --- /dev/null +++ b/res/ports/roulette/src/loader.a @@ -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 $4000 + !word $FFFF + !word 0 + +filename + +PSTRING "ROULETTE" diff --git a/res/ports/roulette/src/roulette.a b/res/ports/roulette/src/roulette.a new file mode 100644 index 0000000..ed3bed4 --- /dev/null +++ b/res/ports/roulette/src/roulette.a @@ -0,0 +1,34 @@ +!cpu 6502 +*=$4000 +!to "build/ROULETTE#064000",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 * != $5b0e { + !serious "Adjust prelaunch to patch JSR at ", *, " to JMP" +} + jsr decrunch ; compressed data contains target address + ldx #0 +- lda $2c40, x + sta $0, x + inx + bne - + jmp $D566 ; RUN + +get_crunched_byte + lda compressed_data + inc get_crunched_byte+1 + bne + + inc get_crunched_byte+2 ++ rts diff --git a/src/prelaunch/roulette.a b/src/prelaunch/roulette.a new file mode 100644 index 0000000..048ef26 --- /dev/null +++ b/src/prelaunch/roulette.a @@ -0,0 +1,19 @@ +;license:MIT +;(c) 2025 by 4am + +!cpu 6502 +!to "build/PRELAUNCH.INDEXED/ROULETTE",plain +*=$106 + + !source "src/macros.a" + + +ENABLE_ACCEL + lda #$4C + sta $5b0e + jsr $4000 + +DISABLE_ACCEL + jmp $5b0e+3 + +!if * > PrelaunchMax { + !error "code is too large, ends at ", * +}