Commit a30a2489 authored by Robert Sprowson's avatar Robert Sprowson
Browse files

Refinements to disc based targets especially

Previous attempt to disable Sprites11 support for 3.10 and 3.50 hadn't spotted it was reenabled in the common options, also the Sprites11 switch was also tied up in Wimp$IconTheme support.
Title bars would flicker when picked up when using a tool sprite set with no 'p' pushed equivalents on RISC OS 4.0x due to screen cache.
Makefile now installs a default set of tools & sprites when target is ThemeDefs.
CLI limit reduced to 256 pre Ursula to save RAM.

Options/!Common:
  Promote Sprites11 switch into !Default
  Remove fixrmatools
Options/!Default:
  Sprites11 true by default
  LongCommandLines true by default, false on targets pre Ursula
  Remove ServiceCallTable (harmless to have it in all cases)
NewSWIs.s:
  Enable Wimp_Extend 13 all the time
Wimp01.s:
  Reduce RMA use by vital 1.5k for non long command line case
  Change sense of Sprites11 switch to adopt all its previous functionality, but not look for '11' suffix when the switch is false
  Adopt ServiceCallTable switch permanently
Wimp02.s:
  Comments ammended
Wimp07.s:
  Range of ADR
Wimp10.s:
  Change sense of Sprites11 switch to adopt all its previous functionality, but not look for '11' suffix when the switch is false
  Adopt :LNOT: fixrmatools switch permanently
  Supress title bar sprite plotting when none of the sprites exist

Version 5.25. Tagged as 'Wimp-5_25'
parent 74c3f656
......@@ -48,6 +48,10 @@ CUSTOMEXP = custom
install:
${MKDIR} ${INSTDIR}.${USERIF}
| At least give the equivalent ROM ones for that UserIF
${CP} LocalRes:${USERIF}.Sprites ${INSTDIR}.${USERIF}.Sprites ${CPFLAGS}
${CP} LocalRes:${USERIF}.Tools ${INSTDIR}.${USERIF}.Tools ${CPFLAGS}
| Then give the disc ones in preference if they exist
IfThere LocalRes:${USERIF}.DiscSprites.Sprites Then ${CP} LocalRes:${USERIF}.DiscSprites.Sprites ${INSTDIR}.${USERIF}.Sprites ${CPFLAGS}
IfThere LocalRes:${USERIF}.DiscSprites.Sprites11 Then ${CP} LocalRes:${USERIF}.DiscSprites.Sprites11 ${INSTDIR}.${USERIF}.Sprites11 ${CPFLAGS}
IfThere LocalRes:${USERIF}.DiscSprites.Sprites22 Then ${CP} LocalRes:${USERIF}.DiscSprites.Sprites22 ${INSTDIR}.${USERIF}.Sprites22 ${CPFLAGS}
......
......@@ -46,7 +46,6 @@
Option DoubleIcon, false ; allow double-clicking on icon bar
Option fastborders, :LNOT:TrueIcon3 ; use PutSpriteAtUserCoords for border plotting
Option colourmoreborder, false :LAND: TrueIcon3 ; colour all tools except scroll wells
Option fixrmatools, false
Option slabinout, false ; slab in selected 'slab out' icons.
Option fixslabalignment, true ; Fix redraw of non-aligned 3D icons
Option tilewithspriteops, false
......@@ -81,7 +80,6 @@
Option DotsAsWordSeparators, true :LAND: RO4 ; when moving the caret on writable icons treat '.' the same as space
Option FullIconClipping, false :LAND: RO4 ; always clip the whole of icons to their bounding boxes rather than letting sprites overlap
Option Sprites11, true ; new sprite selection scheme that allows use of Sprites11 files
Option SpacesInFilenames, true ; when hard space is allowed but space is not, convert
END
......
......@@ -23,7 +23,7 @@
Option Stork, true ; try saving power by calling Portable_Idle
Option Medusa, true ; support Medusa Memory management
Option ServiceCallTable, true ; Add Ursula kernel Service Call table
Option LongCommandLines, true ; Kernel allows paths > 256
Option international_help, true ; Kernel looks up help in the Messages file
Option BounceClose, false ; debounce close icon
Option windowsprite, true ; use tile_1 for colour 1 work areas
......@@ -84,6 +84,7 @@
Option ClickSubmenus, true ; submenus opened by clicking on their parent items (configurable)
Option RO4, false ; RISC OS 4 extensions
Option Sprites11, true ; sprite selection scheme that allows use of Sprites11 files
Option RegisterMessages, false
Option RegisterTools2D, false
......
......@@ -18,7 +18,6 @@
module_postfix SETS " 32-bit"
Option ServiceCallTable, true ; Add Ursula kernel Service Call table
Option ShrinkableAreas, true ; Support Shrinkable Dynamic Areas
Option TrueIcon2, true :LAND: TrueIcon1 ; true colour support, phase 2
......
......@@ -32,6 +32,7 @@ module_postfix SETS " RISC OS 3.1"
Option TrueIcon2, true :LAND: TrueIcon1 ; true colour support, phase 2
Option TrueIcon3, true :LAND: TrueIcon2 ; true colour support, phase 3 (windows)
Option IconiseButton, true ; Windows given iconise button
Option LongCommandLines, false ; Save some RAM
Option BounceClose, true ; Furniture buttons are release-type
Option ForegroundWindows, true ; Layering of windows within each stack
Option SpritePriority, true ; Allow configurable sprite pool priority
......
......@@ -29,6 +29,7 @@ module_postfix SETS " RISC OS 3.5"
Option TrueIcon2, true :LAND: TrueIcon1 ; true colour support, phase 2
Option TrueIcon3, true :LAND: TrueIcon2 ; true colour support, phase 3 (windows)
Option IconiseButton, true ; Windows given iconise button
Option LongCommandLines, false ; Save some RAM
Option BounceClose, true ; Furniture buttons are release-type
Option ForegroundWindows, true ; Layering of windows within each stack
Option SpritePriority, true ; Allow configurable sprite pool priority
......
......@@ -23,6 +23,7 @@ module_postfix SETS " RISC OS 3.6"
Option TrueIcon2, true :LAND: TrueIcon1 ; true colour support, phase 2
Option TrueIcon3, true :LAND: TrueIcon2 ; true colour support, phase 3 (windows)
Option IconiseButton, true ; Windows given iconise button
Option LongCommandLines, false ; Save some RAM
Option BounceClose, true ; Furniture buttons are release-type
Option ForegroundWindows, true ; Layering of windows within each stack
Option SpritePriority, true ; Allow configurable sprite pool priority
......
......@@ -21,6 +21,7 @@ module_postfix SETS " RISC OS 3.7"
Option TrueIcon2, true :LAND: TrueIcon1 ; true colour support, phase 2
Option TrueIcon3, true :LAND: TrueIcon2 ; true colour support, phase 3 (windows)
Option IconiseButton, true ; Windows given iconise button
Option LongCommandLines, false ; Save some RAM
Option BounceClose, true ; Furniture buttons are release-type
Option ForegroundWindows, true ; Layering of windows within each stack
Option SpritePriority, true ; Allow configurable sprite pool priority
......
......@@ -18,7 +18,6 @@
module_postfix SETS " RISC OS 4.0"
Option ServiceCallTable, true ; Add Ursula kernel Service Call table
Option ChocolateScreen, true ; Clean cached screen after redraw loops
Option ShrinkableAreas, true ; Support Shrinkable Dynamic Areas
Option KernelLocksFreePool, true ; use OS_Memory 10 to lock Free Pool for Wimp_ClaimFreeMemory
......
......@@ -16,7 +16,6 @@
; Wimp options for an Ursula build of the Window Manager
;
Option ServiceCallTable, true ; Add Ursula kernel Service Call table
Option ChocolateScreen, true ; Clean cached screen after redraw loops
Option ShrinkableAreas, true ; Support Shrinkable Dynamic Areas
Option KernelLocksFreePool, true ; use OS_Memory 10 to lock Free Pool for Wimp_ClaimFreeMemory
......
......@@ -11,13 +11,13 @@
GBLS Module_HelpVersion
GBLS Module_ComponentName
GBLS Module_ComponentPath
Module_MajorVersion SETS "5.24"
Module_Version SETA 524
Module_MajorVersion SETS "5.25"
Module_Version SETA 525
Module_MinorVersion SETS ""
Module_Date SETS "03 May 2013"
Module_ApplicationDate SETS "03-May-13"
Module_Date SETS "06 May 2013"
Module_ApplicationDate SETS "06-May-13"
Module_ComponentName SETS "Wimp"
Module_ComponentPath SETS "castle/RiscOS/Sources/Desktop/Wimp"
Module_FullVersion SETS "5.24"
Module_HelpVersion SETS "5.24 (03 May 2013)"
Module_FullVersion SETS "5.25"
Module_HelpVersion SETS "5.25 (06 May 2013)"
END
/* (5.24)
/* (5.25)
*
* This file is automatically maintained by srccommit, do not edit manually.
* Last processed by srccommit version: 1.1.
*
*/
#define Module_MajorVersion_CMHG 5.24
#define Module_MajorVersion_CMHG 5.25
#define Module_MinorVersion_CMHG
#define Module_Date_CMHG 03 May 2013
#define Module_Date_CMHG 06 May 2013
#define Module_MajorVersion "5.24"
#define Module_Version 524
#define Module_MajorVersion "5.25"
#define Module_Version 525
#define Module_MinorVersion ""
#define Module_Date "03 May 2013"
#define Module_Date "06 May 2013"
#define Module_ApplicationDate "03-May-13"
#define Module_ApplicationDate "06-May-13"
#define Module_ComponentName "Wimp"
#define Module_ComponentPath "castle/RiscOS/Sources/Desktop/Wimp"
#define Module_FullVersion "5.24"
#define Module_HelpVersion "5.24 (03 May 2013)"
#define Module_LibraryVersionInfo "5:24"
#define Module_FullVersion "5.25"
#define Module_HelpVersion "5.25 (06 May 2013)"
#define Module_LibraryVersionInfo "5:25"
......@@ -583,10 +583,8 @@ SWIWimp_Extend
TEQ R0,#12
BEQ %FT12
]
[ Sprites11
TEQ R0,#13
BEQ %FT13
]
B ExitWimp
[ ChildWindows
......@@ -654,7 +652,6 @@ SWIWimp_Extend
B ExitWimp
]
[ Sprites11
13 ; Work out for the client what resolution suffix to append to a sprites file
; First available in Wimp 4.85
; Older Wimps don't return error, but can be detected because all registers are preserved
......@@ -712,11 +709,12 @@ loop3 ADD LR, R5, #'0'
MOVHI R6, R6, LSL #1
BNE loop3 ; after rectangular pixels, try next squarer version
[ Sprites11
TEQ R5, #1
MOVEQ R5, #2
MOVEQ R6, #2
BEQ loop3 ; after Sprites11, try Sprites22
]
MOV LR, #0
STRB LR, [R2]
MOV R0, #&4C
......@@ -726,7 +724,6 @@ loop3 ADD LR, R5, #'0'
MOVVC R0, #0
SWIVC XOS_Find
B ExitWimp ; return any error we got from this last one
]
extendjumptable
B getspriteaddr
......
......@@ -871,9 +871,7 @@ temp_text_height # 4 ; 320nk textwidth now gets height
[ slabinout
two_sprite_save # 4 ; save flags for two sprite icons
]
[ :LNOT: fixrmatools
spritecachevalid # 0 ; uses same adr as below
]
auto_menu_flag # 1 ; flag to keep track of auto width
autorepeating # 1
[ TrueIcon3
......@@ -1533,7 +1531,6 @@ maxtaskhandle * :INDEX:@
PollTasks # maxtasks * 4 ; Packed list of tasks with pollwords
errorbuffer # 256 ; used by error handler
taskbuffer # 1024 ; command which starts a task
errordynamic * errorbuffer+4 ; put these after stashed PC
errordynamicsize * ?errorbuffer-4
......@@ -1560,7 +1557,13 @@ memory_claims # 8 ; build a list of mem claims for debuggi
inverselookup # 1024 ; what colour numbers to use when EOR'ing an area
[ LongCommandLines
path_buffer # 1024 ; for building Sprites<x><y> pathnames
taskbuffer # 1024 ; command which starts a task
|
path_buffer # 256 ; for building Sprites<x><y> pathnames
taskbuffer # 256 ; command which starts a task
]
errortitle # 1024 ; for building up 'Error from ...'
errortitend # 0
......@@ -2850,7 +2853,6 @@ greys_16
; tries "<filename>23" if hi-res mono, and/or "<filename>22" if 2x2 OS units
IconSprites_Code
[ Sprites11
Push "R7-R8,LR"
LDR wsptr,[R12]
;
......@@ -2901,19 +2903,11 @@ IconSprites_Code
STR R14,[sp]
MOV R0,sp
MOV R1,R3
|
Push "LR"
LDR wsptr,[R12]
;
MOV R1,R0
MOV R3,R0 ; R3 -> original filename
]
BL getspritefname ; R1 -> <filename><x><y><bpp>
MOV R2,R1 ; R2 -> filename
;
MOV R0,#SpriteReason_MergeSpriteFile
SWI XWimp_SpriteOp
[ Sprites11
BVC %FT03
TEQ R6,#3
......@@ -2925,11 +2919,12 @@ IconSprites_Code
MOVHI R6,R6,LSL#1
BNE %BT02 ; after rectangular pixels, try next squarer version
[ Sprites11
TEQ R5,#1
MOVEQ R5,#2
MOVEQ R6,#2
BEQ %BT02 ; after Sprites11, try Sprites22
]
MOV R2,R3 ; R2 -> original filename
MOV R0,#SpriteReason_MergeSpriteFile
SWI XWimp_SpriteOp
......@@ -2942,12 +2937,6 @@ IconSprites_Code
MOV R3,R8 ; yes, and an error, so try again without the system variable
B %BT01
04
|
MOVVS R2,R3 ; R2 -> original filename
MOVVS R0,#SpriteReason_MergeSpriteFile
SWIVS XWimp_SpriteOp
BVS %FT05
]
[ windowsprite
[ ThreeDPatch
......@@ -2967,25 +2956,15 @@ IconSprites_Code
CLRV ; may cause an error, but ok.
]
05
[ Sprites11
Pull "R7-R8,PC"
|
Pull "PC"
]
[ Sprites11
IconThemeSysVar = "<Wimp$IconTheme>"
IconThemeSysVarLen * . - IconThemeSysVar
ALIGN
]
;............................................................................
; In [ Sprites11
; R0 -> suffix to add to filename
; |
; [romspr_suffix..] = suffix to add to filename
; ]
; In R0 -> suffix to add to filename
; R1 -> sprite filename
; Out R1 -> <filename><suffix>
; R2 -> start of suffix as added to filename
......@@ -3004,9 +2983,6 @@ getspritefname
LDRHIB R14,[R1],#1
BHI %BT02
[ :LNOT: Sprites11
ADR R0,romspr_suffix
]
MOV R1,R2
BL copy0 ; copy from R0 to R1
......@@ -3239,11 +3215,9 @@ SWIWimp_BaseOfSprites
WimpVarPath DCB "WindowManager$Path", 0
WimpDefPath DCB "Resources:$.Resources.Wimp."
DCB 0
[ Sprites11
WimpVarTheme DCB "Wimp$IconTheme", 0
WimpDefTheme DCB UserIF :CC: "."
DCB 0
]
ALIGN
Init
......@@ -3272,7 +3246,6 @@ Init
SWIEQ XOS_SetVarVal
BVS exitinit1
[ Sprites11
; initialise Wimp$IconTheme to the build UserIF if not set by the user
ADR R0, WimpVarTheme
......@@ -3288,7 +3261,6 @@ Init
MOVEQ R3, #0
MOVEQ R4, #VarType_String
SWIEQ XOS_SetVarVal ; Ignore error
]
; claim workspace
......@@ -3916,7 +3888,7 @@ CommandWindow_varsize * . - CommandWindow_var
;;-----------------------------------------------------------------------------
;; Service call handling
;;-----------------------------------------------------------------------------
[ ServiceCallTable
ServiceTable
DCD 0 ; flags word
DCD Service2 - Module_BaseAddr
......@@ -3946,9 +3918,7 @@ ServiceTable
DCD ServiceTable - Module_BaseAddr
Service
MOV R0, R0 ; flag service table to aware kernels
|
Service
]
; Quick reject code for old kernels
[ :LNOT: UseAMBControl
TEQ R1, #Service_Memory
......@@ -4110,70 +4080,50 @@ getromsprites
CMP R0,#-2 ; if R1 = -2, we're stuck!
LDREQ R0,currentmode ; (just give up and use the original)
;
[ :LNOT: Sprites11
MOV R3,#"0"
]
MOV R4,#1
MOV R1,#VduExt_XEigFactor
SWI XOS_ReadModeVariable
[ Sprites11
MOV R5,R4,LSL R2 ; R5 = char 0 - '0'
|
ADD R5,R3,R4,LSL R2 ; R5 = char 0
]
MOV R1,#VduExt_YEigFactor
SWI XOS_ReadModeVariable
[ Sprites11
MOV R6,R4,LSL R2 ; R6 = char 1 - '0'
|
ADD R6,R3,R4,LSL R2 ; R6 = char 1
]
MOV R1,#VduExt_Log2BPP
SWI XOS_ReadModeVariable
[ Sprites11
TEQ R5,#2 ; 2x2 OS unit, 1bpp
TEQEQ R6,#2
TEQEQ R2,#0
MOVEQ R6,#3
[ :LNOT: Sprites11
TEQ R5,#1
TEQNE R6,#1
MOVEQ R5,#2
MOVEQ R6,#2 ; '1y' or 'x1' -> '22'
]
ADD R14,R5,R6,LSL #8
ADD R14,R14,#'0'
ADD R14,R14,#'0':SHL:8
|
TEQ R5,R6
TEQEQ R5,#"1" ; 1 os unit to a pixel mode
MOVEQ R5,#"2"
MOVEQ R6,#"2"
TEQ R5,#"2" ; 2x2 OS unit, 1bpp
TEQEQ R6,#"2"
TEQEQ R2,#0
MOVEQ R6,#"3"
ADD R14,R5,R6,LSL #8
]
ASSERT ((:INDEX:romspr_suffix) :AND: 3) = 0
STR R14,romspr_suffix
;
[ Sprites11
SUB sp,sp,#4
01 ADD R14,R5,R6,LSL #8
ADD R14,R14,#'0'
ADD R14,R14,#'0':SHL:8
STR R14,[sp]
MOV R0,sp
]
ADR R1,spritesfname
BL getspritefname ; R1 -> <filename><x><y><bpp>
; R2 -> terminator
MOV R0,#OSFind_ReadFile
SWI XOS_Find
;
[ Sprites11
BVC %FT04
TEQ R6,#3
......@@ -4185,20 +4135,16 @@ getromsprites
MOVHI R6,R6,LSL#1
BNE %BT01 ; after rectangular pixels, try next squarer version
[ Sprites11
TEQ R5,#1
MOVEQ R5,#2
MOVEQ R6,#2
BEQ %BT01 ; after Sprites11, try Sprites22
]
ADR R1,spritesfname ; R1 -> original filename
MOV R0,#OSFind_ReadFile ; try again!
SWI XOS_Find
04 ADD sp,sp,#4
|
ADRVS R1,spritesfname ; R1 -> original filename
MOVVS R0,#OSFind_ReadFile ; try again!
SWIVS XOS_Find
]
BVS %FT99 ; error!
;
MOV R3,R0 ; save external file handle
......@@ -7356,7 +7302,7 @@ WimpVisualFlags_Code
02 ; subroutine
; r1 = ptr to int returned from OS_ReadArgs
; returns, r0 = the
; returns, r0 = 24 bit RGB value
; EQ if it is valid
Push "lr"
TEQ r1,#0
......
......@@ -8220,7 +8220,7 @@ redrawoutlp_done_tracing
[ TrueIcon3
LDR R14, titlecolour
LDR R0, =&BBBBBB00
LDR R0, =&BBBBBB00 ; 73% grey (colour 2)
TEQ R0, R14
LDREQ R14, truetitlefg
TEQEQ R14, #0 ; unless both colours are standard,
......@@ -8288,7 +8288,7 @@ redrawoutlp_done_tracing
TEQNE R2,#0 ; plot using sprites?
BLNE dofunkytitlebar ; yes, sir-re bob!
ADDEQ R2,handle,#w_title
BLEQ drawicon_system ; take note of if_indirected et.
BLEQ drawicon_system ; take note of if_indirected etc.
[ TrueIcon3 :LAND: :LNOT: colourmoreborder
BL forcetint_off
]
......
......@@ -775,7 +775,7 @@ SWIWimp_StartTask
;
; now stash the parent task on the return stack, and start up the new one
;
ADR R1,taskbuffer
ADRL R1,taskbuffer
01
LDRB R14,[R0],#1
STRB R14,[R1],#1
......@@ -812,7 +812,7 @@ SWIWimp_StartTask
ADRL R14,Module_BaseAddr
BL allocateslot ; updates memorylimit
;
ADR R0,taskbuffer ; copy of *command is in here
ADRL R0,taskbuffer ; copy of *command is in here
LDR R5,taskhandle
LDR R5,[wsptr,R5]
ADRL R14,runthetask ; PC must be set up explicitly
......
......@@ -564,7 +564,6 @@ maketoollist EntryS "R1-R11"
; work out which suffix to apply to sprite names
[ Sprites11
MOV R6,#1
MOV R10,#'0'
......@@ -577,6 +576,12 @@ maketoollist EntryS "R1-R11"
SWI XOS_ReadModeVariable
ADD R6,R10,R6,LSL R2
[ :LNOT: Sprites11
TEQ R5,#'1'
TEQNE R6,#'1'
MOVEQ R5,#'2'
MOVEQ R6,#'2' ; '1y' or 'x1' -> '22'
]
TEQ R6,#'2'
TEQNE R6,#'4'
TEQEQ R5,#'2'
......@@ -590,34 +595,6 @@ maketoollist EntryS "R1-R11"
MOVEQ R5,#'0'
MOVEQ R6,#0 ; '24' -> '0'
MOVNE R6,#'3' ; '22' -> '23'
|
MOV R5,#"2" ; first char is "2"
;
MOV R0,#-1
MOV R1,#VduExt_ModeFlags
SWI XOS_ReadModeVariable ; get the flags for the current mode
TST R2,#Flag_HiResMono
MOVNE R6,#"3" ; if hi-res mono then "23"
BNE %FT05 ; and exit 'cos it has been found
;
MOV R1,#VduExt_XEigFactor
SWI XOS_ReadModeVariable
MOV R3,R2 ; = Xeig
;
MOV R1,#VduExt_YEigFactor
SWI XOS_ReadModeVariable
CMP R2,#1 ; if both Xeig and Yeig <= 1 then use 22 postfix
CMPLS R3,#1
MOVLS R6,#"2"
MOVHI R5,#0
MOVHI R6,#-1
;
MOV R1,#VduExt_Log2BPP
SWI XOS_ReadModeVariable
TEQ R2,#0 ; is it a monochrome mode?
ADDEQS R6,R6,#1
MOVEQ R5,#"0" ; use 23 if was 22, else 0.
]
05
ORR R10,R5,R6,LSL #8 ; combine to make a postfix
;
......@@ -655,9 +632,7 @@ maketoollist EntryS "R1-R11"
07
MOV R0,#0
MOV R1,#0 ; Set tool sizes to 0 == undefined
[ :LNOT: fixrmatools
STRB R1,spritecachevalid
]
BL default_params
ADD R3,R3,R2 ; -> end of list
......@@ -689,10 +664,8 @@ maketoollist EntryS "R1-R11"
STRB R14,[R4,#1]
MOVNE R14,#0
STRNEB R14,[R4,#2] ; attach a suitable postfix
;
[ :LNOT: fixrmatools
; this uses different approach to cut down on 'sprite not found'
[ Sprites11
LDRB R14,spritecachevalid
TEQ R14,#0
......@@ -728,7 +701,7 @@ cachetoolspriteaddress ; [spritename], [thisCBptr], [lengthflags] as for cachesp
SUBS R5,R5,#'0'
SUB R6,R6,#'0'
MOVEQ R5,#2
MOVEQ R6,#8 ; pretend '0' was '28' so we try '24'next
MOVEQ R6,#8 ; pretend '0' was '28' so we try '24' next
TEQ R6,#3
MOVEQ R6,#4 ; pretend '23' was '24' so we try '22' next
......@@ -752,71 +725,6 @@ cachetoolspriteaddress ; [spritename], [thisCBptr], [lengthflags] as for cachesp
BPL %BT05 ; try next suffix
Pull "PC" ; total failure, exit with
|
CLRV
LDRB R14,spritecachevalid
TEQ R14,#0
BLEQ cachespriteaddress ; try with postfix
BVS %FT03 ; the list may exist, but this one failed
LDRB R14,spritecachevalid
TEQ R14,#0
BEQ %FT07 ; the list exists and we succeded
03
LDR R14,list_at
CMP R14,R14,ASR #31
BNE %FT05 ; the list exists, but the search failed
MOV R14,#1
STRB R14,spritecachevalid ; list doesn't exist
LDR R14,thisCBptr
Push R14
ADRL R14,tool_areaCB
STR R14,thisCBptr
BL cachespriteaddress
STRVSB R2,[R4]
BLVS cachespriteaddress
Pull R14
STR R14,thisCBptr
B %FT07
05
CLRV
STRB R2,[R4] ; try without the suffix
BL cachespriteaddress
; drop through...
]
|
BL cachespriteaddress
; this will fail if the tool list cannot be remade, (eg. due to lack of RMA)
; so try with thisCBptr -> tool_areaCB which will cause OS_SpriteOp to be used (NK 3.26)
BVC %FT07
Push "R0"
LDR R0,thisCBptr
Push "R0"
ADRL R0,tool_areaCB
STR R0,thisCBptr
BL cachespriteaddress
Pull "R0"
STR R0,tool_areaCB
Pull "R0"
BVC %FT07
STRVSB R2,[R4]
BLVS cachespriteaddress ; and if that fails then without postfix
BVC %FT07
Push "R0"
LDR R0,thisCBptr
Push "R0"
ADRL R0,tool_areaCB
STR R0,thisCBptr
BL cachespriteaddress
Pull "R0"
STR R0,tool_areaCB
Pull "R0"
]
07
ADD SP,SP,#16
......@@ -831,12 +739,10 @@ cachetoolspriteaddress ; [spritename], [thisCBptr], [lengthflags] as for cachesp
LDR R1,tool_area
SWI XOS_SpriteOp ; assume it works as sprite already found
;
[ true
SUBS R3,R3,#1
MOVMI R3,#0
SUBS R4,R4,#1
MOVMI R4,#0 ; always returns an extra pixel - unhelpful!
]
;
[ TrueIcon3
; If these are the ROM toolsprites, assume all tools are unmasked
......@@ -1345,6 +1251,7 @@ int_toolsprites Entry "R1-R6"
Debug tools,"Area size, Count, First, Last, Real =",R6,R7,R8,R9,R1
Debug tools,"tool_areaCB =>",R0
;
ASSERT SpriteAreaCBsize = 4*4
STMIA R0,{R6-R9} ; store control block
B %FT90 ; and then close up shop
......@@ -2120,6 +2027,16 @@ dofunkytitlebar EntryS "R0-R11"
ADRL R0,tool_plotparams
LDMIA R0,{R0,R5,R6,R7} ; R0,R5-R7 => sprite op information
Push "R10,R11" ; preserve these - they are important
;
LDR R2, [R1,tool_tbarlcap]
LDR R14,[R1,tool_tbarrcap]
ORR R2,R2,R14
LDR R14,[R1,tool_tbarmidb]
ORR R2,R2,R14
LDR R14,[R1,tool_tbarmidt]
ORRS R2,R2,R14
BEQ %FT20 ; none of the sprites exist, reduce flicker by not bothering
;
; prep the registers ready for advancing along the title bar - hut.. one.. two.. three.. four..
;
......@@ -2127,7 +2044,7 @@ dofunkytitlebar EntryS "R0-R11"
LDR R11,dx
ADD R10,R10,R11 ; including an extra pixel!
;
; *non selected* title bar so attempt to plot the surround
; title bar so attempt to plot the surround
;
LDR R2,[R1,#tool_tbarlcap]
BL Tool_SpriteOp
......@@ -2155,7 +2072,7 @@ dofunkytitlebar EntryS "R0-R11"
SUB R3,R3,R11 ; move back from right edge to plot right cap
LDR R2,[R1,#tool_tbarrcap]
BL Tool_SpriteOp
20
Pull "R10-R11" ; all done so balance the stack
;
ADR x0,oldclipx0
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment