diff --git a/Makefile b/Makefile index 7d74f00..ce1cad6 100644 --- a/Makefile +++ b/Makefile @@ -35,6 +35,7 @@ asm: 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 diff --git a/src/apidefs.a b/src/apidefs.a index b5ff65c..67a0c45 100644 --- a/src/apidefs.a +++ b/src/apidefs.a @@ -30,6 +30,18 @@ ID_DISK_II = %00000000 ; BIT + BPL + BVC -> target is Disk II driv ID_CFFA_VIRTUAL_DISK = %01000000 ; BIT + BPL + BVS -> target is a CFFA3000-managed virtual disk drive ID_FILE_ON_HARD_DISK = %10000000 ; BIT + BMI -> target is a file on a hard disk +; Standard zero-page addresses +TEXTTOP = $22 +VPOS = $25 + +; Standard addresses +PRODOSMLI= $BF00 +TEXT = $FB2F +HOME = $FC58 +WAIT = $FCA8 +PRBYTE = $FDDA +COUT = $FDED + ; Zero-page addresses we use for variables nibsrcindex = $EC ; byte nibdestindex = $ED ; byte @@ -63,6 +75,14 @@ BASEPAGE = $10 ; high byte of $1000-byte buffer that ; Special Delivery tracer assumes this ; is $10, so don't change it! +; Universal RWTS-specific addresses +UNIV_A1 = $B956 ; must LSR before setting +UNIV_A2 = $B95F +UNIV_A3 = $B968 +UNIV_D1 = $B8E7 +UNIV_D2 = $B8F1 +UNIV_D3 = $B8FC + ;------------------------------- ; globally-accessible variables ; in fixed position to allow diff --git a/src/mli.a b/src/mli.a index 8f1d739..1defffd 100755 --- a/src/mli.a +++ b/src/mli.a @@ -26,9 +26,6 @@ PC_CLOSE = $01 PC_SETMARK = $02 PC_SETEOF = $02 -; MLI addresses -PRODOSMLI = $BF00 ; [callable] MLI entry point - ; MLI constants FULL_ACCESS = $C3 diff --git a/src/passport.a b/src/passport.a index 120fc62..c0d5f98 100755 --- a/src/passport.a +++ b/src/passport.a @@ -8,7 +8,7 @@ ;------------------------------- ; Passport ; a 4am hack -; (c) 2016-2020 by 4am +; (c) 2016-2021 by 4am ; ; Permission is hereby granted, free of charge, to any ; person obtaining a copy of this software and associated @@ -39,30 +39,7 @@ VERBOSE = $00 ; set to $01 to display API label addresses !to "../build/PASSPORT.TMP",plain -;------------------------------- -; Addresses we read/call -TEXTTOP = $22 -VPOS = $25 -MLI = $BF00 -REBOOT = $FAA6 -TEXT = $FB2F -MACHINEID = $FBB3 -HOME = $FC58 -WAIT = $FCA8 -PRBYTE = $FDDA -COUT = $FDED -PR0 = $FE89 -IN0 = $FE93 - -;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 - -!source "apidefs.a" + !source "apidefs.a" ; no code in here FirstMover jmp ResetVector @@ -123,14 +100,6 @@ ResetVector ldx #$FF txs lda $C0E8 - jsr PR0 - jsr IN0 - sta $C000 - sta $C002 - sta $C004 - sta $C00C - sta $C00E - jsr ThisSlot jsr CleanupFiles ; RAM/HD files might be left open after Ctrl-Reset ; /!\ execution falls through here MainMenu @@ -584,7 +553,8 @@ TheEnd ; Cleans up open files (if any) ; ; in: ProDOS is NOT in memory -; out: all registers and flags clobbered +; out: ProDOS is NOT in memory +; all registers and flags clobbered ;------------------------------- CleanupFiles lda gHardDiskRef @@ -593,7 +563,7 @@ CleanupFiles jsr SwapProDOS ; ProDOS out -> in jsr DeleteFileOnRAMDisk jsr CloseFileOnHardDisk - jsr SwapProDOS ; ProDOS out -> in + jsr SwapProDOS ; ProDOS in -> out + rts HandleRedoWithIgnore @@ -639,7 +609,7 @@ CleanExit lda gChangedPrefs bne + jsr SavePrefs -+ jsr MLI ; does not return ++ jsr PRODOSMLI ; does not return !byte $65 !word + + !byte $04 @@ -908,4 +878,5 @@ LastMover !warn "PrintByID=",PrintByID !warn "DiskIIArray=",DiskIIArray !warn "HardDiskArray=",HardDiskArray + !warn "ThisSlot=",ThisSlot } diff --git a/src/wrapper.a b/src/wrapper.a index a9a5c0d..0cf17d5 100644 --- a/src/wrapper.a +++ b/src/wrapper.a @@ -4,6 +4,16 @@ !source "../build/vars.a" + bit $C082 + sta $C00E + sta $C00C + sta $C000 + sta $C002 + jsr $FB2F + jsr $FC58 + jsr $FE84 + jsr $FE93 + jsr $FE89 lda $BF98 ; ProDOS MachineID and #$20 ; at least 64K? bne OneTimeSetup @@ -15,8 +25,6 @@ quit !byte 4 OneTimeSetup jsr $FE89 ; PR#0 jsr $FE93 ; IN#0 - jsr $FB2F ; TEXT - jsr $FC58 ; HOME jsr decrunch ; decompress main Passport code sty $FE ;;zp_dest_lo = low byte of Passport entry point ldy #0 ; save a copy of ProDOS system global page @@ -40,6 +48,7 @@ OneTimeSetup + jsr ScanForRAMAndHardDisks; scan for things that look like RAM disks or hard disks jsr LoadPrefs ; load preferences (if available) + jsr ThisSlot lda $FE sta $03F2 lda $FF diff --git a/winmake.bat b/winmake.bat index 5a4a581..a00132f 100644 --- a/winmake.bat +++ b/winmake.bat @@ -27,6 +27,7 @@ for /f "tokens=4,* delims=:(" %%q in ('find "SaveProDOS=" ..\build\out.txt') do 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