RE: A85: Tyrant ports
[Prev][Next][Index][Thread]
RE: A85: Tyrant ports
For ROM calls, all the usual ones, plus a bunch I found/took from
ti-rom10.txt have been included in the shell itself, and are patched in
when the shell is run. Programs won't be bloated, unless they use extra
ROM calls, that the shell doesn't. This way, nobody is going to wish there
were more ROM routines supported by the shell. =)
Remember, I patch the ROM addresses before execution. I don't do it
ZShell's silly way. My way shaved about 200 clock cycles off of each ROM
call, cause they are just turned in to a table of ROM jumps.
If I just used a pointer to the VAT entry for my TSRs, the VAT entry could
move during a delete.
Go ahead and look at my source. I put all my source with Summit BETA 3.
It should be in Upshell.asm, and maybe you can fix it. =) I always
include source code in my zips.
----------
From: Dines Justesen[SMTP:dines@resnet.gatech.edu]
Sent: Friday, November 13, 1998 11:50 PM
To: assembly-85@lists.ticalc.org
Subject: Re: A85: Tyrant ports
>On the ROM part, you supply the addresses for the ROM routines inside your
>program, and it patches them for you (depending on which ROM version you
>have), so they are immediately useable.
I see. I thought you wanted to do it by using one addr (like ROM_CALL). The
only problem I can see with this is the size. wont a program become quite
big if it uses a lot of ROM functions ?
>In actuality, if you look at the positions of routines in the ROM, they
>follow a specific pattern, that could be calculated, given 3.0A, and 9.0
>addresses. I haven't taken advantage of that fact yet, but maybee in a
>later version... With my system, you could use ROM routines in pages
other
>than 0, but you'd have to handle switching pages on your own. The shell
>doesn't do it.
Each ROM function would require 7*2 bytes, and 1 or 2 two per call to it
right ? This could make programs quite big. I know the pattern, but it
seems
a bit to complicated to include in a general ROM_CALL function (it would
make the function too slow). However if you a program uses a lot of
ROM_CALLs this could reduce the size quite a bit.
>My TSR system (which has already been tested) keeps them in a pseudo
ZShell
>type of format. It searches for the TSR variable each time an interrupt
>occurs. It works quite well, and if it doesn't detect the variable, in
>case its been erased, etc. it kills the interrupt system, and switches it
>back to interrupt mode 1. Interrupts would need to be disabled during
>relocation, however, or it wouldn't be able to detect the TSR's variable
>correctly, and it will shut itself down. I haven't noticed a single
>problem with it so far. I haven't even seen a noticable speed decrease.
Wouldn't it be faster to store a pointer to the VAT entry, and check that
every time ? So instead of searching all VAT entries from the begining to
the var you are using, you would just check to see if the VAT entry was in
the same place, if so then just call the function. If it is not in the same
place, then do a search and store the new location.
>The method of relocation you describe works. I used it on Summit BETA
1-3.
> I noticed that it leaves the system a little unstable afterwards. I used
>a strange form of delocation: I just left the variable right after the
>shell. I screws with the TI-OS. I don't know why. It seems to work fine
>for a while, then it just crashes suddenly, usually when it does an APD
>shutdown. Go figure.
The RAM contains a lot of pointers that has to be updated correctly,
otherwise the system might crash. Leaving the variable right after the
shell
should not be a problem, on the TI85 since the OS doesn't use any special
order for vars. There are several locations in the RAM which are only used
on APD, and you might be having problems with one of those. Which functions
did you use to move the var ? Did you write them your self or use the ROM
functions ? IF you wrote them your self, you are probably not updating all
the pointers in the system, which could cause problems.
>
>Problem is, I wrote that relocation routine a while ago (several months).
> I don't understand it anymore. UGH. I want to try a new method anyway.
> Do you know how Usgard does it's relocation? Does it just remap
>everything?
Basically usgard just adds PROGRAM_ADDR to all absolute calls before
executing a program, nothing really fancy. IF you don't mind I would love
to
see you relocation routine.
Dines
begin 600 WINMAIL.DAT
M>)\^(A@0`0:0" `$```````!``$``0>0!@`(````Y 0```````#H``$-@ 0`
M`@````(``@`!!) &`$@!```!````# ````,``# #````"P`/#@`````"`?\/
M`0```%<`````````@2L?I+ZC$!F=;@#=`0]4`@````!A<W-E;6)L>2TX-4!L
M:7-T<RYT:6-A;&,N;W)G`%--5% `87-S96UB;'DM.#5 ;&ES=',N=&EC86QC
M+F]R9P``'@`", $````%````4TU44 `````>``,P`0```!T```!A<W-E;6)L
M>2TX-4!L:7-T<RYT:6-A;&,N;W)G``````,`%0P!`````P#^#P8````>``$P
M`0```!\````G87-S96UB;'DM.#5 ;&ES=',N=&EC86QC+F]R9R<```(!"S !
M````(@```%--5% Z05-314U"3%DM.#5 3$E35%,N5$E#04Q#+D]21P````,`
M`#D`````"P! .@$````"`?8/`0````0````````#PD$!"( '`!@```!)4$TN
M36EC<F]S;V9T($UA:6PN3F]T90`Q" $$@ $`%@```%)%.B!!.#4Z(%1Y<F%N
M="!P;W)T<P#3!@$%@ ,`#@```,X'"P`.``D`#0`Z``8`1 $!(( #``X```#.
M!PL`#@`(`#H`- `&`&H!`0F `0`A````-$(Q-4-#1$(Y13="1#(Q,4%%,C8T
M-#0U-3,U-# P,# `!P<!`Y &``@-```2````"P`C```````#`"8```````L`
M*0```````P`V``````! `#D`H&O@R.D/O@$>`' ``0```!8```!213H@03@U
M.B!4>7)A;G0@<&]R=',````"`7$``0```!8````!O@_IR-?;S!5,>YX1TJXF
M1$535 `````>`!X,`0````4```!33510`````!X`'PP!````&P```')I8VAA
M<F1L97=I<T!C961A<F-I='DN;F5T```#``80V5^+BP,`!Q")#0``'@`($ $`
M``!E````1D]24D]-0T%,3%,L04Q,5$A%55-504Q/3D53+%!,55-!0E5.0TA)
M1D]53D0O5$]/2T923TU422U23TTQ,%185$A!5D5"145.24Y#3%5$141)3E1(
M15-(14Q,251314Q&+$%.1 `````"`0D0`0```(8+``"""P``C14``$Q:1G6Q
MD<'5_P`*`0\"%0*H!>L"@P!0`O()`@!C: K <V5T,C<&``;#`H,R`\4"`'!R
M0G$1XG-T96T"@S,W`N0'$P*#- 1&$S,Q('<(50>R`H!]"H (SPG9._$8#S(U
M-0* "H$-L0M@X&YG,3 S%% +"A5A)0OR8P! ($8%L5)/"$T@8P= ;',L( $=
M@2!T:&4@=7/Z=0= ( (@!Y =P M0'F A'= @8G5N$7 @208@`A ?H&0O=&]O
MSFL@``-A'A!I+0-A&S"N+@S0!4 1@'8>0&()X=H@"X!C"D -L&0B<1X3)G,>
M,!WQ:701L&QFGQW!($ =T!@0'Q!A=!%P72+D=QXP(RL$('(?H"Z8("!0`V )
MP&%M!"#Z=P(@)P5 (C ?@!>@)/!W"8 =P!^@; >0!" >(7G['E$>0&4AL"=0
M'2H>("3P.2,Y9&\'D"?!)N%4:)$F@7=A>1W ;F\&X*9D*6 F@6=O"X!G'A"^
M;R6 ! `?T!XA)+%W+J+O!& DL1TR`V!U(1 >T2-PV'5P<!>Q(N%B*6 C1]DF
MX3TI"H4*A5(3X!/@?2(P<AW '_ DXQX3'3)A_&1D&! $$ >1(C "$"2Q_RG
M!9 OX0(@)N$?\"O )\*C*\ CT2!:4R.2)S QW0,0;"E@++$FX4TX`R-QKR'Q
M)($&X"_@( '0,!U@91>@8R"@8WDBH >1;_\-T#K!*; `T!_0'38=P!UP]RF"
M*3,DHFH>8"L!"' >T/\B]"X0'W !D2C@.P(=,CT@T&UP<RXR#$DZ\!_P_STC
M*8$D@1\0+;$3T 7 +@&Q'B)6050IL (P<BE@QS5!+R I8%134BJC0EJY!:!U
M;"+P!& B`60(<;\MT1]P#; HX!/0/XU'/B%_'C T@"13%Z @D2KQ0U%S[0AA
M8T90-C)P.9$=XDBG+RXA'B &`#] ;3<!0D7P5$$@,S8B!4 C@$33&R@!(Q%5
M/V Q<V%S;>LD1 # >2@!>0A@'6$#H/AF:7@CT3&S-C('0"RQ?P0@(H5*)@6@
M4)$C$4-1>H<%(#]^"O1L:3$X.=#C`@`A(#$T- WP#-!4$[D+63$V"J #8!/0
M8P5 OBU6-PJ'5.L,,%6V1@-A3CI7/E6V#((@1# #2@<],0>0"?!;4TU44'0Z
M9# "0#2Q'M L(&?+*&$1<"X)@'5=5M]7[9\&8 (P61]:*UC0:60LPD9.13$S
M(B Q,QW ,8@Y.3ABT#$Z-3G@S%!-7;]7[51O7_]:*P]-<!&P!M W\"TX-4"?
M4W 3P#]P(1 =<6,N!;#&9V/_7LYU8FI5\68?-UHK,N!L($%H@&P@5'EO)U "
M,$%Q`"!S4C]30S,^-E2W%%$+\E6V"H4^3_<C)!TR"K%T'<!.8C!2-_'_'B(T
MB$,2- 8OQPN `)!0D?U.87)R5E6Q)T(D1#<!).2O*1,@\$,23F(H#;!P"?#_
M7#$MX (@)8%I(#MT(@`1H.\U\4Y2<E8AXBD=P$C0/(C_!W '@%PP*&$W\2F!
M/G(_CC\C< G@)N ?\!X@"&!G:/\%0$YB++!!L2+P+@$VU##Q7QY@>K1TM'HP
M4W!K+V-?8$-!3$PI)N L8&7_"H4"(#?Q5;$^@2#P'_!.HC^ 84J4'B F@2:!
M(T-I>O])(2>A2:&%HB="(B$%H > F"!Q=2/@A.9B:2W@?P:0-O(I@1]2%Z %
M0#[%9I<?H37B!" _,@P^20.@_P#0/7 '0"/@+-&*H4YB2";_'B(P@ "0C&0[
M$78Y,_9#PVYY<E8"$!V0;P?@'W!SO7IP8P:0:2 DTD'!;BJUGT3$* %I,D3@
M*&1G:2(`TP.@2[ P021$.99P<E9_-(<V(R'B)\(!D(/@C=%DLG9NP6%G/J,J
MTV:-\7].4!' '< ?D$B!3A),HV%O<E:5D@7 >\4NG7 F\%?_2K)(HA.S<\1$
MQ"F"=?TDT;^9X#JQ+H)R5BK1`Z PFQ2]3F$G(O AXRX!H>%D/I&_`^$E`2W"
MH*5\(X5!=R;2OX3!(W1R5BO%-L0_C44[5C^,)B>11.(8$(FA)+$W*G\1X##P
M6X$D1!9 !;$1X'3_)Z ?$!:Q'7(M\B/@"H4%$/V!$C\L5$3%F2&(I@0@B:/[
MBE* DFLM``?@CY.3YILR_S<!@&$G< J%'W$W`2X!B5'_"U!I(8'%4$:;XBV0
M"? $D/<>D806J1@H-P&ILPJ%KK._'B*I)R!Q(W"2X8212)+P_F5[P8Z6B)B+
M"S)VA"4I$ONN)Q@1=4IQAZ:OA;*S/XW^/CB!0X&>-7HP>R01@!]1_FP8$#2
M*6 B,UN!*'%/@-^#X'I@>56TLU(`92+ +A#[-S2A5WEZ<#L"-4$`P"PB_TOR
M.T!)`'DR=7; <IF0!R'_/H([0R$0B7$#D4&C)K %,#]R5CH@-< 1H$O$)Z!R
M:_^O=B[@._)X@XJSIM=&,58!]QXBR :.@6YR5AUP*9$CX7\B)+4Q02$=P!'
M:6 V\FO_-]&'A,EGGC<D8J/D=I+)Y_YB`- @H+0#T@8$8F+0-B)_R78G@D3B
M'M"!U"@!7#!S_SYR(O!%=')6&! Z$23P-?'_'<!,,+F3'< %L;:V)\4^<_^"
M`LV(0X$WD<@&SN<%L!@0_U8`-_!X9P/P'?$C@+&3) +_*[&E<YAX+0!I$4$S
M@M+=N-^%MDJCL<(N$)J0<IA+N:'_AG.TPN&3/G.30=A"!9#!\?L1L#^-5]L6
M@F*X$4UP0<7_$\ O0D%O0G<D1"41U)(JX=\*A;FB,0'(\JW@4[02$\'_1[$[
M$<:T1:,=\4)V")!U4?\@TQXQ(C"6``,`+=,*A<WE_[H4)+&"PW/$J;0](^QE
MN.'_F[*:(D):++!0(O()V ")<?\+44D0CH-]9 .@](0=YHPF_X"1BK,F@>&1
M(P?WT0J%^!7_^.,VT9,AQL/2].H3'B(>T/\'X-EVOTZEP@> @-'NT]E8_TY3
M#; $\B@!RS,V(T$3-P'S>O%*^C$M2[!R5A_AX9;_*M,W`2C@(?&'A<#$BU$C
MX._>L!Y![H$^<V$.,+$P++#_"R #:)<WZ?%NL9GAQ?([`O]&`=F%;"! I2C@
M"7#-VZUUOPEC'A)R5C%F@$'G(7<G@<.&Y,>A22U/4S8IL&/_)9 X0L:#LA$M
M\\M!3M$>T/^2.+*2>R'.@OCC-P'TA-!1_WDR'G TD!B0WL(>8S?R%?7C*\+)
M(D%01 ]X+^#@A3M'45/@9]B 1EZEPE)!_RI!B%%Q$8LYZH4I$BKQP9+_UX0P
M8&(`,++>6(3V+H(N,;^]Y<#$2R"!$A:S)N!,!S'_+<,-SP[8I?M,)?M"VY*%
MIO_:@7+D$9!H@.(BO=41P,SG_Y]B;L XT9-2:4"$]@G0K$'_0Q+(`9@QA,'J
M,OZ1GW![P?^U40'&D1@<@7LD\S*%8PI9_WKQ&5&K)$YB(C25$:+QI$._A<00
MY8,BFA./X$DA5WLS_XPG:;5<,##$/%,3X$4C\G;WK>!:\##$=ZV K\%Y<Z43
M?^ S%2$\5:C2:;6,*>201O\W5571-_USQ/,RA;+=D7[ _R:"'U/OA?()'=?[
MAIY5>R2_1,3F0)]B,B8%9W)64(7%_VC JR#DH#MV2'$!J78U%49UP<!G$^ H
M++8V,.JP:/YSA) %>1(TMB K,0CQ>)2/*?$V,!LAI:!51T@1X_^!DNKS[:'E
MX?\1`04I\4_Q?05H1!/@GL*P8]H12M!S_UT`"= 8Q APW2'96*W@3>'OTZ/Y
M)+V0KK!P<E;M<[SA^PMPC,U"9_!I(GZS3Q/Y,RMTT;LP4*C@1QQQ7T'\1$3
MD!/1K(+=D'U@M&"?K\&L<L_2=7'=QF5XYQ#_=E(^D8BFJR F@:0SP?$8$O^:
MD+8P$P$[!1(T!*#L,42!_];CNW"C$R6FAJ&>PD5??TZ_-R"@,8S<83]O_W$$
M-'%_%6GB?6FP`&7 ```#`! 0``````,`$1 `````0 `', !PJ:SG#[X!0 `(
?, !PJ:SG#[X!'@`]``$````%````4D4Z( ````#O_@`'
`
end