mirror of
https://github.com/a2-4am/passport.git
synced 2025-01-11 16:30:22 +00:00
commit
f7b50af0e0
13
Makefile
13
Makefile
@ -11,15 +11,24 @@
|
||||
|
||||
# third-party tools required to build
|
||||
# https://sourceforge.net/projects/acme-crossass/
|
||||
ACME=`which acme`
|
||||
ACME=acme
|
||||
# https://sourceforge.net/projects/applecommander/
|
||||
AC=bin/AppleCommander.jar
|
||||
# https://bitbucket.org/magli143/exomizer/wiki/Home
|
||||
EXOMIZER=exomizer
|
||||
|
||||
BUILDDISK=build/passport.po
|
||||
|
||||
asm:
|
||||
mkdir -p build
|
||||
cd src && $(ACME) passport.a && cd -
|
||||
cd src/mods && $(ACME) universalrwts.a
|
||||
$(EXOMIZER) raw -q build/universalrwts.bin -o build/universalrwts.tmp
|
||||
printf "\xB8\x00" | cat - build/universalrwts.tmp > build/universalrwts.pak
|
||||
cd src/mods && $(ACME) t00only.a
|
||||
$(EXOMIZER) raw -q build/t00only.bin -o build/t00only.tmp
|
||||
printf "\x20\x00" | cat - build/t00only.tmp > build/t00only.pak
|
||||
cd src && $(ACME) passport.a 2> ../build/relbase.log
|
||||
cd src && $(ACME) -DRELBASE=`cat ../build/relbase.log | cut -d"=" -f2 | cut -d"(" -f2 | cut -d")" -f1` passport.a
|
||||
cp res/work.po $(BUILDDISK)
|
||||
java -jar $(AC) -p $(BUILDDISK) "PASSPORT.SYSTEM" sys 0x2000 < build/PASSPORT.SYSTEM
|
||||
|
||||
|
@ -1,6 +0,0 @@
|
||||
to create the compressed universalrwts.a:
|
||||
1. acme --cpu 6502 --setpc 0 -o universalrwts.bin universalrwts.org
|
||||
2. appack c universalrwts.bin universalrwts.pak
|
||||
3. use a sector editor to remove the first #$18 bytes of the universalrwts.pak file
|
||||
4. convert the binary back to ACME-compatible text (!byte, '$' for hex, no trailing commas)
|
||||
5. save in universalrwts.a
|
@ -191,10 +191,10 @@ IsEEEF
|
||||
;-------------------------------
|
||||
IsSyncBytes
|
||||
lda #$FD
|
||||
sta nibtableff
|
||||
sta gNIBTableFF
|
||||
jsr IsUnformatted
|
||||
lda #$3F
|
||||
sta nibtableff
|
||||
sta gNIBTableFF
|
||||
rts
|
||||
|
||||
;-------------------------------
|
||||
@ -216,7 +216,7 @@ IsUnformatted
|
||||
ldy #$00
|
||||
nibloop ldx $C0EC
|
||||
bpl nibloop
|
||||
lda nibtable,x
|
||||
lda gNIBTable,x
|
||||
bpl +
|
||||
inc unform
|
||||
bne +
|
||||
|
177
src/apicode.a
Normal file
177
src/apicode.a
Normal file
@ -0,0 +1,177 @@
|
||||
;-------------------------------
|
||||
; globally-accessible variables
|
||||
; in fixed position to allow
|
||||
; compressed code to work
|
||||
; offsets must match t00defs.a
|
||||
;-------------------------------
|
||||
|
||||
;gNIBTable
|
||||
!byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F
|
||||
!byte $90,$91,$92,$93,$94,$95,$00,$01,$98,$99,$02,$03,$9C,$04,$05,$06
|
||||
!byte $A0,$A1,$A2,$A3,$A4,$A5,$07,$08,$A8,$A9,$AA,$09,$0A,$0B,$0C,$0D
|
||||
!byte $B0,$B1,$0E,$0F,$10,$11,$12,$13,$B8,$14,$15,$16,$17,$18,$19,$1A
|
||||
!byte $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$1B,$CC,$1C,$1D,$1E
|
||||
!byte $D0,$D1,$D2,$1F,$D4,$D5,$20,$21,$D8,$22,$23,$24,$25,$26,$27,$28
|
||||
!byte $E0,$E1,$E2,$E3,$E4,$29,$2A,$2B,$E8,$2C,$2D,$2E,$2F,$30,$31,$32
|
||||
!byte $F0,$F1,$33,$34,$35,$36,$37,$38,$F8,$39,$3A,$3B,$3C,$3D,$3E
|
||||
;gNIBTableFF
|
||||
!byte $3F
|
||||
|
||||
;jConstructStandardDelivery
|
||||
jmp ConstructStandardDelivery
|
||||
;jCopyUniversalAnywhere
|
||||
jmp CopyUniversalAnywhere
|
||||
;jCopyMemory
|
||||
jmp CopyMemory
|
||||
;jCallRWTS
|
||||
jmp $FF59 ; modified at runtime
|
||||
;jSearchTrack
|
||||
jmp SearchTrack
|
||||
;jPrintByID
|
||||
jmp PrintByID
|
||||
;jmodify
|
||||
jmp modify
|
||||
;jcompare
|
||||
jmp compare
|
||||
;gDisplayBytes
|
||||
!fill 10 ; array of ten bytes for use as
|
||||
; substitution strings
|
||||
;gRAMDiskRef
|
||||
!byte 00 ; handle of RAM disk
|
||||
; non-zero if open
|
||||
;gUsingRAMDisk
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
|
||||
;gOnAClearDayYouCanReadForever
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; retry reads with a captured RWTS forever,
|
||||
; instead of falling back to built-in RWTS
|
||||
; compile-time flag, no way to change at runtime
|
||||
|
||||
FIRSTFILTER
|
||||
;gIsDatasoft
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsLaureate
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gAdventureInternational
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in TraceDOS33c() after tracing DOS 3.3-shaped RWTS
|
||||
;gIsMilliken1
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in TraceDOS33c() after tracing DOS 3.3-shaped RWTS
|
||||
;gIs8b3
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gPossibleD5D5F7
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsMECC4
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsMECC3
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsMECC2
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsMECC1
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsMECCFastloader
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsOptimum
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gPossibleGamco
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in SkipTrack() after reading T22
|
||||
;gIsEA
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsDavidDOS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsProtDOS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsPascal
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsProDOS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsRWTS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in AnalyzeT00() after reading T00
|
||||
;gIsMaster
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in AnalyzeT00() after reading T00
|
||||
;gIsBoot1
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in AnalyzeT00() after reading T00
|
||||
;gIsBoot0
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
;gIsDOS32
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
LASTFILTER
|
||||
|
||||
;gLastTrack
|
||||
!byte 00 ; int
|
||||
; the last track that we should try to read
|
||||
; (assuming reading from T22 down to T00)
|
||||
; reset to 0 before each operation, but some
|
||||
; disks (like DOS3.3P) will change it because
|
||||
; they write out the first few DOS tracks
|
||||
; manually before seeking up to T22 to convert
|
||||
; the rest of the disk
|
||||
;gChangedPrefs
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; whether we should try to write the configuration file
|
||||
; when the program exits
|
||||
; set to #TRUE when changing slots
|
||||
;gSaidWriting
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set to #TRUE after we print WRITING TO S%s,D%d
|
||||
;gTriedUniv
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; whether or not we've already tried the built-in RWTS
|
||||
; (and therefore a read error is fatal)
|
||||
; reset before each operation
|
||||
;gPatchCount
|
||||
!byte 00 ; int
|
||||
; number of patches we've applied to this disk
|
||||
; reset before each operation
|
||||
; incremented in modify()
|
||||
;gMode
|
||||
!byte %00000000 ; bit 7 0=verify, 1=see bit 6
|
||||
; bit 6 0=demuffin, 1=crack
|
||||
; set based on main menu choice
|
158
src/apidefs.a
Normal file
158
src/apidefs.a
Normal file
@ -0,0 +1,158 @@
|
||||
TRUE = $00 ; Lots of code assumes this is $00
|
||||
; so it can branch with BEQ, so
|
||||
; don't change it either!
|
||||
FALSE = $01
|
||||
|
||||
;-------------------------------
|
||||
;Standard Delivery table indexes
|
||||
;-------------------------------
|
||||
|
||||
ID_DOS33p = $00
|
||||
ID_DOS32 = $01
|
||||
ID_DOS32LO = $02
|
||||
|
||||
; Zero-page addresses we use for variables
|
||||
nibsrcindex = $EC ; byte
|
||||
nibdestindex = $ED ; byte
|
||||
prbuf = $EE ; word
|
||||
unform = $F0 ; word
|
||||
nibcount = $F2 ; byte
|
||||
modtmp = $F3 ; byte
|
||||
modsrc = $F4 ; word
|
||||
moddest = $F6 ; word
|
||||
cmp1 = $F8 ; word
|
||||
cmp2 = $FA ; word
|
||||
counter = $FC ; byte
|
||||
tmp = $FC ; byte
|
||||
iunit = $FC ; byte
|
||||
tmpa = $FC ; byte
|
||||
tmpx = $FD ; byte
|
||||
tmpy = $FE ; byte
|
||||
flag = $FF ; byte
|
||||
|
||||
; Application constants (not zero addresses)
|
||||
!ifdef RELBASE {
|
||||
!set VERBOSE = $00 ; override for make script
|
||||
} else {
|
||||
RELBASE = $2000 ; dummy assignment for first build
|
||||
; to allow calculation of proper value
|
||||
}
|
||||
LOWPOINT = $4300 ; lowest available address for code
|
||||
BASEPAGE = $10 ; Special Delivery tracer assumes
|
||||
; this is $10, so don't change it!
|
||||
|
||||
;-------------------------------
|
||||
; globally-accessible variables
|
||||
; in fixed position to allow
|
||||
; compressed code to work
|
||||
;-------------------------------
|
||||
|
||||
APIEND = $B600
|
||||
gMode = APIEND-$01 ; byte
|
||||
gPatchCount = gMode-$01 ; byte
|
||||
gTriedUniv = gPatchCount-$01 ; byte
|
||||
gSaidWriting = gTriedUniv-$01 ; byte
|
||||
gChangedPrefs = gSaidWriting-$01 ; byte
|
||||
gLastTrack = gChangedPrefs-$01 ; byte
|
||||
|
||||
;FIRSTFILTER ; add new gIs* below this line
|
||||
gIsDOS32 = gLastTrack-$01 ; byte
|
||||
gIsBoot0 = gIsDOS32-$01 ; byte
|
||||
gIsBoot1 = gIsBoot0-$01 ; byte
|
||||
gIsMaster = gIsBoot1-$01 ; byte
|
||||
gIsRWTS = gIsMaster-$01 ; byte
|
||||
gIsProDOS = gIsRWTS-$01 ; byte
|
||||
gIsPascal = gIsProDOS-$01 ; byte
|
||||
gIsProtDOS = gIsPascal-$01 ; byte
|
||||
gIsDavidDOS = gIsProtDOS-$01 ; byte
|
||||
gIsEA = gIsDavidDOS-$01 ; byte
|
||||
gPossibleGamco = gIsEA-$01 ; byte
|
||||
gIsOptimum = gPossibleGamco-$01 ; byte
|
||||
gIsMECCFastloader = gIsOptimum-$01 ; byte
|
||||
gIsMECC1 = gIsMECCFastloader-$01 ; byte
|
||||
gIsMECC2 = gIsMECC1-$01 ; byte
|
||||
gIsMECC3 = gIsMECC2-$01 ; byte
|
||||
gIsMECC4 = gIsMECC3-$01 ; byte
|
||||
gPossibleD5D5F7 = gIsMECC4-$01 ; byte
|
||||
gIs8b3 = gPossibleD5D5F7-$01 ; byte
|
||||
gIsMilliken1 = gIs8b3-$01 ; byte
|
||||
gAdventureInternational = gIsMilliken1-$01 ; byte
|
||||
gIsLaureate = gAdventureInternational-$01 ; byte
|
||||
gIsDatasoft = gIsLaureate-$01 ; byte
|
||||
;LASTFILTER ; add new gIs* above this line
|
||||
|
||||
gOnAClearDayYouCanReadForever = gIsDatasoft-$01 ; byte
|
||||
gUsingRAMDisk = gOnAClearDayYouCanReadForever-$01 ; byte
|
||||
gRAMDiskRef = gUsingRAMDisk-$01 ; byte
|
||||
gDisplayBytes = gRAMDiskRef-$0A ; 10 bytes
|
||||
jcompare = gDisplayBytes-$03 ; 3-byte
|
||||
jmodify = jcompare-$03 ; 3-byte
|
||||
jPrintByID = jmodify-$03 ; 3-byte
|
||||
jSearchTrack = jPrintByID-$03 ; 3-byte
|
||||
jCallRWTS = jSearchTrack-$03 ; 3-byte
|
||||
jCopyMemory = jCallRWTS-$03 ; 3-byte
|
||||
jCopyUniversalAnywhere = jCopyMemory-$03 ; 3-byte
|
||||
jConstructStandardDelivery = jCopyUniversalAnywhere-$03 ; 3-byte
|
||||
gNIBTableFF = jConstructStandardDelivery-1 ; 1 byte
|
||||
gNIBTable = gNIBTableFF-$FF ; accessed by +$80
|
||||
gNIBTableBase = gNIBTableFF-$7F ; 127 bytes
|
||||
|
||||
!ifdef MODULE {
|
||||
compare = jcompare
|
||||
modify = jmodify
|
||||
PrintByID = jPrintByID
|
||||
SearchTrack = jSearchTrack
|
||||
CallRWTS = jCallRWTS
|
||||
CopyMemory = jCopyMemory
|
||||
CopyUniversalAnywhere = jCopyUniversalAnywhere
|
||||
ConstructStandardDelivery = jConstructStandardDelivery
|
||||
}
|
||||
|
||||
!ifdef VERBOSE {
|
||||
!if VERBOSE=1 {
|
||||
!warn "gMode=",gMode
|
||||
!warn "gPatchCount=",gPatchCount
|
||||
!warn "gTriedUniv=",gTriedUniv
|
||||
!warn "gSaidWriting=",gSaidWriting
|
||||
!warn "gChangedPrefs=",gChangedPrefs
|
||||
!warn "gLastTrack=",gLastTrack
|
||||
!warn "gIsDOS32=",gIsDOS32
|
||||
!warn "gIsBoot0=",gIsBoot0
|
||||
!warn "gIsBoot1=",gIsBoot1
|
||||
!warn "gIsMaster=",gIsMaster
|
||||
!warn "gIsRWTS=",gIsRWTS
|
||||
!warn "gIsProDOS=",gIsProDOS
|
||||
!warn "gIsPascal=",gIsPascal
|
||||
!warn "gIsProtDOS=",gIsProtDOS
|
||||
!warn "gIsDavidDOS=",gIsDavidDOS
|
||||
!warn "gIsEA=",gIsEA
|
||||
!warn "gPossibleGamco=",gPossibleGamco
|
||||
!warn "gIsOptimum=",gIsOptimum
|
||||
!warn "gIsMECCFastloader=",gIsMECCFastloader
|
||||
!warn "gIsMECC1=",gIsMECC1
|
||||
!warn "gIsMECC2=",gIsMECC2
|
||||
!warn "gIsMECC3=",gIsMECC3
|
||||
!warn "gIsMECC4=",gIsMECC4
|
||||
!warn "gPossibleD5D5F7=",gPossibleD5D5F7
|
||||
!warn "gIs8b3=",gIs8b3
|
||||
!warn "gIsMilliken1=",gIsMilliken1
|
||||
!warn "gAdventureInternational=",gAdventureInternational
|
||||
!warn "gIsLaureate=",gIsLaureate
|
||||
!warn "gIsDatasoft=",gIsDatasoft
|
||||
!warn "gOnAClearDayYouCanReadForever=",gOnAClearDayYouCanReadForever
|
||||
!warn "gUsingRAMDisk=",gUsingRAMDisk
|
||||
!warn "gRAMDiskRef=",gRAMDiskRef
|
||||
!warn "gDisplayBytes=",gDisplayBytes
|
||||
!warn "jcompare=",jcompare
|
||||
!warn "jmodify=",jmodify
|
||||
!warn "jPrintByID=",jPrintByID
|
||||
!warn "jSearchTrack=",jSearchTrack
|
||||
!warn "jCallRWTS=",jCallRWTS
|
||||
!warn "jCopyMemory=",jCopyMemory
|
||||
!warn "jCopyUniversalAnywhere=",jCopyUniversalAnywhere
|
||||
!warn "jConstructStandardDelivery=",jConstructStandardDelivery
|
||||
!warn "gNIBTableFF=",gNIBTableFF
|
||||
!warn "gNIBTable=",gNIBTable
|
||||
!warn "gNIBTableBase=",gNIBTableBase
|
||||
}
|
||||
}
|
@ -11,23 +11,12 @@ IDBootloader
|
||||
; Reset all per-disk globals.
|
||||
; These are used as filters later so irrelevant patchers can be skipped.
|
||||
;
|
||||
ldx #(LASTFILTER-FIRSTFILTER)
|
||||
lda #FALSE
|
||||
sta gIsDOS32
|
||||
sta gIsBoot0
|
||||
sta gIsBoot1
|
||||
sta gIsMaster
|
||||
sta gIsRWTS
|
||||
sta gIsProDOS
|
||||
sta gIsPascal
|
||||
sta gIsProtDOS
|
||||
sta gIsDavidDOS
|
||||
sta gIsEA
|
||||
sta gIsMECCFastloader
|
||||
sta gPossibleGamco
|
||||
sta gPossibleD5D5F7
|
||||
sta gAdventureInternational
|
||||
lda #$00
|
||||
sta gLastTrack
|
||||
- sta FIRSTFILTER-1,x
|
||||
dex
|
||||
bne -
|
||||
stx gLastTrack
|
||||
;
|
||||
; Quick sanity check -- only recognized values for $0800
|
||||
; are 1 or 2 for regular disks, and 5 for possible Electronic Arts.
|
||||
@ -84,6 +73,8 @@ IDBootloader
|
||||
bcs +
|
||||
lda #s_jsr8b3
|
||||
jsr PrintByID
|
||||
lda #TRUE
|
||||
sta gIs8b3
|
||||
jmp Trace8B3
|
||||
;
|
||||
; Try to identify all the different MECC fastloader variants.
|
||||
@ -99,15 +90,23 @@ IDBootloader
|
||||
bcs .notmecc
|
||||
jsr IDMECC1
|
||||
bcs +
|
||||
lda #TRUE
|
||||
sta gIsMECC1
|
||||
jmp foundmecc1
|
||||
+ jsr IDMECC2
|
||||
bcs +
|
||||
lda #TRUE
|
||||
sta gIsMECC2
|
||||
jmp foundmecc2
|
||||
+ jsr IDMECC3
|
||||
bcs +
|
||||
lda #TRUE
|
||||
sta gIsMECC3
|
||||
jmp foundmecc3
|
||||
+ jsr IDMECC4
|
||||
bcs .notmecc
|
||||
lda #TRUE
|
||||
sta gIsMECC4
|
||||
jmp foundmecc4
|
||||
.notmecc
|
||||
;
|
||||
@ -127,6 +126,8 @@ IDBootloader
|
||||
bcs +
|
||||
lda #s_laureate
|
||||
jsr PrintByID
|
||||
lda #TRUE
|
||||
sta gIsLaureate
|
||||
lda #$0B
|
||||
jsr PrereadT00Partial
|
||||
bcs +
|
||||
@ -213,7 +214,9 @@ IDBootloader
|
||||
bcs +
|
||||
lda #s_datasoftb0
|
||||
jsr PrintByID
|
||||
bcc .useuniv ; always branches
|
||||
lda #TRUE
|
||||
sta gIsDatasoft
|
||||
beq .useuniv ; always branches
|
||||
;
|
||||
; Micrograms bootloader
|
||||
;
|
||||
@ -243,71 +246,6 @@ IDBootloader
|
||||
jmp UseUniversal
|
||||
}
|
||||
|
||||
;-------------------------------
|
||||
; AnalyzeT00
|
||||
; set additional flags based on contents of track $00
|
||||
;
|
||||
; in: Track $00 in data buffer
|
||||
; out: gIsBoot1, gIsMaster, gIsRWTS set to #TRUE or #FALSE
|
||||
; all flags clobbered
|
||||
; all registers clobbered
|
||||
;-------------------------------
|
||||
!zone {
|
||||
AnalyzeT00
|
||||
lda #$01
|
||||
ldx #$00
|
||||
ldy #$38
|
||||
jsr compare ; if T00,S01,$00 ==
|
||||
!byte $8E,$E9,$B7,$8E,$F7,$B7,$A9,$01
|
||||
!byte $8D,$F8,$B7,$8D,$EA,$B7,$AD,$E0
|
||||
!byte $B7,$8D,$E1,$B7,$A9,$02,$8D,$EC
|
||||
!byte $B7,$A9,$04,$8D,$ED,$B7,$AC,$E7
|
||||
!byte $B7,$88,$8C,$F1,$B7,$A9,$01,$8D
|
||||
!byte $F4,$B7,$8A,$4A,$4A,$4A,$4A,$AA
|
||||
!byte $A9,$00,$9D,$F8,$04,$9D,$78,$04
|
||||
ldx #TRUE
|
||||
bcc .boot1
|
||||
ldx #FALSE
|
||||
.boot1
|
||||
stx gIsBoot1
|
||||
|
||||
lda #$01
|
||||
ldx #$00
|
||||
ldy #$38
|
||||
jsr compare ; if T00,S01,$00 ==
|
||||
!byte $8E,$E9,$37,$8E,$F7,$37,$A9,$01
|
||||
!byte $8D,$F8,$37,$8D,$EA,$37,$AD,$E0
|
||||
!byte $37,$8D,$E1,$37,$A9,$02,$8D,$EC
|
||||
!byte $37,$A9,$04,$8D,$ED,$37,$AC,$E7
|
||||
!byte $37,$88,$8C,$F1,$37,$A9,$01,$8D
|
||||
!byte $F4,$37,$8A,$4A,$4A,$4A,$4A,$AA
|
||||
!byte $A9,$00,$9D,$F8,$04,$9D,$78,$04
|
||||
ldx #TRUE
|
||||
bcc .master
|
||||
ldx #FALSE
|
||||
.master
|
||||
stx gIsMaster
|
||||
|
||||
lda #$07
|
||||
ldx #$00
|
||||
ldy #$40
|
||||
jsr compare ; if T00,S07,$00 ==
|
||||
!byte $84,$48,$85,$49,$A0,$02,$8C,$F8
|
||||
!byte $06,$A0,$04,$8C,$F8,$04,$A0,$01
|
||||
!byte $B1,$48,$AA,$A0,$0F,$D1,$48,$F0
|
||||
!byte $1B,$8A,$48,$B1,$48,$AA,$68,$48
|
||||
!byte $91,$48,$BD,$8E,$C0,$A0,$08,$BD
|
||||
!byte $8C,$C0,$DD,$8C,$C0,$D0,$F6,$88
|
||||
!byte $D0,$F8,$68,$AA,$BD,$8E,$C0,$BD
|
||||
!byte $8C,$C0,$A0,$08,$BD,$8C,$C0,$48
|
||||
ldx #TRUE
|
||||
bcc .rwts
|
||||
ldx #FALSE
|
||||
.rwts
|
||||
stx gIsRWTS
|
||||
rts
|
||||
}
|
||||
|
||||
!zone {
|
||||
PrereadT00
|
||||
lda #$0F
|
||||
|
@ -34,8 +34,12 @@ IDMilliken1
|
||||
jsr compare
|
||||
!byte $A9,$AE,$8D,$00,$04,$4C,$99,$AD
|
||||
!byte $AE,$F8,$05,$BD,$89,$C0
|
||||
bcs +
|
||||
lda #TRUE
|
||||
sta gIsMilliken1
|
||||
bcc .exit
|
||||
|
||||
+
|
||||
; variant 2 (seen in The Writing Workshop)
|
||||
ldy #$0B
|
||||
jsr compare
|
||||
|
@ -154,11 +154,11 @@ TraceDOS32LO
|
||||
sta b4bbmodify+2
|
||||
sta b4bbmodify2+2
|
||||
adc #$04 ; $BD or $3D
|
||||
sta callrwts+2
|
||||
sta jCallRWTS+2
|
||||
adc #$02 ; $BF or $3F
|
||||
sta b4bbcompare+1
|
||||
lda #$00
|
||||
sta callrwts+1
|
||||
sta jCallRWTS+1
|
||||
|
||||
; set up final trace
|
||||
|
||||
@ -178,7 +178,7 @@ TraceDOS32LO
|
||||
.fail jmp FatalError
|
||||
|
||||
TraceDOS32d
|
||||
lda callrwts+2
|
||||
lda jCallRWTS+2
|
||||
ldx #$00 ; check for "STY $48;STA $49"
|
||||
ldy #$04 ; at RWTS entry point
|
||||
jsr CompareMemory ; (e.g. $BD00 or $3D00)
|
||||
@ -187,7 +187,7 @@ TraceDOS32d
|
||||
|
||||
lda #$FA
|
||||
sta modsrc
|
||||
lda callrwts+2
|
||||
lda jCallRWTS+2
|
||||
sec
|
||||
sbc #$05
|
||||
sta modsrc+1
|
||||
@ -240,7 +240,7 @@ TraceDOS32d
|
||||
sta gIsDOS32
|
||||
|
||||
; check for MUSE sector doubling RWTS
|
||||
lda callrwts+2
|
||||
lda jCallRWTS+2
|
||||
ldx #$09
|
||||
ldy #$02
|
||||
jsr CompareMemory
|
||||
@ -265,7 +265,7 @@ FFer
|
||||
bne +
|
||||
iny
|
||||
bne -
|
||||
ldy callrwts+2
|
||||
ldy jCallRWTS+2
|
||||
dey
|
||||
sty .G+2
|
||||
dey
|
||||
|
@ -69,13 +69,13 @@ _Inspect1a
|
||||
dex
|
||||
stx .x3+1
|
||||
stx .x4+1
|
||||
stx callrwts+2
|
||||
stx jCallRWTS+2
|
||||
jsr ProtectedDOS ; check for a specific (encrypted)
|
||||
; bootloader called "Protected DOS"
|
||||
bcs .notprotdos
|
||||
jmp ADStyle
|
||||
.notprotdos
|
||||
lda callrwts+2
|
||||
lda jCallRWTS+2
|
||||
ldx #$00 ; check for "STY $48;STA $49"
|
||||
ldy #$04 ; at RWTS entry point
|
||||
jsr CompareMemory ; (e.g. $BD00 or $3D00)
|
||||
|
@ -142,8 +142,7 @@ SDsuccess
|
||||
|
||||
; copy Standard Delivery bootloader into place for T00,S00
|
||||
|
||||
lda #<SD_DOS33p
|
||||
ldx #>SD_DOS33p
|
||||
ldx #ID_DOS33p
|
||||
jsr ConstructStandardDelivery
|
||||
lda #s_bootwrite
|
||||
jsr PrintByID
|
||||
@ -205,9 +204,9 @@ skipsectors
|
||||
; set up RWTS entry point
|
||||
|
||||
lda #$D5
|
||||
sta callrwts+1
|
||||
sta jCallRWTS+1
|
||||
lda #$36
|
||||
sta callrwts+2
|
||||
sta jCallRWTS+2
|
||||
|
||||
; read the rest of the disk with the original RWTS
|
||||
|
||||
|
@ -98,9 +98,9 @@ _restore3
|
||||
; Set up RWTS entry point
|
||||
;
|
||||
lda #$00
|
||||
sta callrwts+1
|
||||
sta jCallRWTS+1
|
||||
lda #$BD
|
||||
sta callrwts+2
|
||||
sta jCallRWTS+2
|
||||
;
|
||||
; Read the rest of the disk with the original RWTS
|
||||
;
|
||||
|
103
src/memory.a
103
src/memory.a
@ -79,6 +79,7 @@ ClearTSBuffer
|
||||
; in: A = source address (high)
|
||||
; X = destination address (high)
|
||||
; Y = number of pages to copy
|
||||
; C = dest direction (set: +, clear: -)
|
||||
; out: all flags and registers clobbered
|
||||
;-------------------------------
|
||||
!zone {
|
||||
@ -87,6 +88,10 @@ SwapMemory
|
||||
sta .source2+2
|
||||
stx .dest1+2
|
||||
stx .dest2+2
|
||||
lda #$FF
|
||||
adc #0
|
||||
ora #1
|
||||
sta .destadjust+1
|
||||
ldx #$00
|
||||
.source1 lda $FF00,x
|
||||
pha
|
||||
@ -98,13 +103,36 @@ SwapMemory
|
||||
bne .source1
|
||||
inc .source1+2
|
||||
inc .source2+2
|
||||
inc .dest1+2
|
||||
inc .dest2+2
|
||||
lda .dest1+2
|
||||
clc
|
||||
.destadjust
|
||||
adc #$D1
|
||||
sta .dest1+2
|
||||
sta .dest2+2
|
||||
dey
|
||||
bne .source1
|
||||
rts
|
||||
}
|
||||
|
||||
;-------------------------------
|
||||
; ReorderBuffer - convert data
|
||||
; buffer between ProDOS and
|
||||
; DOS 3.3 ordering (use after
|
||||
; read or before write under
|
||||
; ProDOS)
|
||||
; in: none
|
||||
; out: all flags clobbered
|
||||
; all registers clobbered
|
||||
;-------------------------------
|
||||
!zone {
|
||||
ReorderBuffer
|
||||
lda #BASEPAGE+1
|
||||
ldx #BASEPAGE+$0E
|
||||
ldy #$07
|
||||
clc
|
||||
jmp SwapMemory
|
||||
}
|
||||
|
||||
;-------------------------------
|
||||
; SaveProDOS
|
||||
; saves memory pages used by ProDOS
|
||||
@ -142,14 +170,17 @@ SwapProDOS
|
||||
lda #$00
|
||||
ldx #$40
|
||||
ldy #$01
|
||||
sec
|
||||
jsr SwapMemory
|
||||
lda #$03
|
||||
ldx #$41
|
||||
ldy #$01
|
||||
sec
|
||||
jsr SwapMemory
|
||||
lda #$BF
|
||||
ldx #$42
|
||||
ldy #$01
|
||||
sec
|
||||
jsr SwapMemory
|
||||
rts
|
||||
|
||||
@ -176,58 +207,38 @@ SwapProDOS
|
||||
; 0123456789ABCDEF
|
||||
; 07E6D5C4B3A2918F
|
||||
; in: track buffer has data in logical sector order
|
||||
; out: A,Y clobbered
|
||||
; X preserved
|
||||
; out: A,X,Y clobbered
|
||||
;-------------------------------
|
||||
!zone {
|
||||
ReorderLogicalToPhysical
|
||||
ldy #$00
|
||||
- lda $1100,y
|
||||
pha
|
||||
lda $1200,y
|
||||
pha
|
||||
lda $1300,y
|
||||
pha
|
||||
lda $1400,y
|
||||
pha
|
||||
lda $1600,y
|
||||
pha
|
||||
lda $1700,y
|
||||
pha
|
||||
lda $1800,y
|
||||
pha
|
||||
lda $1900,y
|
||||
pha
|
||||
lda $1b00,y
|
||||
pha
|
||||
lda $1c00,y
|
||||
pha
|
||||
lda $1d00,y
|
||||
pha
|
||||
- ldx $1800,y
|
||||
lda $1e00,y
|
||||
sta $1800,y
|
||||
pla
|
||||
sta $1100,y
|
||||
pla
|
||||
sta $1900,y
|
||||
pla
|
||||
sta $1200,y
|
||||
pla
|
||||
sta $1300,y
|
||||
pla
|
||||
sta $1b00,y
|
||||
pla
|
||||
sta $1400,y
|
||||
pla
|
||||
sta $1c00,y
|
||||
pla
|
||||
sta $1d00,y
|
||||
pla
|
||||
sta $1600,y
|
||||
pla
|
||||
lda $1200,y
|
||||
sta $1e00,y
|
||||
pla
|
||||
lda $1b00,y
|
||||
sta $1200,y
|
||||
txa
|
||||
sta $1b00,y
|
||||
ldx $1100,y
|
||||
lda $1d00,y
|
||||
sta $1100,y
|
||||
lda $1400,y
|
||||
sta $1d00,y
|
||||
lda $1700,y
|
||||
sta $1400,y
|
||||
txa
|
||||
sta $1700,y
|
||||
ldx $1900,y
|
||||
lda $1c00,y
|
||||
sta $1900,y
|
||||
lda $1600,y
|
||||
sta $1c00,y
|
||||
lda $1300,y
|
||||
sta $1600,y
|
||||
txa
|
||||
sta $1300,y
|
||||
iny
|
||||
bne -
|
||||
rts
|
||||
|
67
src/mli.a
67
src/mli.a
@ -54,9 +54,7 @@ WriteTrackMLI
|
||||
lda gUsingRAMDisk
|
||||
beq +
|
||||
jsr ReorderBuffer
|
||||
+ lda #$81 ; 'write block' command
|
||||
sta mlicmd
|
||||
lda DRIVE ; ProDOS "unit number" is
|
||||
+ lda DRIVE ; ProDOS "unit number" is
|
||||
sec
|
||||
sbc #$31
|
||||
lsr ; DSSS0000, where D is the
|
||||
@ -90,7 +88,7 @@ WriteTrackMLI
|
||||
.writeloop
|
||||
lda gUsingRAMDisk
|
||||
beq +
|
||||
lda mlicmd
|
||||
lda #$81 ; 'write block' command
|
||||
ldy #$03 ; parameter count
|
||||
jsr mli
|
||||
bcs .writeerr
|
||||
@ -119,46 +117,6 @@ WriteTrackMLI
|
||||
|
||||
.blockcount !byte $FF
|
||||
}
|
||||
;-------------------------------
|
||||
; ReorderBuffer - convert data
|
||||
; buffer between ProDOS and
|
||||
; DOS 3.3 ordering (use after
|
||||
; read or before write under
|
||||
; ProDOS)
|
||||
; in: none
|
||||
; out: all flags clobbered
|
||||
; all registers clobbered
|
||||
; @cmp1, @cmp2 clobbered
|
||||
;-------------------------------
|
||||
!zone {
|
||||
ReorderBuffer
|
||||
lda #$00
|
||||
sta cmp1
|
||||
sta cmp2
|
||||
tay
|
||||
lda #$01
|
||||
clc
|
||||
adc #BASEPAGE
|
||||
sta cmp1+1
|
||||
lda #$0E
|
||||
clc
|
||||
adc #BASEPAGE
|
||||
sta cmp2+1
|
||||
ldx #$07
|
||||
.L lda (cmp1),y
|
||||
pha
|
||||
lda (cmp2),y
|
||||
sta (cmp1),y
|
||||
pla
|
||||
sta (cmp2),y
|
||||
iny
|
||||
bne .L
|
||||
inc cmp1+1
|
||||
dec cmp2+1
|
||||
dex
|
||||
bne .L
|
||||
rts
|
||||
}
|
||||
|
||||
;-------------------------------
|
||||
; SaveFile1Shot
|
||||
@ -497,13 +455,13 @@ accessbits = $C3 ; full access
|
||||
CreateFile
|
||||
lda #accessbits
|
||||
sta mliparam+3 ; access bits (full access)
|
||||
lda #1
|
||||
sta mliparam+7 ; storage type (file)
|
||||
lda #0
|
||||
sta mliparam+8 ; creation date (current)
|
||||
sta mliparam+9
|
||||
sta mliparam+10 ; creation time (current)
|
||||
sta mliparam+11
|
||||
ldy #1
|
||||
sty mliparam+7 ; storage type (file)
|
||||
dey
|
||||
sty mliparam+8 ; creation date (current)
|
||||
sty mliparam+9
|
||||
sty mliparam+10 ; creation time (current)
|
||||
sty mliparam+11
|
||||
lda #CMD_CREATE ; MLI create command
|
||||
ldy #PC_CREATE ; number of parameters for 'create' command
|
||||
jsr mli
|
||||
@ -706,6 +664,8 @@ WriteRAMToDisk
|
||||
jsr IncProgress
|
||||
jsr WriteTrackMLI
|
||||
bcs .exit
|
||||
lda KEY
|
||||
bmi .cancel
|
||||
inc gTrack
|
||||
lda gTrack
|
||||
cmp #$23
|
||||
@ -715,8 +675,13 @@ WriteRAMToDisk
|
||||
lda #TRUE
|
||||
sta gUsingRAMDisk
|
||||
clc
|
||||
|
||||
.exit
|
||||
rts
|
||||
|
||||
.cancel
|
||||
jmp Cancel
|
||||
|
||||
}
|
||||
|
||||
;-------------------------------
|
||||
|
@ -61,13 +61,12 @@ modify
|
||||
bne .src
|
||||
lda #$8D
|
||||
jsr PrintA
|
||||
bvc +
|
||||
.mod
|
||||
lda (modsrc),y
|
||||
dey
|
||||
bmi .exit
|
||||
sta (moddest),y
|
||||
clv
|
||||
bvc .mod ; unconditional branch
|
||||
+ lda (modsrc),y
|
||||
dey
|
||||
bpl .mod
|
||||
.exit
|
||||
inc gPatchCount
|
||||
.exitnomod
|
||||
|
118
src/mods/t00only.a
Normal file
118
src/mods/t00only.a
Normal file
@ -0,0 +1,118 @@
|
||||
!cpu 6502
|
||||
*=$2000
|
||||
|
||||
!to "../../build/t00only.bin",plain
|
||||
|
||||
MODULE=1
|
||||
!source "../apidefs.a"
|
||||
!source "../strings/enid.a"
|
||||
WILDCARD = $97 ; from compare.a
|
||||
|
||||
;-------------------------------
|
||||
; AnalyzeT00
|
||||
; set additional flags based on contents of track $00
|
||||
;
|
||||
; in: Track $00 in data buffer
|
||||
; out: gIsBoot1, gIsMaster, gIsRWTS set to #TRUE or #FALSE
|
||||
; all flags clobbered
|
||||
; all registers clobbered
|
||||
;-------------------------------
|
||||
!zone {
|
||||
AnalyzeT00
|
||||
lda #$01
|
||||
ldx #$00
|
||||
ldy #$38
|
||||
jsr compare ; if T00,S01,$00 ==
|
||||
!byte $8E,$E9,$B7,$8E,$F7,$B7,$A9,$01
|
||||
!byte $8D,$F8,$B7,$8D,$EA,$B7,$AD,$E0
|
||||
!byte $B7,$8D,$E1,$B7,$A9,$02,$8D,$EC
|
||||
!byte $B7,$A9,$04,$8D,$ED,$B7,$AC,$E7
|
||||
!byte $B7,$88,$8C,$F1,$B7,$A9,$01,$8D
|
||||
!byte $F4,$B7,$8A,$4A,$4A,$4A,$4A,$AA
|
||||
!byte $A9,$00,$9D,$F8,$04,$9D,$78,$04
|
||||
ldx #TRUE
|
||||
bcc .boot1
|
||||
ldx #FALSE
|
||||
.boot1
|
||||
stx gIsBoot1
|
||||
|
||||
lda #$01
|
||||
ldx #$00
|
||||
ldy #$38
|
||||
jsr compare ; if T00,S01,$00 ==
|
||||
!byte $8E,$E9,$37,$8E,$F7,$37,$A9,$01
|
||||
!byte $8D,$F8,$37,$8D,$EA,$37,$AD,$E0
|
||||
!byte $37,$8D,$E1,$37,$A9,$02,$8D,$EC
|
||||
!byte $37,$A9,$04,$8D,$ED,$37,$AC,$E7
|
||||
!byte $37,$88,$8C,$F1,$37,$A9,$01,$8D
|
||||
!byte $F4,$37,$8A,$4A,$4A,$4A,$4A,$AA
|
||||
!byte $A9,$00,$9D,$F8,$04,$9D,$78,$04
|
||||
ldx #TRUE
|
||||
bcc .master
|
||||
ldx #FALSE
|
||||
.master
|
||||
stx gIsMaster
|
||||
|
||||
lda #$07
|
||||
ldx #$00
|
||||
ldy #$40
|
||||
jsr compare ; if T00,S07,$00 ==
|
||||
!byte $84,$48,$85,$49,$A0,$02,$8C,$F8
|
||||
!byte $06,$A0,$04,$8C,$F8,$04,$A0,$01
|
||||
!byte $B1,$48,$AA,$A0,$0F,$D1,$48,$F0
|
||||
!byte $1B,$8A,$48,$B1,$48,$AA,$68,$48
|
||||
!byte $91,$48,$BD,$8E,$C0,$A0,$08,$BD
|
||||
!byte $8C,$C0,$DD,$8C,$C0,$D0,$F6,$88
|
||||
!byte $D0,$F8,$68,$AA,$BD,$8E,$C0,$BD
|
||||
!byte $8C,$C0,$A0,$08,$BD,$8C,$C0,$48
|
||||
ldx #TRUE
|
||||
bcc .rwts
|
||||
ldx #FALSE
|
||||
.rwts
|
||||
stx gIsRWTS
|
||||
}
|
||||
|
||||
!source "../patchers/sunburst.a"
|
||||
!source "../patchers/jmpbcf0.a"
|
||||
!source "../patchers/jmpbeb1.a"
|
||||
!source "../patchers/jmpbeca.a"
|
||||
!source "../patchers/jmpb660.a"
|
||||
!source "../patchers/jmpb720.a"
|
||||
!source "../patchers/bademu.a"
|
||||
!source "../patchers/bademu2.a"
|
||||
!source "../patchers/rwts.a"
|
||||
!source "../patchers/rwtslog.a"
|
||||
!source "../patchers/mecc1.a"
|
||||
!source "../patchers/mecc2.a"
|
||||
!source "../patchers/mecc3.a"
|
||||
!source "../patchers/mecc4.a"
|
||||
!source "../patchers/rol1e.a"
|
||||
!source "../patchers/jmpb4bb.a"
|
||||
!source "../patchers/jmpb4bbhi.a"
|
||||
!source "../patchers/thunder.a"
|
||||
!source "../patchers/jsrbb03.a"
|
||||
!source "../patchers/davidbb03.a"
|
||||
!source "../patchers/rwtsswap.a"
|
||||
!source "../patchers/rwtsswap2.a"
|
||||
!source "../patchers/border.a"
|
||||
!source "../patchers/jmpae8e.a"
|
||||
!source "../patchers/jmpbbfe.a"
|
||||
!source "../patchers/datasoft.a"
|
||||
!source "../patchers/nibtable.a"
|
||||
!source "../patchers/diskvol.a"
|
||||
!source "../patchers/c9ff.a"
|
||||
!source "../patchers/milliken.a"
|
||||
!source "../patchers/methods.a"
|
||||
!source "../patchers/jsr8b3.a"
|
||||
!source "../patchers/laureate.a"
|
||||
!source "../patchers/pascalrwts.a"
|
||||
!source "../patchers/micrograms.a"
|
||||
!source "../patchers/dos32.a"
|
||||
!source "../patchers/dos32dlm.a"
|
||||
|
||||
;add only above this line
|
||||
rts
|
||||
|
||||
!if * > $4000 {
|
||||
!serious "code is too large to fit in available space!"
|
||||
}
|
@ -1,3 +1,8 @@
|
||||
!cpu 6502
|
||||
*=$B800
|
||||
|
||||
!to "../../build/universalrwts.bin",plain
|
||||
|
||||
;-------------------------------
|
||||
; Universal RWTS
|
||||
; a modified DOS 3.3-style RWTS that reads 16-sector (6-and-2 encoded) disks
|
||||
@ -17,13 +22,6 @@
|
||||
; will crash.
|
||||
;-------------------------------
|
||||
|
||||
UNIV_A1 = $B956 ; must LSR before setting
|
||||
UNIV_A2 = $B95F
|
||||
UNIV_A3 = $B968
|
||||
UNIV_D1 = $B8E7
|
||||
UNIV_D2 = $B8F1
|
||||
UNIV_D3 = $B8FC
|
||||
|
||||
universalrwts
|
||||
!byte $A2,$00,$A0,$02,$88,$B1,$3E,$4A,$3E,$00,$BC,$4A,$3E,$00,$BC,$99
|
||||
!byte $00,$BB,$E8,$E0,$56,$90,$ED,$A2,$00,$98,$D0,$E8,$A2,$55,$BD,$00
|
||||
@ -57,7 +55,6 @@ universalrwts
|
||||
!byte $38,$20,$EE,$B9,$B9,$11,$BA,$20,$00,$BA,$A5,$27,$18,$20,$F1,$B9
|
||||
!byte $B9,$1D,$BA,$20,$00,$BA,$E6,$26,$D0,$C3,$20,$00,$BA,$18,$AD,$78
|
||||
!byte $04,$29,$03,$2A,$05,$2B,$AA,$BD,$80,$C0,$A6,$2B,$60,$AA,$A0,$A0
|
||||
nibtable
|
||||
!byte $A2,$11,$CA,$D0,$FD,$E6,$46,$D0,$02,$E6,$47,$38,$E9,$01,$D0,$F0
|
||||
!byte $60,$01,$30,$28,$24,$20,$1E,$1D,$1C,$1C,$1C,$1C,$1C,$70,$2C,$26
|
||||
!byte $22,$1F,$1E,$1D,$1C,$1C,$1C,$1C,$1C,$96,$97,$9A,$9B,$9D,$9E,$9F
|
||||
@ -69,15 +66,15 @@ nibtable
|
||||
; these $FF bytes (at $BA80..$BA95) are used by the
|
||||
; routine that checks whether a track is formatted
|
||||
!byte $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
|
||||
!byte $FF,$FF,$FF,$FF,$FF,$FF,$00,$01,$98,$99,$02,$03,$9C,$04,$05,$06
|
||||
!byte $A0,$A1,$A2,$A3,$A4,$A5,$07,$08,$A8,$A9,$AA,$09,$0A,$0B,$0C,$0D
|
||||
!byte $B0,$B1,$0E,$0F,$10,$11,$12,$13,$B8,$14,$15,$16,$17,$18,$19,$1A
|
||||
!byte $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$1B,$CC,$1C,$1D,$1E
|
||||
!byte $D0,$D1,$D2,$1F,$D4,$D5,$20,$21,$D8,$22,$23,$24,$25,$26,$27,$28
|
||||
!byte $E0,$E1,$E2,$E3,$E4,$29,$2A,$2B,$E8,$2C,$2D,$2E,$2F,$30,$31,$32
|
||||
!byte $F0,$F1,$33,$34,$35,$36,$37,$38,$F8,$39,$3A,$3B,$3C,$3D,$3E
|
||||
nibtableff
|
||||
!byte $3F
|
||||
; the nibble table that lives at $BA96 is copied into here from another location
|
||||
; after being potentially modified because of protection
|
||||
!byte $FF,$FF,$FF,$FF,$FF,$FF,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
||||
!byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
|
@ -1,11 +0,0 @@
|
||||
nibtable=*-$80
|
||||
!byte $80,$81,$82,$83,$84,$85,$86,$87,$88,$89,$8A,$8B,$8C,$8D,$8E,$8F
|
||||
!byte $90,$91,$92,$93,$94,$95,$00,$01,$98,$99,$02,$03,$9C,$04,$05,$06
|
||||
!byte $A0,$A1,$A2,$A3,$A4,$A5,$07,$08,$A8,$A9,$AA,$09,$0A,$0B,$0C,$0D
|
||||
!byte $B0,$B1,$0E,$0F,$10,$11,$12,$13,$B8,$14,$15,$16,$17,$18,$19,$1A
|
||||
!byte $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7,$C8,$C9,$CA,$1B,$CC,$1C,$1D,$1E
|
||||
!byte $D0,$D1,$D2,$1F,$D4,$D5,$20,$21,$D8,$22,$23,$24,$25,$26,$27,$28
|
||||
!byte $E0,$E1,$E2,$E3,$E4,$29,$2A,$2B,$E8,$2C,$2D,$2E,$2F,$30,$31,$32
|
||||
!byte $F0,$F1,$33,$34,$35,$36,$37,$38,$F8,$39,$3A,$3B,$3C,$3D,$3E
|
||||
nibtableff
|
||||
!byte $3F
|
251
src/passport.a
251
src/passport.a
@ -29,6 +29,10 @@
|
||||
;
|
||||
;-------------------------------
|
||||
|
||||
!ifndef VERBOSE {
|
||||
VERBOSE = $00 ; set to $01 to display API label addresses
|
||||
}
|
||||
|
||||
; Supported languages
|
||||
; (each has its own localized strings file
|
||||
; and its own output filename)
|
||||
@ -72,55 +76,25 @@ COUT = $FDED
|
||||
PR0 = $FE89
|
||||
IN0 = $FE93
|
||||
|
||||
; Zero-page addresses we use for variables
|
||||
!ifdef PASS2 {
|
||||
} else {
|
||||
;unpacker variables, no need to change these
|
||||
src = $3c ; word
|
||||
dst = $3e ; word
|
||||
ecx = $40 ; word
|
||||
last = $42 ; word
|
||||
tmpu = $44 ; word
|
||||
;Universal RWTS-specific values
|
||||
UNIV_A1 = $B956 ; must LSR before setting
|
||||
UNIV_A2 = $B95F
|
||||
UNIV_A3 = $B968
|
||||
UNIV_D1 = $B8E7
|
||||
UNIV_D2 = $B8F1
|
||||
UNIV_D3 = $B8FC
|
||||
|
||||
nibsrcindex = $EC ; byte
|
||||
nibdestindex = $ED ; byte
|
||||
prbuf = $EE ; word
|
||||
unform = $F0 ; word
|
||||
nibcount = $F2 ; byte
|
||||
modtmp = $F3 ; byte
|
||||
modsrc = $F4 ; word
|
||||
moddest = $F6 ; word
|
||||
cmp1 = $F8 ; word
|
||||
cmp2 = $FA ; word
|
||||
counter = $FC ; byte
|
||||
tmp = $FC ; byte
|
||||
iunit = $FC ; byte
|
||||
tmpa = $FC ; byte
|
||||
tmpx = $FD ; byte
|
||||
tmpy = $FE ; byte
|
||||
flag = $FF ; byte
|
||||
}
|
||||
|
||||
; Application constants (not zero addresses)
|
||||
RELBASE = $5600 ; address to move Passport code
|
||||
; so that it's out of the way
|
||||
LOWPOINT = $4300 ; lowest available address for code
|
||||
BASEPAGE = $10 ; Special Delivery tracer assumes
|
||||
; this is $10, so don't change it!
|
||||
TRUE = $00 ; Lots of code assumes this is $00
|
||||
; so it can branch with BEQ, so
|
||||
; don't change it either!
|
||||
FALSE = $01
|
||||
!source "apidefs.a"
|
||||
|
||||
ldx #$00
|
||||
FM lda FirstMover + ((255 + LastMover - FirstMover) & $FF00),x
|
||||
FM lda LastMover - 256,x
|
||||
sta $B500,x
|
||||
inx
|
||||
bne FM
|
||||
dec FM+2
|
||||
dec FM+5
|
||||
lda FM+2
|
||||
cmp #$1F
|
||||
lda FM+5
|
||||
cmp #(>RELBASE)-((>(RELBASE+255))->RELBASE)-1
|
||||
bne FM
|
||||
jmp OneTimeSetup
|
||||
|
||||
@ -266,7 +240,6 @@ MainMenu
|
||||
|
||||
Action
|
||||
sta gMode
|
||||
bit gMode
|
||||
bpl +
|
||||
jsr CreateRAMFile
|
||||
+ jsr ResetProgress
|
||||
@ -280,7 +253,7 @@ Action
|
||||
sta gTrack
|
||||
sta gSector
|
||||
sta gPatchCount
|
||||
sta callrwts+1
|
||||
sta jCallRWTS+1
|
||||
lda #$08
|
||||
sta gAddress+1
|
||||
jsr ClearScreen
|
||||
@ -518,22 +491,20 @@ CopyUniversal
|
||||
pha
|
||||
lda #$B8
|
||||
CopyUniversalAnywhere
|
||||
sta dst+1
|
||||
sta universalrwts
|
||||
clc
|
||||
adc #$02
|
||||
sta .cu+2
|
||||
lda #$00
|
||||
sta dst
|
||||
lda #>universalrwts
|
||||
sta src+1
|
||||
sta _byte_hi
|
||||
lda #<universalrwts
|
||||
sta src
|
||||
jsr Unpack
|
||||
sta callrwts+1
|
||||
sta _byte_lo
|
||||
jsr decrunch
|
||||
sta jCallRWTS+1
|
||||
lda #$BD
|
||||
sta callrwts+2
|
||||
sta jCallRWTS+2
|
||||
ldy #$96
|
||||
.culoop lda nibtable,y
|
||||
.culoop lda gNIBTable,y
|
||||
.cu sta $d100,y ; set at runtime
|
||||
iny
|
||||
bne .culoop
|
||||
@ -698,47 +669,14 @@ ChangeSector
|
||||
;-------------------------------
|
||||
AnalyzeTrack
|
||||
lda gTrack
|
||||
beq _applyToT00
|
||||
jmp _applyToAll
|
||||
bne _applyToAll
|
||||
_applyToT00
|
||||
jsr AnalyzeT00 ; /src/id/inspect0
|
||||
!source "patchers/sunburst.a"
|
||||
!source "patchers/jmpbcf0.a"
|
||||
!source "patchers/jmpbeb1.a"
|
||||
!source "patchers/jmpbeca.a"
|
||||
!source "patchers/jmpb660.a"
|
||||
!source "patchers/jmpb720.a"
|
||||
!source "patchers/bademu.a"
|
||||
!source "patchers/bademu2.a"
|
||||
!source "patchers/rwts.a"
|
||||
!source "patchers/rwtslog.a"
|
||||
!source "patchers/mecc1.a"
|
||||
!source "patchers/mecc2.a"
|
||||
!source "patchers/mecc3.a"
|
||||
!source "patchers/mecc4.a"
|
||||
!source "patchers/rol1e.a"
|
||||
!source "patchers/jmpb4bb.a"
|
||||
!source "patchers/jmpb4bbhi.a"
|
||||
!source "patchers/thunder.a"
|
||||
!source "patchers/jsrbb03.a"
|
||||
!source "patchers/davidbb03.a"
|
||||
!source "patchers/rwtsswap.a"
|
||||
!source "patchers/rwtsswap2.a"
|
||||
!source "patchers/border.a"
|
||||
!source "patchers/jmpae8e.a"
|
||||
!source "patchers/jmpbbfe.a"
|
||||
!source "patchers/datasoft.a"
|
||||
!source "patchers/nibtable.a"
|
||||
!source "patchers/diskvol.a"
|
||||
!source "patchers/c9ff.a"
|
||||
!source "patchers/milliken.a"
|
||||
!source "patchers/methods.a"
|
||||
!source "patchers/jsr8b3.a"
|
||||
!source "patchers/laureate.a"
|
||||
!source "patchers/pascalrwts.a"
|
||||
!source "patchers/micrograms.a"
|
||||
!source "patchers/dos32.a"
|
||||
!source "patchers/dos32dlm.a"
|
||||
lda #>AnalyzeT00
|
||||
sta _byte_hi
|
||||
lda #<AnalyzeT00
|
||||
sta _byte_lo
|
||||
jsr decrunch
|
||||
jsr $2000
|
||||
_applyToAll
|
||||
!source "patchers/universale7.a"
|
||||
!source "patchers/a6bc95.a" ; gIsPascal only
|
||||
@ -773,122 +711,23 @@ _applyToAll
|
||||
sec ; set carry if nothing happened
|
||||
rts
|
||||
|
||||
;
|
||||
; Global variables
|
||||
;
|
||||
gTriedUniv
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; whether or not we've already tried the built-in RWTS
|
||||
; (and therefore a read error is fatal)
|
||||
; reset before each operation
|
||||
gMode
|
||||
!byte %00000000 ; bit 7 0=verify, 1=see bit 6
|
||||
; bit 6 0=demuffin, 1=crack
|
||||
; set based on main menu choice
|
||||
gPatchCount
|
||||
!byte 00 ; int
|
||||
; number of patches we've applied to this disk
|
||||
; reset before each operation
|
||||
; incremented in modify()
|
||||
gSaidWriting
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set to #TRUE after we print WRITING TO S%s,D%d
|
||||
gChangedPrefs
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; whether we should try to write the configuration file
|
||||
; when the program exits
|
||||
; set to #TRUE when changing slots
|
||||
gLastTrack
|
||||
!byte 00 ; int
|
||||
; the last track that we should try to read
|
||||
; (assuming reading from T22 down to T00)
|
||||
; reset to 0 before each operation, but some
|
||||
; disks (like DOS3.3P) will change it because
|
||||
; they write out the first few DOS tracks
|
||||
; manually before seeking up to T22 to convert
|
||||
; the rest of the disk
|
||||
gIsDOS32
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gIsBoot0
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gIsBoot1
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in AnalyzeT00() after reading T00
|
||||
gIsMaster
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in AnalyzeT00() after reading T00
|
||||
gIsRWTS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in AnalyzeT00() after reading T00
|
||||
gIsProDOS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gIsPascal
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gIsProtDOS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gIsDavidDOS
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gIsEA
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gPossibleGamco
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in SkipTrack() after reading T22
|
||||
gIsOptimum
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gIsMECCFastloader
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gPossibleD5D5F7
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in IDBootloader() after reading T00,S00
|
||||
gAdventureInternational
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; reset before each operation
|
||||
; set in TraceDOS33c() after tracing DOS 3.3-shaped RWTS
|
||||
gOnAClearDayYouCanReadForever
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
; retry reads with a captured RWTS forever,
|
||||
; instead of falling back to built-in RWTS
|
||||
; compile-time flag, no way to change at runtime
|
||||
gUsingRAMDisk
|
||||
!byte FALSE ; 0=true, 1=false
|
||||
|
||||
gRAMDiskRef
|
||||
!byte 00 ; handle of RAM disk
|
||||
; non-zero if open
|
||||
|
||||
!source "universalrwts.a"
|
||||
universalrwts
|
||||
!bin "../build/universalrwts.pak"
|
||||
!source "unpack.a"
|
||||
!source "nibtable.a"
|
||||
AnalyzeT00 ; placeholder to identify stack of packed data
|
||||
!bin "../build/t00only.pak"
|
||||
!source "apicode.a"
|
||||
}
|
||||
LastMover
|
||||
|
||||
!if ($B500 - ((255 + LastMover - FirstMover) & $FF00)) != RELBASE {
|
||||
!serious "RELBASE requires adjustment to ", ($B500 - ((255 + LastMover - FirstMover) & $FF00))
|
||||
}
|
||||
!if ($B500 - ((255 + LastMover - FirstMover) & $FF00)) < LOWPOINT {
|
||||
!serious "code is too large to fit in available space!"
|
||||
!if RELBASE = $2000 {
|
||||
!ifdef PASS2 {
|
||||
} else { ;PASS2
|
||||
!set PASS2=1
|
||||
!warn "RELBASE = ", $B600 - (LastMover - FirstMover)
|
||||
}
|
||||
} else {
|
||||
!if ($B600 - (LastMover - FirstMover)) < LOWPOINT {
|
||||
!serious "code is too large to fit in available space!"
|
||||
}
|
||||
}
|
||||
|
@ -4,8 +4,8 @@
|
||||
; e.g. Video Title Shop, Tomahawk //e
|
||||
;-------------------------------
|
||||
!zone {
|
||||
jsr IDDatasoft
|
||||
bcs .exit
|
||||
lda gIsDatasoft
|
||||
bne .exit
|
||||
|
||||
ldy #$06
|
||||
jsr SearchTrack
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
; sector 1
|
||||
|
||||
lda callrwts+2
|
||||
lda jCallRWTS+2
|
||||
sta .cr+1
|
||||
sec
|
||||
sbc #$06 ; #$B7 or #$37
|
||||
@ -55,13 +55,11 @@
|
||||
.cr lda #$d1 ; set at runtime
|
||||
cmp #$3D
|
||||
beq +
|
||||
lda #<SD_DOS32
|
||||
ldx #>SD_DOS32
|
||||
ldx #ID_DOS32
|
||||
jsr ConstructStandardDelivery
|
||||
jmp ++
|
||||
|
||||
+ lda #<SD_DOS32LO
|
||||
ldx #>SD_DOS32LO
|
||||
+ ldx #ID_DOS32LO
|
||||
jsr ConstructStandardDelivery
|
||||
|
||||
++ lda #s_bootwrite
|
||||
|
@ -9,9 +9,9 @@
|
||||
; e.g. English Achievement I
|
||||
;-------------------------------
|
||||
!zone {
|
||||
jsr ID8b3
|
||||
bcs .exit
|
||||
bcc +
|
||||
lda gIs8b3
|
||||
bne .exit
|
||||
beq +
|
||||
|
||||
.sectors
|
||||
!byte $00,$00,$02,$02,$02,$02,$02,$02,$02,$02
|
||||
|
@ -4,9 +4,9 @@
|
||||
; but generally DOS-shaped
|
||||
;-------------------------------
|
||||
!zone {
|
||||
jsr IDLaureate
|
||||
bcs .exit
|
||||
bcc +
|
||||
lda gIsLaureate
|
||||
bne .exit
|
||||
beq +
|
||||
|
||||
.sectors
|
||||
!byte $04,$04,$04,$04,$04,$04,$04,$04,$04,$05,$05,$05,$05,$05,$05,$05,$06,$06,$06
|
||||
|
@ -5,10 +5,9 @@
|
||||
; e.g. Word Munchers
|
||||
;-------------------------------
|
||||
!zone {
|
||||
jsr IDMECC
|
||||
bcs .exit
|
||||
jsr IDMECC1
|
||||
bcs .exit
|
||||
lda gIsMECCFastloader
|
||||
ora gIsMECC1
|
||||
bne .exit
|
||||
lda #$0B
|
||||
ldx #$08
|
||||
ldy #$01
|
||||
|
@ -5,10 +5,9 @@
|
||||
; e.g. Phonics Prime Time series
|
||||
;-------------------------------
|
||||
!zone {
|
||||
jsr IDMECC
|
||||
bcs .exit
|
||||
jsr IDMECC2
|
||||
bcs .exit
|
||||
lda gIsMECCFastloader
|
||||
ora gIsMECC2
|
||||
bne .exit
|
||||
lda #$07
|
||||
ldx #$83
|
||||
ldy #$01
|
||||
|
@ -5,10 +5,9 @@
|
||||
; e.g. Word Munchers v1.1
|
||||
;-------------------------------
|
||||
!zone {
|
||||
jsr IDMECC
|
||||
bcs .exit
|
||||
jsr IDMECC3
|
||||
bcs .exit
|
||||
lda gIsMECCFastloader
|
||||
ora gIsMECC3
|
||||
bne .exit
|
||||
lda #$0A
|
||||
ldx #$E8
|
||||
ldy #$01
|
||||
|
@ -5,10 +5,9 @@
|
||||
; e.g. A-201 Conquering Whole Numbers
|
||||
;-------------------------------
|
||||
!zone {
|
||||
jsr IDMECC
|
||||
bcs .exit
|
||||
jsr IDMECC4
|
||||
bcs .exit
|
||||
lda gIsMECCFastloader
|
||||
ora gIsMECC4
|
||||
bne .exit
|
||||
lda #$08
|
||||
ldx #$83
|
||||
ldy #$01
|
||||
|
@ -7,8 +7,8 @@
|
||||
; The Writing Workshop, Math Sequences
|
||||
;-------------------------------
|
||||
!zone {
|
||||
jsr IDMilliken1
|
||||
bcs .exit
|
||||
lda gIsMilliken1
|
||||
bne .exit
|
||||
lda #$01
|
||||
ldx #$48
|
||||
ldy #$02
|
||||
|
@ -8,22 +8,6 @@
|
||||
_nibtable
|
||||
jmp .checkread
|
||||
|
||||
.readdata
|
||||
!byte $00,$01
|
||||
!byte $98,$99,$02,$03,$9C,$04,$05,$06
|
||||
!byte $A0,$A1,$A2,$A3,$A4,$A5,$07,$08
|
||||
!byte $A8,$A9,$AA,$09,$0A,$0B,$0C,$0D
|
||||
!byte $B0,$B1,$0E,$0F,$10,$11,$12,$13
|
||||
!byte $B8,$14,$15,$16,$17,$18,$19,$1A
|
||||
!byte $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7
|
||||
!byte $C8,$C9,$CA,$1B,$CC,$1C,$1D,$1E
|
||||
!byte $D0,$D1,$D2,$1F,$D4,$D5,$20,$21
|
||||
!byte $D8,$22,$23,$24,$25,$26,$27,$28
|
||||
!byte $E0,$E1,$E2,$E3,$E4,$29,$2A,$2B
|
||||
!byte $E8,$2C,$2D,$2E,$2F,$30,$31,$32
|
||||
!byte $F0,$F1,$33,$34,$35,$36,$37,$38
|
||||
!byte $F8,$39,$3A,$3B,$3C,$3D,$3E,$3F
|
||||
|
||||
.writedata
|
||||
!byte $96,$97,$9A,$9B,$9D,$9E,$9F,$A6
|
||||
!byte $A7,$AB,$AC,$AD,$AE,$AF,$B2,$B3
|
||||
@ -80,59 +64,103 @@ _nibtable
|
||||
jmp .exit2
|
||||
|
||||
.fixread
|
||||
lda #$00
|
||||
sta nibsrcindex
|
||||
lda #$6A
|
||||
sta .loopcheck+1
|
||||
lda #$96
|
||||
sta nibdestindex
|
||||
.read
|
||||
ldx nibsrcindex
|
||||
lda .readdata,x
|
||||
sta .nibcmpr
|
||||
sta .nibmodr
|
||||
lda #$04
|
||||
ldx nibdestindex
|
||||
ldy #$01
|
||||
jsr compare
|
||||
.nibcmpr !byte $FF
|
||||
bcc .nomodr
|
||||
lda #$04
|
||||
ldx nibdestindex
|
||||
ldy #$01
|
||||
jsr modify
|
||||
.nibmodr !byte $FF
|
||||
.nomodr
|
||||
inc nibsrcindex
|
||||
inc nibdestindex
|
||||
bne .read
|
||||
rts
|
||||
ldx #<(gNIBTableBase+$16)
|
||||
ldy #>(gNIBTableBase+$16)
|
||||
bne .common
|
||||
|
||||
.fixwrite
|
||||
lda #$40
|
||||
sta .loopcheck+1
|
||||
lda #$29
|
||||
ldx #<.writedata
|
||||
ldy #>.writedata
|
||||
|
||||
.common
|
||||
sta nibdestindex
|
||||
stx .nibload1+1
|
||||
sty .nibload1+2
|
||||
stx .nibload2+1
|
||||
sty .nibload2+2
|
||||
lda #$00
|
||||
sta nibsrcindex
|
||||
lda #$29
|
||||
.modloop
|
||||
ldy nibsrcindex
|
||||
ldx nibdestindex
|
||||
|
||||
;loop while match succeeds
|
||||
|
||||
.nibload1
|
||||
lda $D1D1,y
|
||||
cmp (BASEPAGE*256)+$400,x
|
||||
beq .nibcheck
|
||||
|
||||
;count mismatches until match or end
|
||||
|
||||
inx
|
||||
iny
|
||||
cpy .loopcheck+1
|
||||
bne .nibload1
|
||||
|
||||
;if we saw mismatches...
|
||||
|
||||
.nibcheck
|
||||
cpy nibsrcindex
|
||||
beq .advance
|
||||
|
||||
;remember where
|
||||
|
||||
txa
|
||||
pha
|
||||
tya
|
||||
pha
|
||||
|
||||
;determine how many
|
||||
|
||||
sec
|
||||
sbc nibsrcindex
|
||||
pha
|
||||
tax
|
||||
|
||||
;construct dynamic data to apply mods
|
||||
|
||||
lda #$20
|
||||
sta $300
|
||||
lda #<modify
|
||||
sta $301
|
||||
lda #>modify
|
||||
sta $302
|
||||
lda #$60
|
||||
sta $303,x
|
||||
.nibdec
|
||||
dex
|
||||
dey
|
||||
.nibload2
|
||||
lda $D1D1,y
|
||||
sta $303,x
|
||||
txa
|
||||
bne .nibdec
|
||||
pla
|
||||
tay
|
||||
lda #$04
|
||||
ldx nibdestindex
|
||||
jsr $300
|
||||
|
||||
;restore position, then resume
|
||||
|
||||
pla
|
||||
sta nibsrcindex
|
||||
pla
|
||||
sta nibdestindex
|
||||
.write
|
||||
ldx nibsrcindex
|
||||
lda .writedata,x
|
||||
sta .nibcmpw
|
||||
sta .nibmodw
|
||||
lda #$04
|
||||
ldx nibdestindex
|
||||
ldy #$01
|
||||
jsr compare
|
||||
.nibcmpw !byte $FF
|
||||
bcc .nomodw
|
||||
lda #$04
|
||||
ldx nibdestindex
|
||||
ldy #$01
|
||||
jsr modify
|
||||
.nibmodw !byte $FF
|
||||
.nomodw
|
||||
.advance
|
||||
inc nibsrcindex
|
||||
inc nibdestindex
|
||||
lda nibsrcindex
|
||||
cmp #$40
|
||||
bne .write
|
||||
.loopcheck
|
||||
cmp #$D1
|
||||
bcc .modloop
|
||||
rts
|
||||
.exit2
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
kForceLower !byte $FF ; AND mask for lowercase letters
|
||||
; (set at program startup)
|
||||
gDisplayBytes !fill 10 ; array of ten bytes for use as
|
||||
; substitution strings
|
||||
|
||||
;-------------------------------
|
||||
; PrintByID
|
||||
|
@ -2,8 +2,8 @@
|
||||
; ReadSector
|
||||
; high-level function to read a single sector.
|
||||
; in: gIsProtDOS is TRUE or FALSE
|
||||
; if gProtDOS is FALSE, callrwts+2 has been set to
|
||||
; the RWTS entry point (e.g. $BD or $3D)
|
||||
; if gProtDOS is FALSE, jCallRWTS has been set to
|
||||
; the RWTS entry point (e.g. $BDxx or $3Dxx)
|
||||
; out: all registers clobbered
|
||||
; C clear if read was successful
|
||||
; C set if read failed
|
||||
@ -33,7 +33,7 @@ ReadSector
|
||||
setuprwts
|
||||
ldy #<gRWTSParams
|
||||
lda #>gRWTSParams
|
||||
callrwts jsr $FF00 ; modified at runtime
|
||||
jsr jCallRWTS
|
||||
bcc endread
|
||||
lda gOnAClearDayYouCanReadForever
|
||||
beq setuprwts
|
||||
@ -88,7 +88,7 @@ PreReadSector
|
||||
!zone {
|
||||
cmp #kSectorCustomDOS32B4BB
|
||||
bne +
|
||||
ldx callrwts+2
|
||||
ldx jCallRWTS+2
|
||||
dex
|
||||
dex
|
||||
dex
|
||||
|
@ -13,7 +13,26 @@
|
||||
;-------------------------------
|
||||
!zone {
|
||||
ConstructStandardDelivery
|
||||
sta .A+1
|
||||
dex
|
||||
beq .construct32
|
||||
dex
|
||||
beq .construct32lo
|
||||
|
||||
.construct33p
|
||||
lda #<SD_DOS33p
|
||||
ldx #>SD_DOS33p
|
||||
bne +
|
||||
|
||||
.construct32
|
||||
lda #<SD_DOS32
|
||||
ldx #>SD_DOS32
|
||||
bne +
|
||||
|
||||
.construct32lo
|
||||
lda #<SD_DOS32LO
|
||||
ldx #>SD_DOS32LO
|
||||
|
||||
+ sta .A+1
|
||||
stx .A+2
|
||||
ldx #$00
|
||||
txa
|
||||
|
102
src/strings/en.a
102
src/strings/en.a
@ -11,107 +11,7 @@ k_slot = "S"
|
||||
k_quit = "Q"
|
||||
; <Esc> will also quit
|
||||
|
||||
;
|
||||
; String IDs
|
||||
; (pass in accumulator to PrintByID)
|
||||
;
|
||||
s_header = $00
|
||||
s_mainmenu = $01
|
||||
s_progbar = $02
|
||||
s_reading = $03
|
||||
s_diskrwts = $04
|
||||
s_bb00 = $05
|
||||
s_sunburst = $06
|
||||
s_optimum = $07
|
||||
s_builtin = $08
|
||||
s_switch = $09
|
||||
s_writing = $0A
|
||||
s_unformat = $0B
|
||||
s_f7 = $0C
|
||||
s_sync = $0D
|
||||
s_optbad = $0E
|
||||
s_pass = $0F
|
||||
s_passdemuf = $10
|
||||
s_passcrack = $11
|
||||
s_passcrack0 = $12
|
||||
s_fail = $13
|
||||
s_fatal0000 = $14
|
||||
s_fatal220f = $15
|
||||
s_done = $16
|
||||
s_noslot6 = $17
|
||||
s_writeerr = $18
|
||||
s_writeioerr = $19
|
||||
s_writenodev = $1A
|
||||
s_writeprot = $1B
|
||||
s_othermli = $1C
|
||||
s_canttrace = $1D
|
||||
s_canceled = $1E
|
||||
s_bademu = $1F
|
||||
s_reset = $20
|
||||
s_modify = $21
|
||||
s_modifyto = $22
|
||||
s_dosb0 = $23
|
||||
s_prodosb0 = $24
|
||||
s_pascalb0 = $25
|
||||
s_mecc = $26
|
||||
s_sierra = $27
|
||||
s_a6bc95 = $28
|
||||
s_jmpbcf0 = $29
|
||||
s_rol1e = $2A
|
||||
s_runhello = $2B
|
||||
s_e7 = $2C
|
||||
s_jmpb4bb = $2D
|
||||
s_jmpb400 = $2E
|
||||
s_jmpbeca = $2F
|
||||
s_jsrbb03 = $30
|
||||
s_thunder = $31
|
||||
s_jmpae8e = $32
|
||||
s_diskvol = $33
|
||||
s_d5d5f7 = $34
|
||||
s_construct= $35
|
||||
s_datasoftb0 = $36
|
||||
s_datasoft = $37
|
||||
s_lsr6a = $38
|
||||
s_bcs08 = $39
|
||||
s_jmpb660 = $3A
|
||||
s_protdos = $3B
|
||||
s_protdosw = $3C
|
||||
s_protserial = $3D
|
||||
s_fbff = $3E
|
||||
s_encoded44 = $3F
|
||||
s_encoded53 = $40
|
||||
s_specdel = $41
|
||||
s_bytrack = $42
|
||||
s_a5count = $43
|
||||
s_restart = $44
|
||||
s_corrupter= $45
|
||||
s_eab0 = $46
|
||||
s_eatrk6 = $47
|
||||
s_eeef = $48
|
||||
s_poke = $49
|
||||
s_bootcounter = $4A
|
||||
s_milliken = $4B
|
||||
s_jsr8b3 = $4C
|
||||
s_daviddos = $4D
|
||||
s_quickdos = $4E
|
||||
s_diversidos = $4F
|
||||
s_prontodos = $50
|
||||
s_jmpb412 = $51
|
||||
s_laureate = $52
|
||||
s_bbf9 = $53
|
||||
s_micrograms = $54
|
||||
s_cmpbne0 = $55
|
||||
s_writeram = $56
|
||||
s_d5timing = $57
|
||||
s_advint = $58
|
||||
s_dos32b0 = $59
|
||||
s_bootwrite = $5A
|
||||
s_rwtswrite = $5B
|
||||
s_rdos = $5C
|
||||
s_sra = $5D
|
||||
s_muse = $5E
|
||||
STRINGCOUNT = $5F
|
||||
|
||||
!source "strings/enid.a"
|
||||
!zone {
|
||||
StringTable
|
||||
!word .header
|
||||
|
100
src/strings/enid.a
Normal file
100
src/strings/enid.a
Normal file
@ -0,0 +1,100 @@
|
||||
;
|
||||
; String IDs
|
||||
; (pass in accumulator to PrintByID)
|
||||
;
|
||||
s_header = $00
|
||||
s_mainmenu = $01
|
||||
s_progbar = $02
|
||||
s_reading = $03
|
||||
s_diskrwts = $04
|
||||
s_bb00 = $05
|
||||
s_sunburst = $06
|
||||
s_optimum = $07
|
||||
s_builtin = $08
|
||||
s_switch = $09
|
||||
s_writing = $0A
|
||||
s_unformat = $0B
|
||||
s_f7 = $0C
|
||||
s_sync = $0D
|
||||
s_optbad = $0E
|
||||
s_pass = $0F
|
||||
s_passdemuf = $10
|
||||
s_passcrack = $11
|
||||
s_passcrack0 = $12
|
||||
s_fail = $13
|
||||
s_fatal0000 = $14
|
||||
s_fatal220f = $15
|
||||
s_done = $16
|
||||
s_noslot6 = $17
|
||||
s_writeerr = $18
|
||||
s_writeioerr = $19
|
||||
s_writenodev = $1A
|
||||
s_writeprot = $1B
|
||||
s_othermli = $1C
|
||||
s_canttrace = $1D
|
||||
s_canceled = $1E
|
||||
s_bademu = $1F
|
||||
s_reset = $20
|
||||
s_modify = $21
|
||||
s_modifyto = $22
|
||||
s_dosb0 = $23
|
||||
s_prodosb0 = $24
|
||||
s_pascalb0 = $25
|
||||
s_mecc = $26
|
||||
s_sierra = $27
|
||||
s_a6bc95 = $28
|
||||
s_jmpbcf0 = $29
|
||||
s_rol1e = $2A
|
||||
s_runhello = $2B
|
||||
s_e7 = $2C
|
||||
s_jmpb4bb = $2D
|
||||
s_jmpb400 = $2E
|
||||
s_jmpbeca = $2F
|
||||
s_jsrbb03 = $30
|
||||
s_thunder = $31
|
||||
s_jmpae8e = $32
|
||||
s_diskvol = $33
|
||||
s_d5d5f7 = $34
|
||||
s_construct= $35
|
||||
s_datasoftb0 = $36
|
||||
s_datasoft = $37
|
||||
s_lsr6a = $38
|
||||
s_bcs08 = $39
|
||||
s_jmpb660 = $3A
|
||||
s_protdos = $3B
|
||||
s_protdosw = $3C
|
||||
s_protserial = $3D
|
||||
s_fbff = $3E
|
||||
s_encoded44 = $3F
|
||||
s_encoded53 = $40
|
||||
s_specdel = $41
|
||||
s_bytrack = $42
|
||||
s_a5count = $43
|
||||
s_restart = $44
|
||||
s_corrupter= $45
|
||||
s_eab0 = $46
|
||||
s_eatrk6 = $47
|
||||
s_eeef = $48
|
||||
s_poke = $49
|
||||
s_bootcounter = $4A
|
||||
s_milliken = $4B
|
||||
s_jsr8b3 = $4C
|
||||
s_daviddos = $4D
|
||||
s_quickdos = $4E
|
||||
s_diversidos = $4F
|
||||
s_prontodos = $50
|
||||
s_jmpb412 = $51
|
||||
s_laureate = $52
|
||||
s_bbf9 = $53
|
||||
s_micrograms = $54
|
||||
s_cmpbne0 = $55
|
||||
s_writeram = $56
|
||||
s_d5timing = $57
|
||||
s_advint = $58
|
||||
s_dos32b0 = $59
|
||||
s_bootwrite = $5A
|
||||
s_rwtswrite = $5B
|
||||
s_rdos = $5C
|
||||
s_sra = $5D
|
||||
s_muse = $5E
|
||||
STRINGCOUNT = $5F
|
@ -1,113 +0,0 @@
|
||||
;-------------------------------
|
||||
; Universal RWTS
|
||||
; a modified DOS 3.3-style RWTS that reads 16-sector (6-and-2 encoded) disks
|
||||
; - address prologue "D4 AA 96" or "D5 AA 96"
|
||||
; - any address epilogue
|
||||
; - data prologue "D5 AA AD"
|
||||
; - any data epilogue
|
||||
;
|
||||
; It verifies the data field checksum byte, but it ignores the address field
|
||||
; checksum. It waits longer than a normal RWTS to find an address prologue --
|
||||
; long enough that it will find the prologue even if there is only one sector
|
||||
; on a track.
|
||||
;
|
||||
; It must be loaded at $B800. It uses the standard RWTS entry point at $BD00.
|
||||
;
|
||||
; Write support has been disabled. Any attempt to pass $02 or $04 RWTS commands
|
||||
; will crash.
|
||||
;-------------------------------
|
||||
|
||||
UNIV_A1 = $B956 ; must LSR before setting
|
||||
UNIV_A2 = $B95F
|
||||
UNIV_A3 = $B968
|
||||
UNIV_D1 = $B8E7
|
||||
UNIV_D2 = $B8F1
|
||||
UNIV_D3 = $B8FC
|
||||
|
||||
universalrwts
|
||||
!byte $A2,$E0,$A0,$07,$02,$88,$B1,$3E,$4A,$2E,$0A,$BC,$04,$1C,$99,$00
|
||||
!byte $BB,$E8,$E0,$56,$90,$ED,$C7,$2E,$98,$D0,$9E,$A6,$55,$BD,$24,$18
|
||||
!byte $29,$3F,$9D,$0A,$CA,$10,$00,$F5,$60,$38,$86,$27,$8E,$78,$06,$1C
|
||||
!byte $BD,$8D,$C0,$FB,$F3,$18,$30,$7C,$AD,$2A,$85,$26,$0F,$A9,$FF,$9D
|
||||
!byte $8F,$E7,$1D,$8C,$F0,$48,$68,$EA,$A0,$60,$04,$0A,$20,$B9,$B8,$88
|
||||
!byte $0F,$D0,$F8,$A9,$D5,$1D,$FC,$75,$42,$AA,$22,$AD,$03,$98,$A0,$56
|
||||
!byte $D0,$03,$B9,$00,$5C,$59,$FF,$BB,$AA,$BD,$29,$BA,$1B,$A6,$27,$9D
|
||||
!byte $85,$60,$66,$52,$EB,$A5,$26,$EA,$70,$59,$A9,$15,$AE,$A1,$B0,$16
|
||||
!byte $30,$50,$BB,$C8,$D0,$46,$EA,$3D,$20,$E5,$82,$DE,$72,$4B,$EB,$2D
|
||||
!byte $DE,$B4,$0B,$FC,$06,$29,$60,$18,$DE,$D0,$66,$7C,$7A,$70,$A0,$06
|
||||
!byte $A2,$56,$CA,$30,$FB,$77,$65,$5E,$CC,$2A,$00,$04,$91,$3E,$C8,$C4
|
||||
!byte $26,$D8,$C0,$34,$20,$88,$30,$F0,$61,$5B,$10,$FB,$49,$7F,$D5,$2A
|
||||
!byte $F4,$EA,$0A,$3D,$C9,$AA,$28,$F2,$92,$84,$0B,$7B,$AD,$38,$E7,$A9
|
||||
!byte $05,$88,$84,$26,$BC,$10,$0E,$8B,$1E,$BA,$A4,$A8,$FF,$F8,$D0,$56
|
||||
!byte $EE,$11,$91,$91,$2A,$EE,$10,$41,$D9,$E9,$13,$49,$39,$C3,$CF,$05
|
||||
!byte $EA,$61,$0A,$5C,$38,$9B,$D0,$F7,$66,$1D,$4C,$04,$E6,$4A,$F0,$F3
|
||||
!byte $16,$87,$4A,$C9,$6A,$E5,$EF,$74,$6E,$23,$09,$96,$18,$D8,$A0,$03
|
||||
!byte $DC,$85,$27,$A9,$0F,$2A,$21,$3C,$13,$08,$25,$38,$C2,$2C,$0F,$45
|
||||
!byte $27,$88,$46,$E7,$A8,$A6,$85,$5C,$4E,$00,$18,$60,$86,$2B,$85,$03
|
||||
!byte $2A,$CD,$78,$04,$F0,$53,$1B,$79,$26,$AD,$12,$0F,$82,$38,$E5,$2A
|
||||
!byte $C0,$33,$B0,$07,$49,$FF,$60,$EE,$1C,$90,$05,$69,$FE,$63,$CE,$0E
|
||||
!byte $C5,$26,$CA,$02,$40,$4E,$C9,$0C,$01,$B0,$01,$A8,$38,$20,$EE,$B9
|
||||
!byte $C4,$11,$BA,$ED,$40,$AD,$A5,$27,$18,$F8,$F1,$C8,$18,$1D,$48,$9B
|
||||
!byte $0C,$D0,$C3,$0F,$18,$C0,$83,$29,$03,$2A,$05,$2B,$90,$62,$1D,$80
|
||||
!byte $C0,$A6,$9D,$60,$DC,$A0,$40,$A2,$11,$CA,$D0,$FD,$E6,$74,$46,$74
|
||||
!byte $02,$0F,$47,$38,$E9,$01,$67,$F0,$60,$40,$30,$28,$24,$20,$14,$1E
|
||||
!byte $1D,$1C,$01,$02,$70,$2C,$26,$22,$1F,$98,$0C,$96,$97,$00,$9A,$9B
|
||||
!byte $9D,$9E,$9F,$A6,$A7,$AB,$00,$AC,$AD,$AE,$AF,$B2,$B3,$B4,$B5,$00
|
||||
!byte $B6,$B7,$B9,$BA,$BB,$BC,$BD,$BE,$00,$BF,$CB,$CD,$CE,$CF,$D3,$D6
|
||||
!byte $D7,$00,$D9,$DA,$DB,$DC,$DD,$DE,$DF,$E5,$00,$E6,$E7,$E9,$EA,$EB
|
||||
!byte $EC,$ED,$EE,$00,$EF,$F2,$F3,$F4,$F5,$F6,$F7,$F9,$03,$FA,$FB,$FC
|
||||
!byte $FD,$FE,$FF,$85,$3A,$01,$21,$FF,$DB,$80,$01,$98,$99,$00,$02,$03
|
||||
!byte $9C,$04,$05,$06,$A0,$A1,$01,$A2,$A3,$A4,$A5,$07,$08,$A8,$30,$07
|
||||
!byte $09,$00,$0A,$0B,$0C,$0D,$B0,$B1,$0E,$0F,$00,$10,$11,$12,$13,$B8
|
||||
!byte $14,$15,$16,$00,$17,$18,$19,$1A,$C0,$C1,$C2,$C3,$00,$C4,$C5,$C6
|
||||
!byte $C7,$C8,$C9,$CA,$1B,$00,$CC,$1C,$1D,$1E,$D0,$D1,$D2,$1F,$4C,$D4
|
||||
!byte $82,$02,$21,$D8,$22,$23,$24,$40,$5E,$27,$28,$00,$E0,$E1,$E2,$E3
|
||||
!byte $E4,$29,$2A,$2B,$00,$E8,$2C,$2D,$2E,$2F,$30,$31,$32,$00,$F0,$F1
|
||||
!byte $33,$34,$35,$36,$37,$38,$00,$F8,$39,$3A,$3B,$3C,$3D,$3E,$3F,$E1
|
||||
!byte $4E,$01,$EE,$96,$72,$27,$5E,$E6,$22,$42,$DD,$0D,$20,$C3,$BC,$07
|
||||
!byte $F9,$8D,$42,$0E,$EA,$C1,$FE,$F0,$75,$27,$CB,$FC,$59,$0B,$96,$11
|
||||
!byte $A5,$41,$FD,$C4,$02,$44,$11,$3F,$09,$FD,$45,$F3,$97,$90,$48,$4A
|
||||
!byte $05,$3E,$BB,$19,$0C,$68,$09,$54,$D4,$81,$DE,$5C,$34,$EB,$89,$18
|
||||
!byte $77,$0C,$43,$27,$22,$DD,$6D,$EA,$02,$54,$B4,$08,$DE,$20,$10,$60
|
||||
!byte $88,$A5,$0E,$E8,$91,$A0,$94,$CA,$96,$06,$4F,$7F,$1F,$C8,$10,$D0
|
||||
!byte $A3,$A3,$E0,$A0,$A5,$85,$1D,$A4,$84,$48,$1E,$49,$04,$02,$8C,$F8
|
||||
!byte $C3,$69,$04,$73,$0A,$F4,$01,$2C,$B1,$48,$15,$0E,$0F,$D1,$A3,$F0
|
||||
!byte $1B,$8A,$CE,$17,$7E,$68,$7B,$91,$C6,$CB,$A0,$08,$CE,$80,$4F,$D0
|
||||
!byte $F6,$BA,$E0,$29,$68,$AA,$77,$22,$15,$DB,$D2,$04,$F1,$F8,$05,$42
|
||||
!byte $1C,$03,$06,$EE,$26,$66,$89,$30,$06,$72,$38,$99,$36,$3C,$C8,$B4
|
||||
!byte $0A,$5E,$C7,$F3,$C1,$3C,$85,$47,$B7,$C0,$24,$A6,$10,$AB,$67,$06
|
||||
!byte $9C,$28,$DE,$05,$08,$6A,$80,$B7,$BD,$8A,$C0,$3A,$B0,$03,$BA,$8B
|
||||
!byte $8F,$66,$35,$28,$E1,$D0,$0B,$A0,$07,$65,$9D,$8D,$7E,$FA,$AE,$94
|
||||
!byte $06,$87,$58,$FA,$5A,$3E,$BE,$28,$83,$11,$A4,$47,$10,$0D,$F1,$12
|
||||
!byte $88,$63,$9E,$20,$F7,$F0,$F3,$FA,$0C,$C2,$36,$F0,$5A,$C9,$E0,$0C
|
||||
!byte $58,$6A,$6C,$08,$7A,$64,$B8,$06,$A0,$30,$8C,$78,$05,$69,$F6,$44
|
||||
!byte $0C,$B9,$90,$24,$CE,$16,$10,$59,$F3,$E0,$01,$48,$A9,$60,$20,$95
|
||||
!byte $BE,$FA,$83,$D1,$F0,$28,$D7,$D5,$8D,$1F,$D3,$F8,$66,$9F,$68,$09
|
||||
!byte $58,$4C,$AB,$0B,$A4,$2E,$CC,$A5,$4B,$1C,$0C,$26,$98,$4B,$68,$DF
|
||||
!byte $4C,$83,$D0,$E5,$F0,$CA,$C0,$A9,$40,$28,$3F,$4C,$48,$F9,$75,$39
|
||||
!byte $75,$AF,$B9,$A5,$3D,$9D,$A5,$2F,$D4,$0E,$AB,$07,$68,$F0,$08,$C5
|
||||
!byte $9E,$98,$82,$20,$D0,$7F,$E1,$60,$05,$F6,$A8,$B9,$B8,$BF,$3E,$C5
|
||||
!byte $2D,$01,$97,$28,$90,$1C,$20,$DC,$EE,$87,$82,$8E,$97,$A2,$03,$86
|
||||
!byte $26,$DB,$C2,$DC,$40,$18,$24,$38,$A0,$0D,$92,$2B,$30,$88,$C0,$FA
|
||||
!byte $2A,$B8,$90,$90,$DD,$1F,$10,$B0,$EE,$A4,$4D,$87,$3C,$6A,$68,$D0
|
||||
!byte $08,$0A,$20,$6B,$32,$BE,$4E,$E6,$60,$E3,$C9,$CB,$8E,$CB,$B9,$07
|
||||
!byte $12,$24,$35,$30,$03,$7C,$F4,$8D,$C6,$14,$A5,$2A,$19,$20,$05,$99
|
||||
!byte $3A,$10,$03,$E0,$1C,$4C,$A0,$B9,$8A,$64,$4A,$03,$A8,$85,$D1,$22
|
||||
!byte $32,$6A,$43,$1C,$14,$61,$68,$0A,$23,$E2,$60,$4A,$51,$84,$B1,$41
|
||||
!byte $C7,$03,$47,$3E,$A4,$56,$A0,$12,$44,$12,$99,$FF,$BB,$5D,$38,$B8
|
||||
!byte $50,$06,$A9,$55,$50,$D4,$D4,$28,$85,$4D,$45,$47,$41,$EF,$F0,$0D
|
||||
!byte $BF,$F9,$43,$A5,$24,$A3,$30,$12,$D0,$05,$38,$44,$1D,$F0,$19,$90
|
||||
!byte $27,$B0,$F5,$A5,$A1,$C2,$F1,$57,$BF,$93,$EC,$E6,$F6,$4E,$04,$C9
|
||||
!byte $23,$90,$D3,$18,$84,$8D,$22,$BB,$38,$93,$BC,$3E,$A5,$3F,$80,$80
|
||||
!byte $D0,$02,$A4,$45,$20,$56,$15,$BC,$B0,$6B,$CB,$75,$13,$66,$E6,$3F
|
||||
!byte $01,$91,$C9,$10,$90,$EC,$30,$16,$84,$F5,$50,$4D,$99,$A8,$BF,$19
|
||||
!byte $88,$10,$FA,$47,$87,$E2,$92,$03,$50,$FE,$CA,$FC,$F1,$5E,$10,$23
|
||||
!byte $14,$F0,$15,$FC,$28,$C5,$82,$E4,$E9,$50,$01,$88,$C9,$05,$05,$B0
|
||||
!byte $11,$38,$60,$1E,$19,$75,$E7,$11,$37,$86,$42,$28,$20,$0B,$3D,$C9
|
||||
!byte $0F,$D4,$15,$8C,$84,$61,$EB,$4C,$A4,$2D,$B9,$8B,$B0,$30,$DD,$0C
|
||||
!byte $30,$BF,$C6,$14,$3F,$10,$CA,$9D,$1B,$D0,$0A,$8C,$3F,$F3,$E5,$76
|
||||
!byte $C4,$04,$18,$60,$A2,$22,$A0,$0D,$0B,$09,$00,$07,$05,$03,$01,$0E
|
||||
!byte $0C,$0A,$08,$00,$06,$04,$02,$0F,$20,$93,$FE,$AD,$34,$81,$C0,$07
|
||||
!byte $0E,$C4,$8D,$01,$E0,$4C,$44,$B7,$65,$85,$E4,$63,$AA,$F8,$70,$CE
|
||||
!byte $06,$71,$D4,$84,$06,$5B,$A7,$8C,$B7,$0F,$38,$7E,$AE,$8F,$9B,$B3
|
||||
!byte $9A,$C1,$16,$A3,$BA,$8E,$83,$10,$A9,$09,$4C,$85,$EE,$00
|
573
src/unpack.a
573
src/unpack.a
@ -1,177 +1,436 @@
|
||||
;aPLib data decompressor for Apple II
|
||||
;Peter Ferrie (peter.ferrie@gmail.com)
|
||||
;assemble using ACME
|
||||
;dst<src
|
||||
|
||||
!zone {
|
||||
Unpack ;unpacker entrypoint
|
||||
lda #0
|
||||
sta last
|
||||
sta ecx+1
|
||||
; This source code is altered and is not the original version found on
|
||||
; the Exomizer homepage.
|
||||
; It contains modifications made by Krill/Plush to depack a packed file
|
||||
; crunched forward and to work with his loader.
|
||||
|
||||
literal
|
||||
jsr getput
|
||||
ldy #2
|
||||
;
|
||||
; Copyright (c) 2002 - 2005 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. This subroutine has to preserve x and y register and,
|
||||
; if FORWARD_DECRUNCHING = 0, must not modify the state of the carry 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
|
||||
|
||||
nexttag
|
||||
jsr getbit
|
||||
bcc literal
|
||||
jsr getbit
|
||||
bcc codepair
|
||||
jsr getbit
|
||||
bcs onebyte
|
||||
jsr getsrc
|
||||
lsr
|
||||
beq donedepacking
|
||||
ldx #0
|
||||
stx ecx
|
||||
rol ecx
|
||||
stx last+1
|
||||
tax
|
||||
bne domatch_with_2inc
|
||||
; -------------------------------------------------------------------
|
||||
; if literal sequences is not used (the data was crunched with the -c
|
||||
; flag) then the following line can be uncommented for shorter code.
|
||||
;LITERAL_SEQUENCES_NOT_USED=1
|
||||
|
||||
getbit
|
||||
asl last
|
||||
bne .stillbitsleft
|
||||
jsr getsrc
|
||||
asl
|
||||
sta last
|
||||
inc last
|
||||
; -------------------------------------------------------------------
|
||||
; set this flag to 0 if the data are depacked backwards,
|
||||
; and non-0 otherwise
|
||||
; -------------------------------------------------------------------
|
||||
FORWARD_DECRUNCHING=1
|
||||
|
||||
.stillbitsleft
|
||||
; -------------------------------------------------------------------
|
||||
; zero page addresses used
|
||||
; -------------------------------------------------------------------
|
||||
zp_len_lo = $a7
|
||||
|
||||
donedepacking
|
||||
rts
|
||||
zp_src_lo = $ae
|
||||
zp_src_hi = zp_src_lo + 1
|
||||
|
||||
onebyte
|
||||
ldy #1
|
||||
sty ecx
|
||||
iny
|
||||
lda #0
|
||||
sta tmpu+1
|
||||
lda #$10
|
||||
zp_bits_hi = $fc
|
||||
|
||||
.getmorebits
|
||||
pha
|
||||
jsr getbit
|
||||
pla
|
||||
rol
|
||||
bcc .getmorebits
|
||||
bne domatch
|
||||
jsr putdst
|
||||
zp_bitbuf = $fd
|
||||
zp_dest_lo = zp_bitbuf + 1 ; dest addr lo
|
||||
zp_dest_hi = zp_bitbuf + 2 ; dest addr hi
|
||||
|
||||
linktag
|
||||
bne nexttag
|
||||
tabl_bi = decrunch_table
|
||||
tabl_lo = decrunch_table + 52
|
||||
tabl_hi = decrunch_table + 104
|
||||
|
||||
codepair
|
||||
jsr getgamma
|
||||
- jsr dececx
|
||||
dey
|
||||
bne -
|
||||
tay
|
||||
ora ecx+1
|
||||
beq +
|
||||
; -------------------------------------------------------------------
|
||||
; 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.
|
||||
; -------------------------------------------------------------------
|
||||
|
||||
normalcodepair
|
||||
dey
|
||||
sty last+1
|
||||
jsr getsrc
|
||||
tax
|
||||
!byte $a9
|
||||
+ iny
|
||||
jsr getgamma
|
||||
cpy #$7d
|
||||
bcs domatch_with_2inc
|
||||
cpy #5
|
||||
bcs domatch_with_inc
|
||||
txa
|
||||
bmi domatch_new_lastpos
|
||||
; -------------------------------------------------------------------
|
||||
; 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:
|
||||
; -------------------------------------------------------------------
|
||||
; init zeropage, x and y regs.
|
||||
;
|
||||
ldy #0
|
||||
ldx #3
|
||||
init_zp:
|
||||
jsr get_crunched_byte
|
||||
sta zp_bitbuf - 1,x
|
||||
dex
|
||||
bne init_zp
|
||||
; -------------------------------------------------------------------
|
||||
; calculate tables (50 bytes)
|
||||
; x and y must be #0 when entering
|
||||
;
|
||||
nextone:
|
||||
inx
|
||||
tya
|
||||
bne domatch_new_lastpos
|
||||
and #$0f
|
||||
beq shortcut ; start with new sequence
|
||||
|
||||
domatch_with_2inc
|
||||
inc ecx
|
||||
bne domatch_with_inc
|
||||
inc ecx+1
|
||||
txa ; this clears reg a
|
||||
lsr ; and sets the carry flag
|
||||
ldx tabl_bi-1,y
|
||||
rolle:
|
||||
rol
|
||||
rol zp_bits_hi
|
||||
dex
|
||||
bpl rolle ; c = 0 after this (rol zp_bits_hi)
|
||||
|
||||
domatch_with_inc
|
||||
inc ecx
|
||||
bne domatch_new_lastpos
|
||||
inc ecx+1
|
||||
adc tabl_lo-1,y
|
||||
tax
|
||||
|
||||
domatch_new_lastpos
|
||||
|
||||
domatch_lastpos
|
||||
ldy #1
|
||||
lda last+1
|
||||
sta tmpu+1
|
||||
lda zp_bits_hi
|
||||
adc tabl_hi-1,y
|
||||
shortcut:
|
||||
sta tabl_hi,y
|
||||
txa
|
||||
sta tabl_lo,y
|
||||
|
||||
domatch
|
||||
sta tmpu
|
||||
lda src+1
|
||||
pha
|
||||
lda src
|
||||
pha
|
||||
lda dst
|
||||
sec
|
||||
sbc tmpu
|
||||
sta src
|
||||
lda dst+1
|
||||
sbc tmpu+1
|
||||
sta src+1
|
||||
- jsr getput
|
||||
jsr dececx
|
||||
ora ecx+1
|
||||
bne -
|
||||
pla
|
||||
sta src
|
||||
pla
|
||||
sta src+1
|
||||
bne linktag
|
||||
ldx #4
|
||||
jsr get_bits ; clears x-reg.
|
||||
sta tabl_bi,y
|
||||
iny
|
||||
cpy #52
|
||||
bne nextone
|
||||
beq begin
|
||||
|
||||
getgamma
|
||||
lda #1
|
||||
sta ecx
|
||||
sta ecx+1
|
||||
dec ecx+1
|
||||
|
||||
.getgammaloop
|
||||
jsr getbit
|
||||
rol ecx
|
||||
rol ecx+1
|
||||
jsr getbit
|
||||
bcs .getgammaloop
|
||||
get_crunched_byte:
|
||||
_byte_lo = * + 1
|
||||
_byte_hi = * + 2
|
||||
lda $1234 ; needs to be set correctly before
|
||||
; decrunch_file is called.
|
||||
inc _byte_lo
|
||||
bne _byte_skip_hi
|
||||
inc _byte_hi
|
||||
_byte_skip_hi:
|
||||
rts
|
||||
|
||||
dececx
|
||||
lda ecx
|
||||
bne +
|
||||
dec ecx+1
|
||||
+ dec ecx
|
||||
lda ecx
|
||||
rts
|
||||
|
||||
getput
|
||||
jsr getsrc
|
||||
|
||||
putdst
|
||||
sty tmpu
|
||||
ldy #0
|
||||
sta (dst), y
|
||||
ldy tmpu
|
||||
inc dst
|
||||
bne +
|
||||
inc dst+1
|
||||
+ rts
|
||||
|
||||
getsrc
|
||||
sty tmpu
|
||||
ldy #0
|
||||
lda (src), y
|
||||
ldy tmpu
|
||||
inc src
|
||||
bne +
|
||||
inc src+1
|
||||
+ rts
|
||||
; -------------------------------------------------------------------
|
||||
; get bits (29 bytes)
|
||||
;
|
||||
; args:
|
||||
; x = number of bits to get
|
||||
; returns:
|
||||
; a = #bits_lo
|
||||
; x = #0
|
||||
; c = 0
|
||||
; z = 1
|
||||
; zp_bits_hi = #bits_hi
|
||||
; notes:
|
||||
; y is untouched
|
||||
; -------------------------------------------------------------------
|
||||
get_bits:
|
||||
lda #$00
|
||||
sta zp_bits_hi
|
||||
cpx #$01
|
||||
bcc bits_done
|
||||
bits_next:
|
||||
lsr zp_bitbuf
|
||||
bne ok
|
||||
pha
|
||||
!IF FORWARD_DECRUNCHING = 0 {
|
||||
literal_get_byte:
|
||||
jsr get_crunched_byte
|
||||
bcc literal_byte_gotten
|
||||
} ELSE {
|
||||
jsr get_crunched_byte
|
||||
;; sec
|
||||
}
|
||||
ror
|
||||
sta zp_bitbuf
|
||||
pla
|
||||
ok:
|
||||
rol
|
||||
rol zp_bits_hi
|
||||
dex
|
||||
bne bits_next
|
||||
bits_done:
|
||||
rts
|
||||
|
||||
!IF FORWARD_DECRUNCHING {
|
||||
|
||||
; -------------------------------------------------------------------
|
||||
; literal sequence handling
|
||||
;
|
||||
literal_start:
|
||||
ldx #$10 ; these 16 bits
|
||||
jsr get_bits; tell the length of the sequence
|
||||
ldx zp_bits_hi
|
||||
literal_start1: ; if literal byte, a = 1, zp_bits_hi = 0
|
||||
sta zp_len_lo
|
||||
!byte $2c ; skip next instruction
|
||||
|
||||
; -------------------------------------------------------------------
|
||||
; main copy loop
|
||||
; x = length hi
|
||||
; y = length lo
|
||||
;
|
||||
copy_start:
|
||||
stx zp_bits_hi
|
||||
ldy #$00
|
||||
copy_next:
|
||||
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
|
||||
bcs +
|
||||
jsr get_crunched_byte
|
||||
clc
|
||||
!byte $2c; skip next instruction
|
||||
+
|
||||
}
|
||||
lda (zp_src_lo),y
|
||||
sta (zp_dest_lo),y
|
||||
iny
|
||||
bne +
|
||||
dex
|
||||
inc <zp_dest_hi
|
||||
inc zp_src_hi
|
||||
+ tya
|
||||
eor zp_len_lo
|
||||
bne copy_next
|
||||
txa
|
||||
bne copy_next
|
||||
tya
|
||||
clc
|
||||
adc <zp_dest_lo
|
||||
sta <zp_dest_lo
|
||||
bcc +
|
||||
inc <zp_dest_hi
|
||||
+
|
||||
|
||||
} ELSE {
|
||||
|
||||
; -------------------------------------------------------------------
|
||||
; main copy loop
|
||||
; x = length hi
|
||||
; y = length lo
|
||||
; (18(16) bytes)
|
||||
;
|
||||
copy_next_hi:
|
||||
dex
|
||||
dec zp_dest_hi
|
||||
dec zp_src_hi
|
||||
copy_next:
|
||||
dey
|
||||
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
|
||||
bcc literal_get_byte
|
||||
}
|
||||
lda (zp_src_lo),y
|
||||
literal_byte_gotten: ; y = 0 when this label is jumped to
|
||||
sta (zp_dest_lo),y
|
||||
copy_start:
|
||||
tya
|
||||
bne copy_next
|
||||
txa
|
||||
bne copy_next_hi
|
||||
|
||||
}
|
||||
|
||||
; -------------------------------------------------------------------
|
||||
; decruncher entry point, needs calculated tables (21(13) bytes)
|
||||
; x and y must be #0 when entering
|
||||
;
|
||||
begin:
|
||||
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
|
||||
inx
|
||||
jsr get_bits
|
||||
tay
|
||||
bne literal_start1; if bit set, get a literal byte
|
||||
} ELSE {
|
||||
dey
|
||||
}
|
||||
getgamma:
|
||||
inx
|
||||
jsr bits_next
|
||||
lsr
|
||||
iny
|
||||
bcc getgamma
|
||||
!IFDEF LITERAL_SEQUENCES_NOT_USED {
|
||||
beq literal_start
|
||||
}
|
||||
cpy #$11
|
||||
|
||||
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
|
||||
!IF FORWARD_DECRUNCHING {
|
||||
beq bits_done ; gamma = 17 : end of file
|
||||
bcs literal_start ; gamma = 18 : literal sequence
|
||||
; gamma = 1..16: sequence
|
||||
} ELSE {
|
||||
bcc sequence_start; gamma = 1..16: sequence
|
||||
beq bits_done ; gamma = 17 : end of file
|
||||
; gamma = 18 : literal sequence
|
||||
; -------------------------------------------------------------------
|
||||
; literal sequence handling (13(2) bytes)
|
||||
;
|
||||
ldx #$10 ; these 16 bits
|
||||
jsr get_bits; tell the length of the sequence
|
||||
literal_start1: ; if literal byte, a = 1, zp_bits_hi = 0
|
||||
sta zp_len_lo
|
||||
ldx zp_bits_hi
|
||||
ldy #0
|
||||
bcc literal_start; jmp
|
||||
|
||||
sequence_start:
|
||||
}
|
||||
} ELSE {
|
||||
bcs bits_done
|
||||
}
|
||||
; -------------------------------------------------------------------
|
||||
; calulate length of sequence (zp_len) (11 bytes)
|
||||
;
|
||||
ldx tabl_bi - 1,y
|
||||
jsr get_bits
|
||||
adc tabl_lo - 1,y ; we have now calculated zp_len_lo
|
||||
sta zp_len_lo
|
||||
; -------------------------------------------------------------------
|
||||
; now do the hibyte of the sequence length calculation (6 bytes)
|
||||
lda zp_bits_hi
|
||||
adc tabl_hi - 1,y ; c = 0 after this.
|
||||
pha
|
||||
; -------------------------------------------------------------------
|
||||
; here we decide what offset table to use (20 bytes)
|
||||
; x is 0 here
|
||||
;
|
||||
bne nots123
|
||||
ldy zp_len_lo
|
||||
cpy #$04
|
||||
bcc size123
|
||||
nots123:
|
||||
ldy #$03
|
||||
size123:
|
||||
ldx tabl_bit - 1,y
|
||||
jsr get_bits
|
||||
adc tabl_off - 1,y ; c = 0 after this.
|
||||
tay ; 1 <= y <= 52 here
|
||||
; -------------------------------------------------------------------
|
||||
!IF FORWARD_DECRUNCHING = 0 {
|
||||
; Here we do the dest_lo -= len_lo subtraction to prepare zp_dest
|
||||
; but we do it backwards: a - b == (b - a - 1) ^ ~0 (C-syntax)
|
||||
; (16(16) bytes)
|
||||
lda zp_len_lo
|
||||
literal_start:
|
||||
sbc zp_dest_lo
|
||||
bcc noborrow
|
||||
dec zp_dest_hi
|
||||
noborrow:
|
||||
eor #$ff
|
||||
sta zp_dest_lo
|
||||
cpy #$01 ; y < 1 then literal
|
||||
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
|
||||
bcc pre_copy
|
||||
} ELSE {
|
||||
bcc literal_get_byte
|
||||
}
|
||||
}
|
||||
|
||||
; -------------------------------------------------------------------
|
||||
; calulate absolute offset (zp_src)
|
||||
;
|
||||
ldx tabl_bi,y
|
||||
jsr get_bits
|
||||
adc tabl_lo,y
|
||||
bcc skipcarry
|
||||
inc zp_bits_hi
|
||||
!IF FORWARD_DECRUNCHING {
|
||||
skipcarry:
|
||||
sec
|
||||
eor #$ff
|
||||
adc <zp_dest_lo
|
||||
sta zp_src_lo
|
||||
lda <zp_dest_hi
|
||||
sbc zp_bits_hi
|
||||
sbc tabl_hi,y
|
||||
sta zp_src_hi
|
||||
} ELSE {
|
||||
clc
|
||||
skipcarry:
|
||||
adc zp_dest_lo
|
||||
sta zp_src_lo
|
||||
lda zp_bits_hi
|
||||
adc tabl_hi,y
|
||||
adc zp_dest_hi
|
||||
sta zp_src_hi
|
||||
}
|
||||
|
||||
; -------------------------------------------------------------------
|
||||
; prepare for copy loop (8(6) bytes)
|
||||
;
|
||||
pla
|
||||
tax
|
||||
!IFNDEF LITERAL_SEQUENCES_NOT_USED {
|
||||
sec
|
||||
!IF FORWARD_DECRUNCHING = 0 {
|
||||
pre_copy:
|
||||
literal_start:
|
||||
ldy zp_len_lo
|
||||
}
|
||||
jmp copy_start
|
||||
} ELSE {
|
||||
ldy zp_len_lo
|
||||
bcc copy_start
|
||||
}
|
||||
; -------------------------------------------------------------------
|
||||
; two small static tables (6(6) bytes)
|
||||
;
|
||||
tabl_bit:
|
||||
!byte 2,4,4
|
||||
tabl_off:
|
||||
!byte 48,32,16
|
||||
; -------------------------------------------------------------------
|
||||
; end of decruncher
|
||||
; -------------------------------------------------------------------
|
||||
|
||||
; -------------------------------------------------------------------
|
||||
; this 156 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
|
||||
;; !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
|
||||
; -------------------------------------------------------------------
|
||||
|
39
winmake.bat
Normal file
39
winmake.bat
Normal file
@ -0,0 +1,39 @@
|
||||
0</* :
|
||||
@echo off
|
||||
if "%1" equ "clean" (
|
||||
echo y|1>nul rd build /s
|
||||
goto :EOF
|
||||
)
|
||||
2>nul md build
|
||||
cd src\mods
|
||||
acme universalrwts.a
|
||||
cd ..\..\build
|
||||
exomize raw -q universalrwts.bin -o universalrwts.tmp
|
||||
cscript /nologo //e:jscript %~f0 "b8" "00"
|
||||
1>nul copy /b tmp+universalrwts.tmp universalrwts.pak
|
||||
cd ..\src\mods
|
||||
acme t00only.a
|
||||
cd ..\..\build
|
||||
exomize raw -q t00only.bin -o t00only.tmp
|
||||
cscript /nologo //e:jscript %~f0 "20" "00"
|
||||
1>nul copy /b tmp+t00only.tmp t00only.pak
|
||||
cd ..\src
|
||||
for /f "tokens=*" %%q in ('2^>^&1 acme passport.a') do set _make=%%q
|
||||
acme -DRELBASE=$%_make:~-5,4% passport.a
|
||||
set _make=
|
||||
cd ..
|
||||
1>nul copy res\work.po build\passport.po
|
||||
java -jar bin\AppleCommander.jar -p build\passport.po "PASSPORT.SYSTEM" sys 0x2000 < build\PASSPORT.SYSTEM
|
||||
goto :EOF
|
||||
*/
|
||||
new ActiveXObject("scripting.filesystemobject").createtextfile("tmp").write(String.fromCharCode(parseInt(WScript.arguments(0),16),String.fromCharCode(parseInt(WScript.arguments(1),16))))
|
||||
/*
|
||||
bat/jscript hybrid make script for Windows environments
|
||||
a qkumba monstrosity from 2017-10-16
|
||||
requires ACME, Exomizer, Apple Commander, Java
|
||||
https://sourceforge.net/projects/acme-crossass/
|
||||
https://sourceforge.net/projects/applecommander/
|
||||
https://bitbucket.org/magli143/exomizer/wiki/Home
|
||||
https://java.com/en/download/
|
||||
requires ACME, Exomizer, Java to be in path
|
||||
*/
|
Loading…
x
Reference in New Issue
Block a user