[A83] Re: What the heck is RST???


[Prev][Next][Index][Thread]

[A83] Re: What the heck is RST???




Are there any implications to doin so?
Since 8000h+ is normally used by flags and so, I assume they can't be used
directly.
Also, how do I get the ram page back.
(I assume "in a,(07h)"

is this correct to modify the pointers read from the VAT:

hl contains the location in the 4000h range...

res 6,h
set 7,h

ld a,(hl)
...

It would be a whole lot faster than ld[a|c]indpaged'ing

--Peter-Martijn

> 
> 
> If you want to load a ROM page into 8000h-BFFFh, then you just output the
> page number to port 7.
> 
> --
> Michael Vincent
> Detached Solutions - www.detacheds.com
> --
> Senior Vice-President/Chief Software Architect
> Radical Software - www.radicalsoft.org
> 
> ----- Original Message -----
> From: "Kirk Meyer" <kirk.meyer@colorado.edu>
> To: <assembly-83@lists.ticalc.org>
> Sent: Saturday, July 07, 2001 11:35 AM
> Subject: [A83] Re: What the heck is RST???
> 
> 
> >
> > WARNING: This email is with the understanding that the inquirer is talking
> > about TI-83+. If that was not the intent of the inquirer then no one
> should
> > read this email lest they become mad.
> >
> > TI does this in LoadCIndPaged and it can be called directly:
> >  push af
> >  in a,[6]
> >  push af
> >  ld a,b
> >  out [6],a
> >  ld c,[hl]
> >  pop af
> >  out [6],a
> >  pop af
> >  ret
> >
> > But obviously they're trying to preserve A here, so this is a bit
> different
> > thing than you're doing. Yours looks good if you need to include your own.
> >
> > Personally I prefer the use of TI's SetupPagedPtr followed by PagedGet (if
> > you need to read lots of consecutive memory, anyway). These routines use a
> > cache, and are described on p45-46 of the SDK guide. I bet that there is
> > also a nice mm_ldir type function for copying big chunks of memory at once
> > like on 86, but unfortunately, like so many of the available bcall's on
> the
> > 83+, it is not listed in ti83plus.inc, and I don't feel like hacking it
> just
> > now...
> >
> > Theoretically there is also a way to load a ROM page into the $8000-$BFFF
> > area and use direct access. It seems to involve ports 4 and 6 together. I
> > haven't been able to do much testing with this though.
> >
> > -----Original Message-----
> > From: assembly-83-bounce@lists.ticalc.org
> > [mailto:assembly-83-bounce@lists.ticalc.org]On Behalf Of Hyperbyte
> > Sent: Saturday, July 07, 2001 12:19 PM
> > To: assembly-83@lists.ticalc.org
> > Subject: [A83] Re: What the heck is RST???
> >
> >
> >
> > Ehm, I suppose I need to make my own _ldaindpaged routine, can someone
> give
> > me a bit of advice?
> >
> > My idea so far:
> > 1 - Since it needs to be in ram, copy it to a memory location
> >     if it is neccesary (when writing an app).
> > 2 - the routine needs to reload the appage from where it is called,
> >     so it needs to store that. "in a,(06h)"??
> > 3 - it needs to load the rompage specified and the hl specified, no
> problem
> > 5 - return to the right place and page for an app.
> >
> > Code so far:
> > a: value of byte (output)
> > b: rompage to load (input)
> > hl: address to read from (input)
> >
> > Thrashes:
> > c ; for speed issue
> >
> > Code:
> >
> >   ld c,06h   2Eh 06h
> >   ld a,b     78h
> >   in b,(c)   40h EDh
> >   out (c),a  79h EDh
> >   ld a,(hl)  7Eh
> >   out (c),b  41h EDh
> >   ret        C9h
> >
> > total: 11 bytes, fits in... saferam4 (ops), 8478h (according to ion.inc)
> >
> > Anyone a better idea? faster? smaller?
> >
> > --Peter-Martijn Kuipers
> >
> >
> >
> > > Yes -- or if you really want to use one of the calls which is on page 0
> > (ex:
> > > access to other ROM pages on 83+), get the call's pointer data, store it
> > in
> > > memory somewhere following a jp opcode, and call to that location
> instead.
> > >
> > > -----Original Message-----
> > > From: assembly-83-bounce@lists.ticalc.org
> > > [mailto:assembly-83-bounce@lists.ticalc.org]On Behalf Of Dan Weiss
> > > Sent: Saturday, July 07, 2001 11:17 AM
> > > To: assembly-83@lists.ticalc.org
> > > Subject: [A83] Re: What the heck is RST???
> > >
> > >
> > >
> > > Disassembly of BCALL: (hope TI doesn't sue me)
> > >
> > > 0028:
> > > jp 284c
> > > 284C:
> > > push hl
> > > push hl
> > > push hl
> > > push af
> > > push bc
> > > push de
> > > push hl
> > > ld hl,$000F
> > > add hl,sp
> > > ld d,(hl)
> > > dec hl
> > > ld e,(hl)
> > > inc de
> > > inc de
> > > ld (hl),e
> > > inc hl
> > > ld (hl),d
> > > in a,($06)
> > > ld c,a
> > > dec hl
> > > dec hl
> > > dec hl
> > > ld (hl),a
> > > dec hl
> > > ld (hl),$29
> > > dec hl
> > > ld (hl),$23
> > > dec de
> > > ld a,(de)
> > > ld h,a
> > > dec de
> > > ld a,(de)
> > > ld l,a
> > > ld b,$00
> > > bit 7,h
> > > jr nz,$2882
> > > bit 6,h
> > > jr z,$2888
> > > res 6,h
> > > ld a,$1B
> > > jr $2893
> > > 2882:
> > > res 7,h
> > > ld a,$1F
> > > jr $2893
> > > 2888:
> > > in a,($06)
> > > and $1F
> > > ld de,$8230
> > > add a,e
> > > ld e,a
> > > ld a,(de)
> > > ld b,a
> > > 2893:
> > > out ($06),a
> > > ld de,_ldhlind
> > > add hl,de
> > > ld e,l
> > > ld d,h
> > > ld hl,$0008
> > > add hl,sp
> > > inc de
> > > inc hl
> > > ld a,(de)
> > > ld (hl),a
> > > inc de
> > > ld a,b
> > > or a
> > > jr z,$28B0
> > > ld a,(de)
> > > neg
> > > ld a,b
> > > jr $28B5
> > > 28B0:
> > > ld a,(de)
> > > or a
> > > jr nz,$28B5
> > > ld a,c
> > > 28B5:
> > > out ($06),a
> > > pop hl
> > > pop de
> > > pop bc
> > > pop af
> > > ret
> > > ;113 bytes, 646 cycles
> > >
> > > This code plainly tells why to avoid romcalls whenever necessary... make
> > > your own routines instead! (ESPECIALLY LD_HL_MHL!)
> > >
> > >
> > >
> > >
> > > >From: Hyperbyte <hyper@hysoft-automation.com>
> > > >Reply-To: assembly-83@lists.ticalc.org
> > > >To: assembly-83@lists.ticalc.org
> > > >Subject: [A83] Re: What the heck is RST???
> > > >Date: Sat, 7 Jul 2001 18:47:06 +0200 (CEST)
> > > >
> > > >
> > > >To give some more information, the code at 0028h (though I think it
> > > >contains
> > > >a jump to another rom area)
> > > >reads the address to call from the stack, much like this code:
> > > >
> > > >pop ix      ;get the address to retrieve info from
> > > >ld h,(ix+0) ;retrieve the adrress to call to
> > > >ld l,(ix+1) ;
> > > >inc ix ; increase the address this routine should return to by 2,
> > > >inc ix ; to account for the address data
> > > >push ix ; push it back
> > > >
> > > >out pointerpage,(memswap_port) ;load the correct pointerpage
> > > >push hl ;to store hl
> > > >call real_call ;
> > > >ret
> > > >real_call:     ;to be able to return, with 'ret' after the code is
> > executed
> > > >jp (hl)
> > > >
> > > >
> > > >I think though that the real code is very different, but this
> > > >gives a general idea, the real code also remembers the rompage you are
> on
> > > >when you call it
> > > >
> > > >--Peter-Martijn
> > > >
> > > >
> > > >
> > > > >
> > > > >
> > > > > >From: "Nick Reichert" <discjammer@hotmail.com>
> > > > > >
> > > > > >Hello,
> > > > > >Can anyone tell me what "rst" does? It is part
> > > > > >of the definition for B_CALL(#define B_CALL(xxxx)
> > > > > >rst 28 // .dw xxxx or something like that), and
> > > > > >it may give a little boost in speed. All I know
> > > > > >is that it stands for restart, and "rst xxxx" is
> > > > > >similar to "call xxxx", but what is the difference
> > > > > >or advantage?
> > > > >
> > > > > "rst xx" is, as you said, the same as a call, but it's only one byte
> > in
> > > >size
> > > > > and (most importantly) it only works on some predefined addresses:
> > > >0000h,
> > > > > 0008h, 0010h, 0018h, 0020h, 0028h, 0030h, 0038h.
> > > > > The bcall macro is actually just a call to 0028h. The code at 28h
> then
> > > >looks
> > > > > up the address defined after the rst and then calls the appropriate
> > rom
> > > > > routines.
> > > > >
> > > > > Tijl Coosemans
> > > > >
> > >
> >_________________________________________________________________________
> > > > > Get Your Private, Free E-mail from MSN Hotmail at
> > > >http://www.hotmail.com.
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > >
> > >
> > > _________________________________________________________________
> > > Get your FREE download of MSN Explorer at http://explorer.msn.com
> > >
> > >
> > >
> > >
> >
> >
> >
> >
> 
> 
> 




Follow-Ups: References: