shave some bytes, inline some single use functions, and simplify Makefile

This commit is contained in:
4am 2021-06-18 20:15:15 -04:00
parent 53f92388b0
commit db9c045d11
9 changed files with 141 additions and 238 deletions

View File

@ -32,33 +32,19 @@ asm:
cd src && $(ACME) -r ../build/passport.lst -DFORWARD_DECRUNCHING=1 passport.a 2> ../build/relbase.log
cd src && $(ACME) -DRELBASE=`cat ../build/relbase.log | grep "RELBASE =" | cut -d"=" -f2 | cut -d"(" -f2 | cut -d")" -f1` -DFORWARD_DECRUNCHING=1 passport.a 2> ../build/vars.log
grep "SaveProDOS=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 > build/vars.a
grep "kForceLower=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "DiskIIArray=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "HardDiskArray=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "ThisSlot=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "PrintByID=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "WaitForKey=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "CleanExit=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "GetVolumeName=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "OnlineReturn=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "GetVolumeInfo=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "filetype=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "access=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "VolumeName=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "RAMDiskImagePath=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "auxtype=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "blocks=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "PREFSVER=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "PREFSFILE=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "PREFSREADLEN=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "PREFSBUFFER=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "ValidatePrefs=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "SavePrefs=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "mliparam=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "OpenFile=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "ReadFile=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "CloseFile=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "CheckCache=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "SLOT=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
grep "DRIVE=" build/vars.log | cut -d":" -f3 | cut -d"(" -f1 >> build/vars.a
$(EXOMIZER) -b build/passport.tmp -o build/passport.pak
cd src && $(ACME) -DFORWARD_DECRUNCHING=0 wrapper.a
cp res/work.po "$(BUILDDISK)".po

View File

@ -89,6 +89,8 @@ RELBASE = $2000 ; dummy assignment for first build
}
LOWPOINT = $4000 ; lowest available address for code
HIGHPOINT = $B200 ; highest available address+1 for code
PREFSBUFFER = $B600
PREFSREADLEN = $0003
BASEPAGE = $10 ; high byte of $1000-byte buffer that
; holds sector data for current track
; Special Delivery tracer assumes this

View File

@ -173,93 +173,3 @@ ScanForRAMAndHardDisks
dey
bne -
rts
;-------------------------------
; LoadPrefs
; load preferences from file
;
; in: ProDOS must be in memory
;-------------------------------
LoadPrefs
lda #$FF
sta PREFSVER
jsr LoadFile1Shot
!word PREFSFILE
!word PREFSVER
!word PREFSREADLEN
!word PREFSBUFFER
jsr ValidatePrefs
bcc +
jmp SavePrefs
+ rts
;-------------------------------
; LoadFile1Shot
; load a file into memory all at once,
; using ProDOS MLI calls
;
; in: stack contains 8 bytes of parameters:
; +1 address of pathname
; +3 address of data buffer (to receive file contents)
; +5 [word] maximum length of data to read
; +7 address of ProDOS file buffer
; out: if C set, load failed and A contains error code
; from open or read
; if C clear, load succeeded and ($02) contains
; data loaded from file
; all other flags clobbered
; all registers clobbered
; stack set to next instruction after parameters
;-------------------------------
LoadFile1Shot
clc
pla
sta $00
adc #$08
tax
pla
sta $01
adc #$00
pha
txa
pha
ldy #$01
lda ($00), y ; lo byte of pathname
sta mliparam+1
iny
lda ($00), y ; hi byte of pathname
sta mliparam+2
ldy #$07
lda ($00), y ; lo byte of ProDOS file buffer
sta mliparam+3
iny
lda ($00), y ; hi byte of ProDOS file buffer
sta mliparam+4
jsr OpenFile
bcs @exit ; C set on error
pha ; push file reference number
ldy #$03
lda ($00), y ; lo address of data buffer
sta mliparam+2
iny
lda ($00), y ; hi address of data buffer
sta mliparam+3
iny
lda ($00), y ; lo data length
sta mliparam+4
iny
lda ($00), y ; hi data length
sta mliparam+5
pla ; pull file reference number
jsr ReadFile
php ; save flags from readfile
pha
jsr CloseFile ; always close whether read worked or not
pla
plp ; restore flags from readfile
; (so caller gets codes from read attempt,
; not close)
@exit rts

View File

@ -40,7 +40,9 @@ VERBOSE = $00 ; set to $01 to display API label addresses
!to "../build/PASSPORT.TMP",plain
!ct "lcase.ct"
!source "apidefs.a" ; no code in here
; no code in these
!source "apidefs.a"
!source "prefs.save.a"
FirstMover
jmp MainMenu
@ -258,10 +260,8 @@ Cleanup
CleanExit
jsr Cleanup
jsr SwapProDOS ; ProDOS out -> in
lda gChangedPrefs
bne +
jsr SavePrefs
+ jsr PRODOSMLI ; does not return
+SavePrefs
jsr PRODOSMLI ; does not return
!byte $65
!word +
+ !byte $04
@ -465,8 +465,8 @@ _byte_skip_hi:
!source "id/dinkeydos.a"
!source "id/advent.a"
!source "id/panglosdos.a"
!source "id/bootfailure.a"
!source "id/davidson.a"
!source "id/bootfailure.a"
!source "id/holle.a"
!source "id/phoenix.a"
!source "id/555.a"
@ -526,8 +526,6 @@ _byte_skip_hi:
!warn "PREFSBUFFER=",PREFSBUFFER
!warn "PREFSREADLEN=",PREFSREADLEN
!warn "PREFSVER=",PREFSVER
!warn "SavePrefs=",SavePrefs
!warn "ValidatePrefs=",ValidatePrefs
!warn "kForceLower=",kForceLower
!warn "PrintByID=",PrintByID
!warn "DiskIIArray=",DiskIIArray
@ -535,4 +533,7 @@ _byte_skip_hi:
!warn "ThisSlot=",ThisSlot
!warn "CheckCache=",CheckCache
!warn "IDBootFailure=",IDBootFailure
!warn "PREFSVER=",PREFSVER
!warn "SLOT=",SLOT
!warn "DRIVE=",DRIVE
}

View File

@ -1,13 +1,7 @@
CURRENTVER = $30 ; ASCII "0"
DEFSLOT = $36 ; ASCII "6"
DEFDRIVE = $32 ; ASCII "2"
PREFSFILE !byte prefs_e-prefs_b
prefs_b
!text "PASSPORT.CONF"
prefs_e
PREFSBUFFER = $B600
PREFSREADLEN = $0003
PREFSVER !byte $FF
SLOT !byte $FF
@ -19,101 +13,3 @@ DRIVE !byte $FF
!text "|+---WRITE SLOT (1-7)",$8D
!text "+---PREFS VERSION (DO NOT CHANGE)",$8D
PREFSWRITELEN = *-PREFSVER
;-------------------------------
; SavePrefs
; save preferences to file
;
; in: ProDOS must be in memory
;-------------------------------
SavePrefs
jsr ValidatePrefs
lda #<PREFSFILE
sta mliparam+1
lda #>PREFSFILE
sta mliparam+2
jsr DeleteFile ; don't care if this fails
lda #$04 ; text file type
sta mliparam+4
lda #$00
sta mliparam+5 ; no aux file type
sta mliparam+6
jsr CreateFile
bcs +
lda #<PREFSBUFFER
sta mliparam+3
lda #>PREFSBUFFER
sta mliparam+4
jsr OpenFile
bcs +
ldy #<PREFSVER
sty mliparam+2
ldy #>PREFSVER
sty mliparam+3
ldy #<PREFSWRITELEN
sty mliparam+4
ldy #>PREFSWRITELEN
sty mliparam+5
jsr WriteFile
jsr CloseFile
+ rts
;-------------------------------
; ValidatePrefs
; Sanity-check preferences and reset to
; default values for any variables that
; are out of range.
; If the first value (PREFSVER) is
; not recognized, all other values are
; reset to defaults.
;
; in: none
; out: C set if any prefs were changed
; C clear if all prefs were valid
; A,X clobbered
;-------------------------------
ValidatePrefs
ldx #$00
lda PREFSVER
cmp #CURRENTVER
beq @checkslot
lda #CURRENTVER
sta PREFSVER
lda #$FF
sta SLOT
sta DRIVE
inx
@checkslot
lda SLOT
sec
sbc #$30
beq @badslot
cmp #$08
bcc @checkdrive
@badslot
lda #DEFSLOT
sta SLOT
inx
@checkdrive
lda DRIVE
sec
sbc #$30
beq @baddrive
cmp #$03
bcc @checks6d1
@baddrive
lda #DEFDRIVE
sta DRIVE
inx
@checks6d1
lda SLOT
cmp #$36
bne @done
lda DRIVE
cmp #$31
bne @done
lda #$32
sta DRIVE
inx
@done cpx #$01 ; set carry if anything changed
rts

79
src/prefs.load.a Normal file
View File

@ -0,0 +1,79 @@
CURRENTVER = $30 ; ASCII "0"
DEFSLOT = $36 ; ASCII "6"
DEFDRIVE = $32 ; ASCII "2"
;-------------------------------
; LoadPrefs
; load preferences from file
;
; in: ProDOS must be in memory
;-------------------------------
!macro LoadPrefs {
lda #<PREFSFILE
sta mliparam+1
lda #>PREFSFILE
sta mliparam+2
lda #<PREFSBUFFER
sta mliparam+3
lda #>PREFSBUFFER
sta mliparam+4
jsr OpenFile
bcs +
ldy #<PREFSVER
sty mliparam+2
ldy #>PREFSVER
sty mliparam+3
ldy #<PREFSREADLEN
sty mliparam+4
ldy #>PREFSREADLEN
sty mliparam+5
jsr ReadFile
jsr CloseFile ; always close whether read worked or not
;
; Sanity-check preferences and reset to
; default values for any variables that
; are out of range.
; If the first value (PREFSVER) is
; not recognized, all other values are
; reset to defaults.
;
+
lda PREFSVER
cmp #CURRENTVER
beq +
lda #CURRENTVER
sta PREFSVER
lda #$FF
sta SLOT
sta DRIVE
+
lda SLOT
sec
sbc #$30
beq @badslot
cmp #$08
bcc @checkdrive
@badslot
lda #DEFSLOT
sta SLOT
@checkdrive
lda DRIVE
sec
sbc #$30
beq @baddrive
cmp #$03
bcc @checks6d1
@baddrive
lda #DEFDRIVE
sta DRIVE
@checks6d1
lda SLOT
cmp #$36
bne +
lda DRIVE
cmp #$31
bne +
lda #$32
sta DRIVE
+
}

41
src/prefs.save.a Normal file
View File

@ -0,0 +1,41 @@
;-------------------------------
; SavePrefs
; save preferences to file
;
; in: ProDOS must be in memory
;-------------------------------
!macro SavePrefs {
lda gChangedPrefs
bne +
lda #<PREFSFILE
sta mliparam+1
lda #>PREFSFILE
sta mliparam+2
jsr DeleteFile ; don't care if this fails
lda #FULL_ACCESS
sta mliparam+3
lda #$04 ; text file type
sta mliparam+4
lda #$00
sta mliparam+5 ; no aux file type
sta mliparam+6
jsr CreateFile
bcs +
lda #<PREFSBUFFER
sta mliparam+3
lda #>PREFSBUFFER
sta mliparam+4
jsr OpenFile
bcs +
ldy #<PREFSVER
sty mliparam+2
ldy #>PREFSVER
sty mliparam+3
ldy #<PREFSWRITELEN
sty mliparam+4
ldy #>PREFSWRITELEN
sty mliparam+5
jsr WriteFile
jsr CloseFile
+
}

View File

@ -2,7 +2,11 @@
*=$2000
!to "../build/PASSPORT.SYSTEM",plain
!source "../build/vars.a" ; no code in here
; no code in these
!source "apidefs.a"
!source "strings/enid.a"
!source "prefs.load.a"
!source "../build/vars.a"
bit $C082 ; read ROM, no write
sta $C00E ; primary character set
@ -46,7 +50,7 @@ OneTimeSetup
jmp CleanExit
+
jsr ScanForRAMAndHardDisks; scan for things that look like RAM disks or hard disks
jsr LoadPrefs ; load preferences (if available)
+LoadPrefs ; load preferences (if available)
jsr ThisSlot ; get information about selected drive and set gTargetType for main menu
lda $FE
sta $F0
@ -68,8 +72,6 @@ OneTimeSetup
bne -
jmp ($FE)
!source "apidefs.a"
!source "strings/enid.a"
!source "initscan.a"
SHOW_PROGRESS_DURING_DECRUNCH = 1 ; activates optional UI code in exodecrunch

View File

@ -25,33 +25,19 @@ cd ..\src
for /f "tokens=2,3 delims=)" %%q in ('find "RELBASE =" ..\build\out.txt') do set _make=%%q
2>..\build\out.txt %ACME% -r ..\build\passport.lst -DRELBASE=$%_make:~-4% -DFORWARD_DECRUNCHING=1 passport.a
for /f "tokens=4,* delims=:(" %%q in ('find "SaveProDOS=" ..\build\out.txt') do echo %%q > ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "kForceLower=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "DiskIIArray=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "HardDiskArray=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "ThisSlot=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "PrintByID=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "WaitForKey=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "CleanExit=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "GetVolumeName=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "OnlineReturn=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "GetVolumeInfo=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "filetype=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "access=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "VolumeName=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "RAMDiskImagePath=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "auxtype=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "blocks=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "PREFSVER=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "PREFSFILE=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "PREFSREADLEN=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "PREFSBUFFER=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "ValidatePrefs=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "SavePrefs=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "mliparam=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "OpenFile=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "ReadFile=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "CloseFile=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "CheckCache=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "SLOT=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
for /f "tokens=4,* delims=:(" %%q in ('find "DRIVE=" ..\build\out.txt') do echo %%q >> ..\build\vars.a
cd ..\build
%EXOMIZER% raw -q -P23 -T4 -b passport.tmp -o passport.pak
cd ..\src