struct / union in initializer, RFE #901.
[sdcc.git] / sdcc / device / lib / pdk15-stack-auto / __gptrget2.s
blob7bc2d5d6d703f515e466f213d6892368e06798ac
1 ;--------------------------------------------------------------------------
2 ; __gptrget.s - read from pointer
4 ; Copyright (c) 2019, Philipp Klaus Krause
6 ; This library is free software; you can redistribute it and/or modify it
7 ; under the terms of the GNU General Public License as published by the
8 ; Free Software Foundation; either version 2, or (at your option) any
9 ; later version.
11 ; This library is distributed in the hope that it will be useful,
12 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ; GNU General Public License for more details.
16 ; You should have received a copy of the GNU General Public License
17 ; along with this library; see the file COPYING. If not, write to the
18 ; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
19 ; MA 02110-1301, USA.
21 ; As a special exception, if you link this library with other files,
22 ; some of which are compiled with SDCC, to produce an executable,
23 ; this library does not by itself cause the resulting executable to
24 ; be covered by the GNU General Public License. This exception does
25 ; not however invalidate any other reasons why the executable file
26 ; might be covered by the GNU General Public License.
27 ;--------------------------------------------------------------------------
29 .module __gptrget2
30 .area CODE
32 __gptrget2::
33 sub a, #0x80
34 t1sn.io f, c
35 goto code
37 ; Pointer to RAM
38 idxm a, p
39 push af
40 inc p
41 idxm a, p
42 mov p, a
43 pop af
44 ret
46 ; Pointer to ROM
47 code:
48 xch a, p
49 push af ; Put lower byte of pointer to first byte of value on stack.
50 call code2 ; Put return value for the ret at second byte of value on stack.
52 mov p, a
53 ; Jump to lower byte. ret there will return from the call to __gptrget2
54 ret
56 code2:
57 add a, #1
58 push af ; Put lower byte of pointer to second byte of value on stack.
59 mov.io a, sp
60 add a, #-5
61 xch a, p
62 idxm p, a ; Put upper byte of pointer to first byte of value on stack.
63 pop af
64 push af
65 idxm a, p
66 addc a
67 xch a, p
68 add a, #4
69 xch a, p
70 idxm p, a ; Put lower byte of pointer to second byte of value on stack.
72 ; Jump to upper byte. ret there will return from the call to code2
73 ret