far_ptr.s (1934B)
1;-------------------------------------------------------------------------- 2; far_ptr.s 3; 4; Copyright (C) 2020, Tony Pavlov 5; 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. 10; 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. 15; 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. 20; 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;-------------------------------------------------------------------------- 28 29 .module far_ptr 30 31 .include "global.s" 32 33 .area _HOME 34 35___call__banked:: 36 ldh A, (#__current_bank) 37 push AF 38 ld HL, #1$ 39 push HL 40 ld HL, #___call_banked_addr 41 ld A, (HL+) 42 ld H, (HL) 43 ld L, A 44 ld A, (#___call_banked_bank) 45 ldh (#__current_bank), A 46 ld (.MBC_ROM_PAGE),A 47 jp (HL) 481$: 49 pop AF 50 ldh (#__current_bank), A 51 ld (.MBC1_ROM_PAGE), A 52 ret 53 54_to_far_ptr:: 55 lda HL, 2(SP) 56 ld A, (HL+) 57 ld E, A 58 ld A, (HL+) 59 ld D, A 60 ld A, (HL+) 61 ld H, (HL) 62 ld L, A 63 ret 64 65 .area _DATA 66 67___call_banked_ptr:: 68___call_banked_addr:: 69 .ds 0x02 ; far pointer offset 70___call_banked_bank:: 71 .ds 0x02 ; far pointer segment