SXB 2.0 Compiler problem?
Good Morning Bean:
I have been enjoying working with SXB 2.0 since the public beta became available.·I am using 2.0.19 of April·1. ·Last night I came up with the following problem:
This code snippit:
'
'dtac·is delta tac reading since the last time func called
'
'
FUNC DTAC
Bank @timing
l_dt1·Var Word
l_dt2·Var Word
'·l_dt2 = Tac2 - Tac1
·l_dt2 = BCD_WORD_SUB Tac1, TAC2
'·l_dt1 = Tac1 - Tac0
·l_dt1 = BCD_WORD_SUB Tac0, TAC1
·Tac0 = Tac1
·Tac1 = Tac2
'·__wparam12 = l_dt2
'·__wparam12 = l_dt2 - l_dt1
·__wparam12 = BCD_wORD_SUB l_dt1, l_dt2
Bank
'·tmpW2 = __wparam12
return 'Tmpw2
ENDFUNC
compiles as:
································ ;'
································ ;'dtac·is the·delta tac reading since the last time func called
································ ;'
································ ;'
DTAC:··························· ;FUNC DTAC
· BANK timing··················· ;Bank @timing
l_dt1······· = __STACK-$02······ ;l_dt1·Var Word
· ADD __STACKPTR,#2············
l_dt1_LSB··· = __STACK-$02·····
l_dt1_MSB··· = __STACK-$01·····
l_dt2······· = __STACK-$04······ ;l_dt2·Var Word
· ADD __STACKPTR,#2············
l_dt2_LSB··· = __STACK-$04·····
l_dt2_MSB··· = __STACK-$03·····
································ ;'·l_dt2 = Tac2 - Tac1
· MOV __PARAM0,Tac1_LSB········· ;·l_dt2 = BCD_WORD_SUB Tac1, TAC2
· MOV __PARAM1,Tac1_MSB········
· MOV __PARAM2,Tac2_LSB········
· MOV __PARAM3,Tac2_MSB········
· MOV __PARAMCNT,#3············
· CALL @__BCD_WORD_SUB·········
· MOV W,#l_dt2·················
· ADD W,__STACKPTR·············
· MOV FSR,W····················
· MOV IND,__PARAM1·············
· INC FSR······················
· MOV IND,__PARAM2·············
································ ;'·l_dt1 = Tac1 - Tac0
· MOV __PARAM0,Tac0_LSB········· ;·l_dt1 = BCD_WORD_SUB Tac0, TAC1
· MOV __PARAM1,Tac0_MSB········
· MOV __PARAM2,Tac1_LSB········
· MOV __PARAM3,Tac1_MSB········
· MOV __PARAMCNT,#3············
· CALL @__BCD_WORD_SUB·········
· MOV W,#l_dt1·················
· ADD W,__STACKPTR·············
· MOV FSR,W····················
· MOV IND,__PARAM1·············
· INC FSR······················
· MOV IND,__PARAM2·············
· MOV Tac0_LSB,Tac1_LSB········· ;·Tac0 = Tac1
· MOV Tac0_MSB,Tac1_MSB········
· MOV Tac1_LSB,Tac2_LSB········· ;·Tac1 = Tac2
· MOV Tac1_MSB,Tac2_MSB········
································ ;'·__wparam12 = l_dt2
································ ;'·__wparam12 = l_dt2 - l_dt1
· MOV W,#l_dt1·················· ;·__wparam12 = BCD_wORD_SUB l_dt1, l_dt2
· ADD W,__STACKPTR·············
· MOV FSR,W····················
· MOV __PARAM1,IND·············
· INC FSR······················
· MOV __PARAM2,IND·············
· BANK timing··················
· MOV W,#l_dt2·················
· ADD W,__STACKPTR·············
· MOV FSR,W····················
· MOV __PARAM3,IND·············
· INC FSR······················
· MOV __PARAM4,IND·············
· BANK timing··················
· MOV __PARAMCNT,#4············
· CALL @__BCD_wORD_SUB·········
· BANK $00······················ ;Bank
································ ;'·tmpW2 = __wparam12
· SUB __STACKPTR,#4············· ;return 'Tmpw2
· RETP·························
The assembler complains about __param0.· I use the FUNC BCD_WORD_SUB elswhere without the local variables and it compiles and runs fine.· But when I attempt to use the local variables the compiler wants to add __param0. I have a work around in mind that I can do that will eliminate the local variables but I really wanted to use them in this case.
Thanks
RS_Jim
I have been enjoying working with SXB 2.0 since the public beta became available.·I am using 2.0.19 of April·1. ·Last night I came up with the following problem:
This code snippit:
'
'dtac·is delta tac reading since the last time func called
'
'
FUNC DTAC
Bank @timing
l_dt1·Var Word
l_dt2·Var Word
'·l_dt2 = Tac2 - Tac1
·l_dt2 = BCD_WORD_SUB Tac1, TAC2
'·l_dt1 = Tac1 - Tac0
·l_dt1 = BCD_WORD_SUB Tac0, TAC1
·Tac0 = Tac1
·Tac1 = Tac2
'·__wparam12 = l_dt2
'·__wparam12 = l_dt2 - l_dt1
·__wparam12 = BCD_wORD_SUB l_dt1, l_dt2
Bank
'·tmpW2 = __wparam12
return 'Tmpw2
ENDFUNC
compiles as:
································ ;'
································ ;'dtac·is the·delta tac reading since the last time func called
································ ;'
································ ;'
DTAC:··························· ;FUNC DTAC
· BANK timing··················· ;Bank @timing
l_dt1······· = __STACK-$02······ ;l_dt1·Var Word
· ADD __STACKPTR,#2············
l_dt1_LSB··· = __STACK-$02·····
l_dt1_MSB··· = __STACK-$01·····
l_dt2······· = __STACK-$04······ ;l_dt2·Var Word
· ADD __STACKPTR,#2············
l_dt2_LSB··· = __STACK-$04·····
l_dt2_MSB··· = __STACK-$03·····
································ ;'·l_dt2 = Tac2 - Tac1
· MOV __PARAM0,Tac1_LSB········· ;·l_dt2 = BCD_WORD_SUB Tac1, TAC2
· MOV __PARAM1,Tac1_MSB········
· MOV __PARAM2,Tac2_LSB········
· MOV __PARAM3,Tac2_MSB········
· MOV __PARAMCNT,#3············
· CALL @__BCD_WORD_SUB·········
· MOV W,#l_dt2·················
· ADD W,__STACKPTR·············
· MOV FSR,W····················
· MOV IND,__PARAM1·············
· INC FSR······················
· MOV IND,__PARAM2·············
································ ;'·l_dt1 = Tac1 - Tac0
· MOV __PARAM0,Tac0_LSB········· ;·l_dt1 = BCD_WORD_SUB Tac0, TAC1
· MOV __PARAM1,Tac0_MSB········
· MOV __PARAM2,Tac1_LSB········
· MOV __PARAM3,Tac1_MSB········
· MOV __PARAMCNT,#3············
· CALL @__BCD_WORD_SUB·········
· MOV W,#l_dt1·················
· ADD W,__STACKPTR·············
· MOV FSR,W····················
· MOV IND,__PARAM1·············
· INC FSR······················
· MOV IND,__PARAM2·············
· MOV Tac0_LSB,Tac1_LSB········· ;·Tac0 = Tac1
· MOV Tac0_MSB,Tac1_MSB········
· MOV Tac1_LSB,Tac2_LSB········· ;·Tac1 = Tac2
· MOV Tac1_MSB,Tac2_MSB········
································ ;'·__wparam12 = l_dt2
································ ;'·__wparam12 = l_dt2 - l_dt1
· MOV W,#l_dt1·················· ;·__wparam12 = BCD_wORD_SUB l_dt1, l_dt2
· ADD W,__STACKPTR·············
· MOV FSR,W····················
· MOV __PARAM1,IND·············
· INC FSR······················
· MOV __PARAM2,IND·············
· BANK timing··················
· MOV W,#l_dt2·················
· ADD W,__STACKPTR·············
· MOV FSR,W····················
· MOV __PARAM3,IND·············
· INC FSR······················
· MOV __PARAM4,IND·············
· BANK timing··················
· MOV __PARAMCNT,#4············
· CALL @__BCD_wORD_SUB·········
· BANK $00······················ ;Bank
································ ;'·tmpW2 = __wparam12
· SUB __STACKPTR,#4············· ;return 'Tmpw2
· RETP·························
The assembler complains about __param0.· I use the FUNC BCD_WORD_SUB elswhere without the local variables and it compiles and runs fine.· But when I attempt to use the local variables the compiler wants to add __param0. I have a work around in mind that I can do that will eliminate the local variables but I really wanted to use them in this case.
Thanks
RS_Jim
Comments
Thanks for the reply, I will try loading up my local VARS from the timing bank by using get and put. Maybe that will end the necessity of changing banks to the timing bank. BCD_sub only cares what vars are passed to it in __wparam12 and __wparam24.
At first quick brush with passing with get and put I am still getting compiler wanting to create __param0. I will look deeper into the code to see why I can;t pass the params without needing "param0"
RS Jim
rs_jim