Compare commits

...

6 Commits

Author SHA1 Message Date
4am 535c4c841d some notes 2024-04-23 00:23:51 -04:00
4am 7acb717b11 some notes 2024-04-23 00:23:12 -04:00
4am b5dffa65ab add Hopman 2024-04-22 22:18:47 -04:00
4am bc38e605d9 update changelog 2024-04-22 21:58:35 -04:00
4am 43ab54a120 add Yewdow 2024-04-22 21:58:09 -04:00
4am 6637a5e51e add AntiAir 2024-04-22 21:33:43 -04:00
119 changed files with 1211 additions and 63 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.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
res/ACTION.HGR/ANTIAIR Normal file

Binary file not shown.

BIN
res/ACTION.HGR/ANTIAIR2 Normal file

Binary file not shown.

BIN
res/ACTION.HGR/HOPMAN Normal file

Binary file not shown.

BIN
res/ACTION.HGR/HOPMAN2 Normal file

Binary file not shown.

BIN
res/ACTION.HGR/YEWDOW Normal file

Binary file not shown.

View File

@ -83,6 +83,7 @@ SHR27.CONF=5
P3.CONF=1
STAR.BLAZER=0
ACTDHGR15.CONF=4
AB5.CONF=1
ACTIONEFG4.CONF=2
AO=0
HAYDEN.CONF=1

9
res/ATTRACT/ANTIAIR Normal file
View File

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

9
res/ATTRACT/HOPMAN Normal file
View File

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

8
res/ATTRACT/YEWDOW Normal file
View File

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

Binary file not shown.

Binary file not shown.

17
res/GAMEHELP/ANTIAIR Normal file
View File

@ -0,0 +1,17 @@
Shoot the aliens to release their cargo
Don't get blocked in!
joystick to move
button 0 to fire
[eof]

20
res/GAMEHELP/HOPMAN Normal file
View File

@ -0,0 +1,20 @@
Capture the flags and reach the goal
before time runs out
Avoid monsters & obstacles
joystick to move
button 0 to jump
Tip: you can change direction mid-jump
[eof]

18
res/GAMEHELP/YEWDOW Normal file
View File

@ -0,0 +1,18 @@
Put down markers to guide the car
to the flags before time runs out
joystick to move
hold button 0 and move
to place marker in that direction
[eof]

View File

@ -1,4 +1,3 @@
#
# Master game list
#
# Format:
@ -38,6 +37,7 @@
10061,ANGEL.1=Angel-1
01100,ANGRYBIRDS=Angry Birds
00001,ANKH=Ankh
10001,ANTIAIR=AntiAir
00010,APE.ESCAPE=Ape Escape
00010,AC=Apple Cider Spider
10011,APPLE.INVADER=Apple Invader
@ -224,6 +224,7 @@
11110,HEAVY.BARREL=Heavy Barrel
00011,HELLSTORM=Hell Storm
00001,HIGH.RISE=High Rise
10001,HOPMAN=Hopman
00010,HORIZON.V=Horizon V
00011,HUNGRYBOY=Hungryboy
00011,HYPER.HEAD.ON=Hyper Head On
@ -503,6 +504,7 @@
00000,WILLY.BYTE=Willy Byte
11130,WF=Wings of Fury
10010,XEVIOUS=Xevious
10001,YEWDOW=Yewdow
00011,ZARGS=Zargs
10010,ZAXXON=Zaxxon
00051,ZENITH=Zenith

View File

@ -6,6 +6,7 @@ BY
ARENA
BUG.BATTLE
BANDITS
ANTIAIR
A.CITY.DIES
B1
AO

View File

@ -8,6 +8,7 @@ AERIAL
BATTLEZONE
BOULDER.DASH3=BOULDER.DASH
AZTEC3=AZTEC
ANTIAIR2=ANTIAIR
AQUATRON
APPLE.PANIC
BEACH.LANDING

View File

@ -8,6 +8,7 @@ B21=B2
AGENT.U.S.A
ALCAZAR
BUBBLE.HEAD
ANTIAIR
BW3=BW
B12=B1
AXIS.ASSASSIN3=AXIS.ASSASSIN

View File

@ -8,6 +8,7 @@ HARD.HAT.MACK2=HARD.HAT.MACK
JOUST2=JOUST
IKARI.WARRIORS
J.BIRD
HOPMAN
INFILTRATOR2=INFILTRATOR
JUMPMAN
JUGGLER

View File

@ -6,6 +6,7 @@ LODE001=LODE.RUNNER
HARD.HAT.MACK
LOST.TOMB
HORIZON.V2=HORIZON.V
HOPMAN2=HOPMAN
LIFT2=LIFT
HANDY.DANDY
HELLSTORM2=HELLSTORM

View File

@ -8,6 +8,7 @@ TRACK.ATTACK
TERITORY
ZP
TC
YEWDOW
VIDEO.VEGAS4=VIDEO.VEGAS
TC3=TC
AF

View File

@ -7,6 +7,7 @@ JUGGLER
JELLYFISH
LADY.TUT
H.E.R.O
HOPMAN
JUNGLE.HUNT
INVASION.FORCE
HUNGRYBOY

View File

@ -8,6 +8,7 @@ GUNTUS
SPUTNIK.ATTACK
AERIAL
BERZAP
ANTIAIR
CS
GADGETZ
BOOTSKELL

View File

@ -6,6 +6,7 @@ ALIEN.DOWNPOUR
RUPTUS
PENETRATOR
ROBOTICS
YEWDOW
DINO.SMURF
ASCEND
GENIUS.3

View File

@ -5,6 +5,7 @@
BUTCHERBOB.86
NEURAS
LA
HOPMAN
NT
WALL.DEFENCE
CAVIT

View File

@ -12,6 +12,7 @@ TIME.TUNNELS
VIDEO.VEGAS
WALL.DEFENCE
WAVY.NAVY
YEWDOW
THIEF
[eof]

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

1
res/TITLE.HGR/ANTIAIR Normal file

File diff suppressed because one or more lines are too long

BIN
res/TITLE.HGR/HOPMAN Normal file

Binary file not shown.

1
res/TITLE.HGR/YEWDOW Normal file

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,13 @@
# Total Replay changelog
## Revision 5.2 / unreleased
### Games added in v5.2
- AntiAir
- Hopman
- Yewdow
## Revision 5.1 / serial number 20240216
### Games added in v5.1

View File

@ -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=ANTIAIR
LOADER=$(BUILDDIR)/LOADER.SYSTEM\#FF2000
EXE=$(BUILDDIR)/ANTIAIR\#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/antiair.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.

Binary file not shown.

BIN
res/ports/antiair/src/OBJ Normal file

Binary file not shown.

BIN
res/ports/antiair/src/OBJ.X Normal file

Binary file not shown.

View File

@ -0,0 +1,29 @@
!cpu 6502
*=$8000
!to "build/ANTIAIR#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 * != $955A {
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
}
jsr decrunch ; compressed data contains target address
jmp $4000
get_crunched_byte
lda compressed_data
inc get_crunched_byte+1
bne +
inc get_crunched_byte+2
+ rts

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 7,"ANTIAIR"

Binary file not shown.

View File

@ -0,0 +1,73 @@
;license:MIT
;(c) 2024 by 4am
;
!ifndef _CONSTANTS_ {
SELF_MODIFIED_BYTE = $FD
SELF_MODIFIED_WORD = $FDFD
; standard memory addresses
CH = $24
CV = $25
BASL = $28
INVFLG = $32
RWTS_PTR = $48
RNDL = $4E
RNDH = $4F
PRODOS_MLI = $BF00
PRODOS_BOOT_UNIT = $BF30
PRODOS_MEMORY_MAP = $BF58
PRODOS_MACHID = $BF98
KBD = $C000
CLEARKBD = $C010
STOREOFF = $C000 ; STA then use the following 4 flags:
READMAINMEM = $C002 ; STA to read from main mem
READAUXMEM = $C003 ; STA to read from aux mem
WRITEMAINMEM = $C004 ; STA to write to main mem
WRITEAUXMEM = $C005 ; STA to write to aux mem
CLR80VID = $C00C ; 40 columns
PRIMARYCHARSET = $C00E ; no mousetext for you
ALTCHARSET = $C00F ; yay mousetext
CLEARKBD = $C010 ; clear last key pressed
SLOT3STATUS = $C017 ; bit 7 only
MONOCOLOR = $C021 ; IIgs bit 7 switches composite mono/color modes
TBCOLOR = $C022 ; IIgs text foreground and background colors (also VidHD but write-only)
NEWVIDEO = $C029 ; IIgs graphics modes (also VidHD)
CLOCKCTL = $C034 ; bits 0-3 are IIgs border color (also VidHD)
GFXMODE = $C050
TEXTMODE = $C051
FULLGFX = $C052
MIXEDGFX = $C053
PAGE1 = $C054 ; page 1 (affects text, HGR, DHGR)
PAGE2 = $C055 ; page 2 (affects text, HGR, DHGR)
HIRES = $C057
AUXMOVE = $C311
ROM_TEXT = $FB2F
ROM_FINALIZE_RESET = $FB6F
ROM_MACHINEID = $FBB3
ROM_BASCALC = $FBC1
ROM_HOME = $FC58
ROM_CLREOL_FROM_Y = $FC9E
ROM_WAIT = $FCA8
ROM_KEYIN = $FD1B
ROM_COUT = $FDED
ROM_COUT1 = $FDF0
ROM_INVERSE = $FE80 ; INVERSE text
ROM_NORMAL = $FE84 ; NORMAL text (instead of INVERSE or FLASH)
ROM_IN0 = $FE89 ; SETKBD
ROM_PR0 = $FE93 ; SETVID
; ProDOS constants
CMD_QUIT = $65
CMD_ONLINE = $C5
CMD_SETPREFIX = $C6
CMD_GETPREFIX = $C7
CMD_OPEN = $C8
CMD_READ = $CA
CMD_WRITE = $CB
CMD_CLOSE = $CC
CMD_SEEK = $CE
_CONSTANTS_=*
}

View File

@ -0,0 +1,487 @@
; This source code is altered and is not the original version found on
; the Exomizer homepage.
; It contains modifications made by qkumba to depack a packed file
; optionally crunched forward, and additional modifications by 4am
; for an optional progress UI.
;
; Original copyright statement follows:
;
; Copyright (c) 2002 - 2018 Magnus Lind.
;
; This software is provided 'as-is', without any express or implied warranty.
; In no event will the authors be held liable for any damages arising from
; the use of this software.
;
; Permission is granted to anyone to use this software for any purpose,
; including commercial applications, and to alter it and redistribute it
; freely, subject to the following restrictions:
;
; 1. The origin of this software must not be misrepresented; you must not
; claim that you wrote the original software. If you use this software in a
; product, an acknowledgment in the product documentation would be
; appreciated but is not required.
;
; 2. Altered source versions must be plainly marked as such, and must not
; be misrepresented as being the original software.
;
; 3. This notice may not be removed or altered from any distribution.
;
; 4. The names of this software and/or it's copyright holders may not be
; used to endorse or promote products derived from this software without
; specific prior written permission.
;
; -------------------------------------------------------------------
; The decruncher jsr:s to the get_crunched_byte address when it wants to
; read a crunched byte into A. This subroutine has to preserve X and Y
; register and must not modify the state of the carry nor the overflow flag.
; -------------------------------------------------------------------
;.import get_crunched_byte
; -------------------------------------------------------------------
; this function is the heart of the decruncher.
; It initializes the decruncher zeropage locations and precalculates the
; decrunch tables and decrunches the data
; This function will not change the interrupt status bit and it will not
; modify the memory configuration.
; -------------------------------------------------------------------
;.export decrunch
; -------------------------------------------------------------------
; Controls if the shared get_bits routines should be inlined or not.
;INLINE_GET_BITS=1
; -------------------------------------------------------------------
; if literal sequences is not used (the data was crunched with the -c
; flag) then the following line can be uncommented for shorter and.
; slightly faster code.
;LITERAL_SEQUENCES_NOT_USED = 1
; -------------------------------------------------------------------
; if the sequence length is limited to 256 (the data was crunched with
; the -M256 flag) then the following line can be uncommented for
; shorter and slightly faster code.
;MAX_SEQUENCE_LENGTH_256 = 1
; -------------------------------------------------------------------
; if the sequence length 3 has its own offset table then the following
; line can be uncommented for in some situations slightly better
; compression at the cost of a larger decrunch table.
EXTRA_TABLE_ENTRY_FOR_LENGTH_THREE = 1
; -------------------------------------------------------------------
; optional progress UI
!IFNDEF SHOW_PROGRESS_DURING_DECRUNCH {
!set SHOW_PROGRESS_DURING_DECRUNCH = 0
}
; -------------------------------------------------------------------
; zero page addresses used
; -------------------------------------------------------------------
zp_len_lo = $a7
zp_len_hi = $a8
zp_src_lo = $ae
zp_src_hi = zp_src_lo + 1
zp_bits_hi = $fc
zp_bitbuf = $fd
zp_dest_lo = zp_bitbuf + 1 ; dest addr lo
zp_dest_hi = zp_bitbuf + 2 ; dest addr hi
!IFDEF EXTRA_TABLE_ENTRY_FOR_LENGTH_THREE {
encoded_entries = 68
} ELSE {
encoded_entries = 52
}
tabl_bi = decrunch_table
tabl_lo = decrunch_table + encoded_entries
tabl_hi = decrunch_table + encoded_entries * 2
;; refill bits is always inlined
!MACRO mac_refill_bits {
pha
jsr get_crunched_byte
rol
sta zp_bitbuf
pla
}
!IFDEF INLINE_GET_BITS {
!MACRO mac_get_bits {
adc #$80 ; needs c=0, affects v
asl
bpl gb_skip
gb_next:
asl zp_bitbuf
bne gb_ok
mac_refill_bits
gb_ok:
rol
bmi gb_next
gb_skip:
bvc skip
gb_get_hi:
sec
sta zp_bits_hi
jsr get_crunched_byte
skip:
}
} ELSE {
!MACRO mac_get_bits {
jsr get_bits
}
get_bits:
adc #$80 ; needs c=0, affects v
asl
bpl gb_skip
gb_next:
asl zp_bitbuf
bne gb_ok
+mac_refill_bits
gb_ok:
rol
bmi gb_next
gb_skip:
bvs gb_get_hi
rts
gb_get_hi:
sec
sta zp_bits_hi
jmp get_crunched_byte
}
; -------------------------------------------------------------------
; no code below this comment has to be modified in order to generate
; a working decruncher of this source file.
; However, you may want to relocate the tables last in the file to a
; more suitable address.
; -------------------------------------------------------------------
; -------------------------------------------------------------------
; jsr this label to decrunch, it will in turn init the tables and
; call the decruncher
; no constraints on register content, however the
; decimal flag has to be #0 (it almost always is, otherwise do a cld)
decrunch:
!IF SHOW_PROGRESS_DURING_DECRUNCH = 1 {
ldx #(kExoProgressWidth+2)
lda #$DF
- sta $0528+(20-(kExoProgressWidth/2))-2, x
sta $05A8+(20-(kExoProgressWidth/2))-2, x
dex
bpl -
lda #$20
sta $05A8+(20-(kExoProgressWidth/2))-2
sta $05A8+(20-(kExoProgressWidth/2))+kExoProgressWidth
lda #$A8+(20-(kExoProgressWidth/2))-1
sta ExoProgressPtr+1
decrunch_no_reset_progress:
}
; -------------------------------------------------------------------
; init zeropage, x and y regs. (12 bytes)
;
ldy #0
ldx #3
init_zp:
jsr get_crunched_byte
sta zp_bitbuf - 1,x
dex
bne init_zp
; -------------------------------------------------------------------
; calculate tables (62 bytes) + get_bits macro
; x and y must be #0 when entering
;
clc
table_gen:
tax
tya
and #$0f
sta tabl_lo,y
beq shortcut ; start a new sequence
; -------------------------------------------------------------------
txa
adc tabl_lo - 1,y
sta tabl_lo,y
lda zp_len_hi
adc tabl_hi - 1,y
shortcut:
sta tabl_hi,y
; -------------------------------------------------------------------
lda #$01
sta <zp_len_hi
lda #$78 ; %01111000
+mac_get_bits
; -------------------------------------------------------------------
lsr
tax
beq rolled
php
rolle:
asl zp_len_hi
sec
ror
dex
bne rolle
plp
rolled:
ror
sta tabl_bi,y
bmi no_fixup_lohi
lda zp_len_hi
stx zp_len_hi
!BYTE $24
no_fixup_lohi:
txa
; -------------------------------------------------------------------
iny
cpy #encoded_entries
bne table_gen
; -------------------------------------------------------------------
; prepare for main decruncher
ldy zp_dest_lo
stx zp_dest_lo
stx zp_bits_hi
; -------------------------------------------------------------------
; copy one literal byte to destination (11(10) bytes)
;
!ifndef FORWARD_DECRUNCHING {
!set FORWARD_DECRUNCHING = 1
}
literal_start1:
!IF SHOW_PROGRESS_DURING_DECRUNCH = 1 {
dec ExoProgressCounter
bne +
lda #$20
ExoProgressPtr
sta $0500 ; SMC lo byte
inc ExoProgressPtr+1
+
}
!if FORWARD_DECRUNCHING = 0 {
tya
bne no_hi_decr
dec zp_dest_hi
no_hi_decr:
dey
jsr get_crunched_byte
sta (zp_dest_lo),y
} else {
jsr get_crunched_byte
sta (zp_dest_lo),y
iny
bne no_hi_incr
inc zp_dest_hi
no_hi_incr:
}
; -------------------------------------------------------------------
; fetch sequence length index (15 bytes)
; x must be #0 when entering and contains the length index + 1
; when exiting or 0 for literal byte
next_round:
dex
lda zp_bitbuf
no_literal1:
asl
bne nofetch8
jsr get_crunched_byte
rol
nofetch8:
inx
bcc no_literal1
sta zp_bitbuf
; -------------------------------------------------------------------
; check for literal byte (2 bytes)
;
beq literal_start1
; -------------------------------------------------------------------
; check for decrunch done and literal sequences (4 bytes)
;
cpx #$11
!IFDEF INLINE_GET_BITS {
bcc skip_jmp
jmp exit_or_lit_seq
skip_jmp:
} ELSE {
bcs exit_or_lit_seq
}
; -------------------------------------------------------------------
; calulate length of sequence (zp_len) (18(11) bytes) + get_bits macro
;
lda tabl_bi - 1,x
+mac_get_bits
adc tabl_lo - 1,x ; we have now calculated zp_len_lo
sta zp_len_lo
!IFNDEF MAX_SEQUENCE_LENGTH_256 {
lda zp_bits_hi
adc tabl_hi - 1,x ; c = 0 after this.
sta zp_len_hi
; -------------------------------------------------------------------
; here we decide what offset table to use (27(26) bytes) + get_bits_nc macro
; z-flag reflects zp_len_hi here
;
ldx zp_len_lo
} ELSE {
tax
}
lda #$e1
!IFDEF EXTRA_TABLE_ENTRY_FOR_LENGTH_THREE {
cpx #$04
} ELSE {
cpx #$03
}
bcs gbnc2_next
lda tabl_bit - 1,x
gbnc2_next:
asl zp_bitbuf
bne gbnc2_ok
tax
jsr get_crunched_byte
rol
sta zp_bitbuf
txa
gbnc2_ok:
rol
bcs gbnc2_next
tax
; -------------------------------------------------------------------
; calulate absolute offset (zp_src) (21(23) bytes) + get_bits macro
;
!IFNDEF MAX_SEQUENCE_LENGTH_256 {
lda #0
sta zp_bits_hi
}
lda tabl_bi,x
+mac_get_bits
!if FORWARD_DECRUNCHING = 0 {
adc tabl_lo,x
sta zp_src_lo
lda zp_bits_hi
adc tabl_hi,x
adc zp_dest_hi
} else {
clc
adc tabl_lo,x
eor #$ff
sta zp_src_lo
lda zp_dest_hi
bcc skip_dest_hi
sbc #1
clc
skip_dest_hi:
sbc zp_bits_hi
sbc tabl_hi,x
clc
}
sta zp_src_hi
; -------------------------------------------------------------------
; prepare for copy loop (2 bytes)
;
pre_copy:
ldx zp_len_lo
; -------------------------------------------------------------------
; main copy loop (30 bytes)
;
copy_next:
!if FORWARD_DECRUNCHING = 0 {
tya
bne copy_skip_hi
dec zp_dest_hi
dec zp_src_hi
copy_skip_hi:
dey
}
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
bcs get_literal_byte
}
lda (zp_src_lo),y
literal_byte_gotten:
sta (zp_dest_lo),y
!if FORWARD_DECRUNCHING = 1 {
iny
bne copy_skip_hi
inc zp_dest_hi
inc zp_src_hi
copy_skip_hi:
}
dex
bne copy_next
!IFNDEF MAX_SEQUENCE_LENGTH_256 {
lda zp_len_hi
!IFDEF INLINE_GET_BITS {
bne copy_next_hi
}
}
begin_stx:
stx zp_bits_hi
!IFNDEF INLINE_GET_BITS {
beq next_round
} ELSE {
jmp next_round
}
!IFNDEF MAX_SEQUENCE_LENGTH_256 {
copy_next_hi:
dec zp_len_hi
jmp copy_next
}
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
get_literal_byte:
jsr get_crunched_byte
bcs literal_byte_gotten
}
; -------------------------------------------------------------------
; exit or literal sequence handling (16(12) bytes)
;
exit_or_lit_seq:
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
beq decr_exit
jsr get_crunched_byte
!IFNDEF MAX_SEQUENCE_LENGTH_256 {
sta zp_len_hi
}
jsr get_crunched_byte
tax
bcs copy_next
decr_exit:
}
rts
!IFDEF EXTRA_TABLE_ENTRY_FOR_LENGTH_THREE {
; -------------------------------------------------------------------
; the static stable used for bits+offset for lengths 1, 2 and 3 (3 bytes)
; bits 2, 4, 4 and offsets 64, 48, 32 corresponding to
; %10010000, %11100011, %11100010
tabl_bit:
!BYTE $90, $e3, $e2
} ELSE {
; -------------------------------------------------------------------
; the static stable used for bits+offset for lengths 1 and 2 (2 bytes)
; bits 2, 4 and offsets 48, 32 corresponding to %10001100, %11100010
tabl_bit:
!BYTE $8c, $e2
}
!IF SHOW_PROGRESS_DURING_DECRUNCH = 1 {
ExoProgressCounter
!byte $00
}
; -------------------------------------------------------------------
; end of decruncher
; -------------------------------------------------------------------
; -------------------------------------------------------------------
; this 156 (204) byte table area may be relocated. It may also be
; clobbered by other data between decrunches.
; -------------------------------------------------------------------
decrunch_table=$200;;:
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;;.IFDEF EXTRA_TABLE_ENTRY_FOR_LENGTH_THREE
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;;.ENDIF
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;; .byte 0,0,0,0,0,0,0,0,0,0,0,0
; -------------------------------------------------------------------
; end of decruncher
; -------------------------------------------------------------------

View File

@ -0,0 +1,55 @@
!macro INIT_MACHINE {
cld
bit $C082
sta PRIMARYCHARSET
sta CLR80VID
sta STOREOFF
sta READMAINMEM
jsr ROM_TEXT
jsr ROM_HOME
jsr ROM_PR0
jsr ROM_IN0
}
; X=0, Z=1 on exit
; A clobbered
; Y preserved
!macro SHORT_COPY .start, .end, .target {
ldx #<(.end-.start)
- lda .start-1, x
sta .target-1, x
dex
bne -
}
!macro READ_ENTIRE_FILE .parm_open, .parm_read {
jsr PRODOS_MLI
!byte CMD_OPEN
!word .parm_open
jsr PRODOS_MLI
!byte CMD_READ
!word .parm_read
jsr PRODOS_MLI
!byte CMD_CLOSE
!word +
!byte $2C
+ !byte 1
!byte 0
}
!macro COPY_TO_AUXMEM .mainstart, .mainend, .auxstart {
lda #<.mainstart
sta $3C
lda #>.mainstart
sta $3D
lda #<.mainend
sta $3E
lda #>.mainend
sta $3F
lda #<.auxstart
sta $42
lda #>.auxstart
sta $43
sec
jsr AUXMOVE
}

View File

@ -0,0 +1,54 @@
;license:MIT
;(c) 2024 by 4am
;
;
; Ensure ProDOS has a current prefix, otherwise opening any file will fail,
; which is bad. If launched from Bitsy Bye, there will be no current prefix.
; In that case, we get the boot volume name, then set the prefix to that.
; PREFIX_BUFFER ($40 bytes) is clobbered but may be reused after.
;
prefix_loop
jsr PRODOS_MLI
op_prefix
!byte CMD_GETPREFIX ; self-modified
!word parm_prefix
ldx PREFIX_BUFFER
bne clear_memory_map
; get boot volume name
lda PRODOS_BOOT_UNIT
sta parm_online_unit
jsr PRODOS_MLI
!byte CMD_ONLINE
!word parm_online
lda PREFIX_BUFFER+1
and #$0F
tax
inx
stx PREFIX_BUFFER
lda #$2F
sta PREFIX_BUFFER+1
; PREFIX_BUFFER is now a length-prefixed string
; of '/' + the boot volume name
dec op_prefix ; -> CMD_SETPREFIX
bne prefix_loop ; always branches
parm_prefix
!byte 1
!word PREFIX_BUFFER
parm_online
!byte 2
parm_online_unit
!byte SELF_MODIFIED_BYTE
!word PREFIX_BUFFER+1
clear_memory_map
; clear ProDOS memory bitmap
ldx #$17
lda #$00
- sta PRODOS_MEMORY_MAP, x
dex
bpl -

51
res/ports/hopman/Makefile Normal file
View File

@ -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=HOPMAN
LOADER=$(BUILDDIR)/LOADER.SYSTEM\#FF2000
EXE=$(BUILDDIR)/HOPMAN\#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/hopman.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.

Binary file not shown.

BIN
res/ports/hopman/src/OBJ Normal file

Binary file not shown.

BIN
res/ports/hopman/src/OBJ.X Normal file

Binary file not shown.

View File

@ -0,0 +1,29 @@
!cpu 6502
*=$8000
!to "build/HOPMAN#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 * != $98D6 {
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
}
jsr decrunch ; compressed data contains target address
jmp $4000
get_crunched_byte
lda compressed_data
inc get_crunched_byte+1
bne +
inc get_crunched_byte+2
+ rts

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 6,"HOPMAN"

51
res/ports/yewdow/Makefile Normal file
View File

@ -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=YEWDOW
LOADER=$(BUILDDIR)/LOADER.SYSTEM\#FF2000
EXE=$(BUILDDIR)/YEWDOW\#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/yewdow.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.

Binary file not shown.

BIN
res/ports/yewdow/src/OBJ Normal file

Binary file not shown.

BIN
res/ports/yewdow/src/OBJ.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 6,"YEWDOW"

View File

@ -0,0 +1,29 @@
!cpu 6502
*=$8000
!to "build/YEWDOW#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 * != $99CD {
!serious "Adjust prelaunch to patch JSR at ", *, " to JMP"
}
jsr decrunch ; compressed data contains target address
jmp $4000
get_crunched_byte
lda compressed_data
inc get_crunched_byte+1
bne +
inc get_crunched_byte+2
+ rts

View File

@ -27,8 +27,8 @@
; DFB4..DFFF - (de)acceleration function
;
; MAIN MEMORY DURING SEARCH/BROWSE MODE
; 6000..9FFF - search index
; A000..BCFF - search cache
; 6000..9FFF - search index (489 games = $3AEB/$4000)
; A000..BCFF - search cache (489 games = $1957/$1D00)
; BD00..BEFF - prefs buffer (used to write PREFS.CONF if cheat mode changes)
; BF00..BFFF - ProRWTS glue (supports LoadIndexedFile)
;

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15468090
!be24 15514779
!le16 5112

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15413369
!le16 5695
!be24 15459857
!le16 5707

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15346289
!be24 15392547
!le16 4043

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15360536
!be24 15406794
!le16 4508

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15378696
!le16 5840
!be24 15425028
!le16 5861

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15399545
!le16 6466
!be24 15445972
!le16 6487

View File

@ -3,4 +3,4 @@
;
; This file is automatically generated
;
!word 443
!word 446

View File

@ -3,4 +3,4 @@
;
; This file is automatically generated
;
!word 486
!word 489

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15473202
!be24 15519891
!le16 410

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15473956
!be24 15520645
!le16 449

View File

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

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 12321166
!be24 12348895
!le16 1652

View File

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

View File

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

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15468031
!be24 15514720
!le16 59

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15466487
!be24 15513176
!le16 1426

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15450679
!be24 15497299
!le16 557

View File

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

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15423702
!le16 7358
!be24 15470202
!le16 7398

View File

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

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15467913
!be24 15514602
!le16 118

View File

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

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15451236
!le16 4922
!be24 15497856
!le16 4951

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15456158
!le16 1775
!be24 15502807
!le16 1802

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15457933
!be24 15504609
!le16 1181

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15459114
!be24 15505790
!le16 3421

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15462535
!be24 15509211
!le16 3359

View File

@ -4,5 +4,5 @@
; This file is automatically generated
;
!byte 0
!be24 15465894
!be24 15512570
!le16 479

Some files were not shown because too many files have changed in this diff Show More