shave some bytes

This commit is contained in:
4am 2021-07-11 00:51:32 -04:00
parent e505ed9206
commit 857b9c243a
13 changed files with 355 additions and 354 deletions

View File

@ -1,3 +1,4 @@
; /!\ execution falls through from TraceDOS33c
;------------------------------- ;-------------------------------
; ADStyle ; ADStyle
; Caller has determined that the RWTS in memory ; Caller has determined that the RWTS in memory
@ -291,4 +292,4 @@ _b4bbexit
lda #kSectorSwitchToBuiltinRWTS lda #kSectorSwitchToBuiltinRWTS
sta T02S0F sta T02S0F
+ +
jmp ReadWithRWTS ; /!\ execution falls through here to ReadWithRWTS

View File

@ -1,3 +1,4 @@
; /!\ execution falls though from ADStyle
;------------------------------- ;-------------------------------
; ReadWithRWTS ; ReadWithRWTS
; This is the main loop. The caller has put an RWTS ; This is the main loop. The caller has put an RWTS

View File

@ -4,6 +4,48 @@ HardDirName_e
HardDiskName !raw "/IMG0000.DSK" HardDiskName !raw "/IMG0000.DSK"
HardDiskName_e HardDiskName_e
;-------------------------------
; CloseFileOnHardDisk
; close the previously open file on a hard disk, if any
;
; always safe to call (gracefully returns if no file is open)
; does not return any error status because no one cares
;
; in: ProDOS is in memory
; out: all registers and flags clobbered
; ProDOS is in memory
;-------------------------------
!macro CloseFileOnHardDisk {
lda gHardDiskRef
beq +
jsr CloseFile
lda #0
sta gHardDiskRef
+
}
;-------------------------------
; PrintHardDiskImagePath
; print full path of file on hard disk
;
; in: @HardDiskImagePath is populated and has non-zero length
; out: all registers and flags clobbered
;-------------------------------
!macro PrintHardDiskImagePath {
lda HardDiskImagePath
sta @volumelen
ldx #0
- lda HardDiskImagePath+1, x
ora #$80
jsr PrintA
inx
@volumelen=*+1
cpx #$FD ; SMC
bcc -
lda #$8D
jsr PrintA
}
;------------------------------- ;-------------------------------
; CreateFileOnHardDisk ; CreateFileOnHardDisk
; create a new autonumbered image file on the user's selected target, ; create a new autonumbered image file on the user's selected target,
@ -95,46 +137,5 @@ CreateFileOnHardDisk
jsr Create140KFile jsr Create140KFile
bcs + bcs +
sta gHardDiskRef sta gHardDiskRef
+ jmp SwapProDOS ; ProDOS in -> out (preserves flags)
;-------------------------------
; CloseFileOnHardDisk
; close the previously open file on a hard disk, if any
;
; always safe to call (gracefully returns if no file is open)
; does not return any error status because no one cares
;
; in: ProDOS is in memory
; out: all registers and flags clobbered
; ProDOS is in memory
;-------------------------------
!macro CloseFileOnHardDisk {
lda gHardDiskRef
beq +
jsr CloseFile
lda #0
sta gHardDiskRef
+ +
} ; /!\ execution falls through to SwapProDOS
;-------------------------------
; PrintHardDiskImagePath
; print full path of file on hard disk
;
; in: @HardDiskImagePath is populated and has non-zero length
; out: all registers and flags clobbered
;-------------------------------
!macro PrintHardDiskImagePath {
lda HardDiskImagePath
sta @volumelen
ldx #0
- lda HardDiskImagePath+1, x
ora #$80
jsr PrintA
inx
@volumelen=*+1
cpx #$FD ; SMC
bcc -
lda #$8D
jsr PrintA
}

View File

@ -30,5 +30,5 @@ Trace
++ pla ++ pla
jsr PrintByID ; unknown disk controller jsr PrintByID ; unknown disk controller
!byte s_canttrace !byte s_canttrace
jmp UseUniversal ; /!\ execution falls through here to UseUniversal
} }

View File

@ -388,5 +388,5 @@ TraceDOS33c ; 2nd-level trace callback is here
; ;
; good to go ; good to go
; ;
jmp ADStyle ; use this RWTS to read the disk ; /!\ execution falls through to ADStyle
} }

View File

@ -20,7 +20,7 @@
; B200..BFFF - clobbered by DOS boot tracer (RDOS is B200+, DOS 3.x is B600+) ; B200..BFFF - clobbered by DOS boot tracer (RDOS is B200+, DOS 3.x is B600+)
;------------------------------- ;-------------------------------
; /!\ execution falls through from CreateFileOnHardDisk
;------------------------------- ;-------------------------------
; SwapProDOS ; SwapProDOS
; saves/restores memory used by ProDOS ($BF00..$BFFF) ; saves/restores memory used by ProDOS ($BF00..$BFFF)
@ -96,42 +96,6 @@ CopyMemory
bne @source bne @source
rts rts
;-------------------------------
; ClearTSBuffer
; clear the $1000 byte memory buffer
; used to store the current track's data
; in: none
; out: Z = 1
; X preserved
; Y = 0
; all other flags and registers clobbered
;-------------------------------
ClearTSBuffer
lda #BASEPAGE
ldx #$00
ldy #$10
; /!\ execution falls through here
;-------------------------------
; ClearMemory
; in: A = source address (high)
; X = value to set
; Y = number of pages
; out: Z = 1
; X preserved
; Y = 0
; all other flags and registers clobbered
;-------------------------------
ClearMemory
sta @dest+2
@dest stx $FF00
inc @dest+1
bne @dest
inc @dest+2
dey
bne @dest
rts
;------------------------------- ;-------------------------------
; ReorderBuffer - convert data ; ReorderBuffer - convert data
; buffer between ProDOS and ; buffer between ProDOS and

36
src/memory.clear.a Normal file
View File

@ -0,0 +1,36 @@
; /!\ execution falls through from ChangeTrack
;-------------------------------
; ClearTSBuffer
; clear the $1000 byte memory buffer
; used to store the current track's data
; in: none
; out: Z = 1
; X preserved
; Y = 0
; all other flags and registers clobbered
;-------------------------------
ClearTSBuffer
lda #BASEPAGE
ldx #$00
ldy #$10
; /!\ execution falls through here
;-------------------------------
; ClearMemory
; in: A = source address (high)
; X = value to set
; Y = number of pages
; out: Z = 1
; X preserved
; Y = 0
; all other flags and registers clobbered
;-------------------------------
ClearMemory
sta @dest+2
@dest stx $FF00
inc @dest+1
bne @dest
inc @dest+2
dey
bne @dest
rts

View File

@ -46,11 +46,6 @@ Relocatable
NonRelocatable NonRelocatable
!source "apidefs.a" !source "apidefs.a"
!source "strings/en.a" !source "strings/en.a"
!source "id/trace.a"
!source "id/trace33.a"
!source "id/trace32.a"
!source "id/trace8b3.a"
!source "id/trace33p.a"
!source "id/dos33.a" !source "id/dos33.a"
!source "id/dos32.a" !source "id/dos32.a"
!source "id/dos32lo.a" !source "id/dos32lo.a"
@ -81,27 +76,33 @@ NonRelocatable
!source "id/holle.a" !source "id/holle.a"
!source "id/phoenix.a" !source "id/phoenix.a"
!source "id/555.a" !source "id/555.a"
!source "id/trace32.a"
!source "id/trace8b3.a"
!source "id/trace33p.a"
!source "id/trace.a" ; \__ execution falls through
!source "universalstyle.a" ; /
!source "id/trace33.a" ; \__ execution falls through
!source "adstyle.a" ; /
!source "crackme.a" ; /
!source "id/inspect0.a" !source "id/inspect0.a"
!source "print.a" !source "print.a"
!source "compare.a" !source "compare.a"
!source "modify.a" !source "modify.a"
!source "memory.a"
!source "sectormap.a" !source "sectormap.a"
!source "write.a" !source "write.a"
!source "mli.a" !source "mli.a"
!source "ramdisk.a" !source "ramdisk.a"
!source "harddisk.a" !source "harddisk.a" ; \__ execution falls through
!source "memory.a" ; /
!source "slots.a" !source "slots.a"
!source "prefs.a" !source "prefs.a"
!source "prefs.save.a" !source "prefs.save.a"
!source "keys.a" !source "keys.a"
!source "cffa.a" !source "cffa.a"
!source "progress.a" !source "progress.a"
!source "rwts.a" !source "rwts.a" ; \__ execution falls through
!source "memory.clear.a" ; /
!source "standarddelivery.a" !source "standarddelivery.a"
!source "adstyle.a"
!source "universalstyle.a"
!source "crackme.a"
MainMenu MainMenu
jsr Cleanup ; RAM/HD files might be left open after Ctrl-Reset jsr Cleanup ; RAM/HD files might be left open after Ctrl-Reset

View File

@ -142,7 +142,7 @@ PrintByID
PrintByte PrintByte
jsr SaveAXY jsr SaveAXY
jsr PRBYTE jsr PRBYTE
jmp LoadAXY bcc LoadAXY ; always branches
;------------------------------- ;-------------------------------
; PrintA ; PrintA
@ -158,18 +158,16 @@ PrintA
jsr SaveAXY jsr SaveAXY
jsr COUT jsr COUT
; /!\ execution falls through here ; /!\ execution falls through here
LoadAXY LoadAXY
lda tmpa lda tmpa
ldx tmpx ldx tmpx
ldy tmpy ldy tmpy
clv ; /!\ execution falls through here
rts
SaveAXY SaveAXY
sta tmpa sta tmpa
stx tmpx stx tmpx
sty tmpy sty tmpy
clv
rts rts
;------------------------------- ;-------------------------------
@ -374,229 +372,3 @@ CheckLogKeys
sta .endline1+2 sta .endline1+2
sta .endline2+2 sta .endline2+2
rts rts
;-------------------------------
; Print Shop style animation
; by Vince `deater` Weaver <vince@deater.net>
; https://github.com/deater/dos33fsprogs/blob/master/graphics/gr/thinking/cracking.s
; SPDX-License-Identifier: MIT
GBASL = $26
GBASH = $27
COL = $E0
CURRENT_BITMAP = $E1
BITMAP_PTR = $E2
XSAVE = $E3
SAVED_YY = $E3
YSAVE = $E4
SAVED_XX = $E4
ADJUSTED_YY = $E5
GBASCALC = $F847 ; take Y-coord/2 in A, put address in GBASL/H ( A trashed, C clear)
SETGR = $FB40 ; Init graphics, clear screen, A is $D0 after
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
thinking:
jsr SETGR ; set lo-res 40x40 mode
; A=$D0 afterward
lda #0
sta COL ; consistent starting color
; not technically needed
;=============================
;=============================
; print thinking frame
;=============================
;=============================
print_thinking_frame:
ldx #0 ; reset YY to 0
stx BITMAP_PTR ; also reset bitmap pointer to 0
yloop:
txa ; load YY
jsr GBASCALC ; take Y-coord/2 in A, put address in GBASL/H
;=======================
ldy #0 ; reset XX to 0
xloop:
; this is only jumped to every 8th XX
inc_pointer:
inc BITMAP_PTR
; load current bitmap ptr into CURRENT_BITMAP
; is a don't care if not between 7 and 14
stx XSAVE
ldx BITMAP_PTR
lda thinking_data-1-30,X
sta CURRENT_BITMAP
ldx XSAVE
thinking_xloop:
; this is called every XX
stx XSAVE ; save X (YY)
sty YSAVE ; save Y (XX)
; if YY <6 or YY > 13 then don't draw bitmap
cpx #6
bcc do_plot
cpx #13
bcs do_plot
handle_bitmap:
ror CURRENT_BITMAP ; rotate next bit from bitmap in
bcs skip_plot ; skip plotting (assume BG is black)
do_plot:
lda COL ; set starting color
and #$7
tay
lda color_lookup,Y ; lookup color in table
ldy YSAVE ; restore Y (XX)
sta (GBASL),Y
skip_plot:
;==================================
; adjust colors to make boxes
; 0000000000000000
; 0111111111111110
; 0122222222222210
; XX is in Y (currently also in YSAVE)
; YY is in X (currently also in XSAVE)
ldx SAVED_YY ; YY
ldy SAVED_XX ; XX
; if YY is < 10 do following, otherwise reverse
txa ; put YY in A (saved bytes later)
cmp #10
bcc counting_up
counting_down:
; now doing the reverse
lda #19
sec
sbc SAVED_YY
; YY (in A) now going from 10..0
counting_up:
sta ADJUSTED_YY
detect_adjust_dir:
; if YY is < 10 do following, otherwise reverse
; if XX is < 10, check for inc
; if XX is > 30 check for dex
; else, no adjust
cpy #10 ; is XX < 10
bcc color_adjust_up ; then potentially adjust UP
cpy #30 ; is XX > 30
bcs color_adjust_down ; then potentially adjust down
bcc color_adjust_none ; else, do nothing
color_adjust_up:
; if XX < YY then inc color
; if XX >= YY then do nothing
cpy ADJUSTED_YY ; compare XX to YY
bcs col_same ; bge do nothing
col_inc:
inc COL
col_same:
jmp color_adjust_none
color_adjust_down:
lda #39
sec
sbc ADJUSTED_YY
sta ADJUSTED_YY
cpy ADJUSTED_YY ; compare XX to YY
; if XX > 39-YY then inc color
bcc col_down_same
col_dec:
dec COL
col_down_same:
; fallthrough
color_adjust_none:
;============================
; inc XX for next pixel
iny ; inc XX
cpy #40 ; if we hit 40, done line
beq done_done
tya ; if we are multiple of 8
and #$7 ; then need to increment bitmap ptr
beq inc_pointer
bne thinking_xloop
done_done:
;=============================================
; adjust color for next line
inc COL
;=======================
; move to next line
inx
cpx #20
bne yloop
;============================================
; done frame, increment color for next round
;============================================
inc COL
rts
;0 1 2 3 3
;01234567|89012345|67890123|45678901|23456789
; ** ***| *** | ** * |* * * |* ***
; * * |* * * |* * *| * ** |* * *
; * * |* * * |* * * | * ** |* *
; * ***| ***** |* ** | * * * |* *
; * * *| * * |* * * | * * *|* * **
; * * |* * * |* * *| * * *|* * *
; ** * |* * * | ** * |* * * |* ****
; 7*5 bytes = 35 bytes
thinking_data:
!byte $EC,$38,$16,$15,$39
!byte $22,$45,$91,$34,$45
!byte $22,$45,$51,$34,$05
!byte $E2,$7C,$31,$54,$05
!byte $A2,$44,$51,$94,$65
!byte $22,$45,$91,$94,$45
!byte $2C,$45,$16,$15,$79
color_lookup:
; magenta, pink, orange, yellow, lgreen, aqua, mblue, lblue
!byte $33,$BB,$99,$DD,$CC,$EE,$66,$77

View File

@ -37,15 +37,240 @@ ResetProgress
lda gMode lda gMode
ror ror
bcc + bcc +
jmp thinking bcs thinking ; always branches
IncProgress IncProgress
lda gMode lda gMode
ror ror
bcs ++ bcs print_thinking_frame
lda #$20 ; display minimal progress indicator lda #$20 ; display minimal progress indicator
progressind progressind
sta $FFFF ; SMC sta $FFFF ; SMC
inc progressind+1 inc progressind+1
+ rts + rts
++ jmp print_thinking_frame
;-------------------------------
; Print Shop style animation
; by Vince `deater` Weaver <vince@deater.net>
; https://github.com/deater/dos33fsprogs/blob/master/graphics/gr/thinking/cracking.s
; SPDX-License-Identifier: MIT
GBASL = $26
GBASH = $27
COL = $E0
CURRENT_BITMAP = $E1
BITMAP_PTR = $E2
XSAVE = $E3
SAVED_YY = $E3
YSAVE = $E4
SAVED_XX = $E4
ADJUSTED_YY = $E5
GBASCALC = $F847 ; take Y-coord/2 in A, put address in GBASL/H ( A trashed, C clear)
SETGR = $FB40 ; Init graphics, clear screen, A is $D0 after
WAIT = $FCA8 ; delay 1/2(26+27A+5A^2) us
thinking:
jsr SETGR ; set lo-res 40x40 mode
; A=$D0 afterward
lda #0
sta COL ; consistent starting color
; not technically needed
;=============================
;=============================
; print thinking frame
;=============================
;=============================
print_thinking_frame:
ldx #0 ; reset YY to 0
stx BITMAP_PTR ; also reset bitmap pointer to 0
yloop:
txa ; load YY
jsr GBASCALC ; take Y-coord/2 in A, put address in GBASL/H
;=======================
ldy #0 ; reset XX to 0
xloop:
; this is only jumped to every 8th XX
inc_pointer:
inc BITMAP_PTR
; load current bitmap ptr into CURRENT_BITMAP
; is a don't care if not between 7 and 14
stx XSAVE
ldx BITMAP_PTR
lda thinking_data-1-30,X
sta CURRENT_BITMAP
ldx XSAVE
thinking_xloop:
; this is called every XX
stx XSAVE ; save X (YY)
sty YSAVE ; save Y (XX)
; if YY <6 or YY > 13 then don't draw bitmap
cpx #6
bcc do_plot
cpx #13
bcs do_plot
handle_bitmap:
ror CURRENT_BITMAP ; rotate next bit from bitmap in
bcs skip_plot ; skip plotting (assume BG is black)
do_plot:
lda COL ; set starting color
and #$7
tay
lda color_lookup,Y ; lookup color in table
ldy YSAVE ; restore Y (XX)
sta (GBASL),Y
skip_plot:
;==================================
; adjust colors to make boxes
; 0000000000000000
; 0111111111111110
; 0122222222222210
; XX is in Y (currently also in YSAVE)
; YY is in X (currently also in XSAVE)
ldx SAVED_YY ; YY
ldy SAVED_XX ; XX
; if YY is < 10 do following, otherwise reverse
txa ; put YY in A (saved bytes later)
cmp #10
bcc counting_up
counting_down:
; now doing the reverse
lda #19
sec
sbc SAVED_YY
; YY (in A) now going from 10..0
counting_up:
sta ADJUSTED_YY
detect_adjust_dir:
; if YY is < 10 do following, otherwise reverse
; if XX is < 10, check for inc
; if XX is > 30 check for dex
; else, no adjust
cpy #10 ; is XX < 10
bcc color_adjust_up ; then potentially adjust UP
cpy #30 ; is XX > 30
bcs color_adjust_down ; then potentially adjust down
bcc color_adjust_none ; else, do nothing
color_adjust_up:
; if XX < YY then inc color
; if XX >= YY then do nothing
cpy ADJUSTED_YY ; compare XX to YY
bcs col_same ; bge do nothing
col_inc:
inc COL
col_same:
bne color_adjust_none ; always branches
color_adjust_down:
lda #39
sec
sbc ADJUSTED_YY
sta ADJUSTED_YY
cpy ADJUSTED_YY ; compare XX to YY
; if XX > 39-YY then inc color
bcc col_down_same
col_dec:
dec COL
col_down_same:
; fallthrough
color_adjust_none:
;============================
; inc XX for next pixel
iny ; inc XX
cpy #40 ; if we hit 40, done line
beq done_done
tya ; if we are multiple of 8
and #$7 ; then need to increment bitmap ptr
beq inc_pointer
bne thinking_xloop
done_done:
;=============================================
; adjust color for next line
inc COL
;=======================
; move to next line
inx
cpx #20
bne yloop
;============================================
; done frame, increment color for next round
;============================================
inc COL
rts
;0 1 2 3 3
;01234567|89012345|67890123|45678901|23456789
; ** ***| *** | ** * |* * * |* ***
; * * |* * * |* * *| * ** |* * *
; * * |* * * |* * * | * ** |* *
; * ***| ***** |* ** | * * * |* *
; * * *| * * |* * * | * * *|* * **
; * * |* * * |* * *| * * *|* * *
; ** * |* * * | ** * |* * * |* ****
; 7*5 bytes = 35 bytes
thinking_data:
!byte $EC,$38,$16,$15,$39
!byte $22,$45,$91,$34,$45
!byte $22,$45,$51,$34,$05
!byte $E2,$7C,$31,$54,$05
!byte $A2,$44,$51,$94,$65
!byte $22,$45,$91,$94,$45
!byte $2C,$45,$16,$15,$79
color_lookup:
; magenta, pink, orange, yellow, lgreen, aqua, mblue, lblue
!byte $33,$BB,$99,$DD,$CC,$EE,$66,$77

View File

@ -135,32 +135,6 @@ IgnoreAddressChecksum
stx $B98A stx $B98A
rts rts
;-------------------------------
; ChangeTrack
; in: A = new track
;-------------------------------
ChangeTrack
sta @new+1
jsr WriteTrack
@new lda #$d1 ; modified at runtime
; note: execution falls through here
ChangeTrackNW ; "N"o "W"rite
sta gTrack
jmp ClearTSBuffer
;-------------------------------
; ChangeSector
; in: A = new sector
;-------------------------------
ChangeSector
sta gSector
clc
adc #BASEPAGE
sta gAddress+1
rts
;------------------------------- ;-------------------------------
; WriteTrack ; WriteTrack
; in: none ; in: none
@ -232,3 +206,28 @@ FatalWriteError
jsr PrintByID jsr PrintByID
+ !byte $FD ; SMC + !byte $FD ; SMC
jmp TheEnd jmp TheEnd
;-------------------------------
; ChangeSector
; in: A = new sector
;-------------------------------
ChangeSector
sta gSector
clc
adc #BASEPAGE
sta gAddress+1
rts
;-------------------------------
; ChangeTrack
; in: A = new track
;-------------------------------
ChangeTrack
sta @new+1
jsr WriteTrack
@new lda #$d1 ; modified at runtime
; /!\ execution falls through here
ChangeTrackNW ; "N"o "W"rite
sta gTrack
; /!\ execution falls through here to ClearTSBuffer

View File

@ -1,3 +1,4 @@
; /!\ execution falls through here from Trace
;------------------------------- ;-------------------------------
; UseUniversal ; UseUniversal
; Caller has decided to use the built-in RWTS to read ; Caller has decided to use the built-in RWTS to read

View File

@ -63,7 +63,7 @@ SkipTrack
bpl @print bpl @print
bvc @print bvc @print
; if we're in 'crack' mode, restart the scan to find the protection code ; if we're in 'crack' mode, restart the scan to find the protection code
jmp SetupF7F6SecondRound bvs SetupF7F6SecondRound ; always branches
@print sta + @print sta +
jsr PrintByID jsr PrintByID