1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 3.5.0 #9253 (Mar 24 2016) (Linux) 4 ; This file was generated Wed Aug 23 21:44:59 2017 5 ;-------------------------------------------------------- 6 .module memory 7 .optsdcc -mz80 8 9 ;-------------------------------------------------------- 10 ; Public variables in this module 11 ;-------------------------------------------------------- 12 .globl _pages_table 13 .globl _mmu_write_table 14 .globl _page_map 15 .globl _page_unmap 16 ;-------------------------------------------------------- 17 ; special function registers 18 ;-------------------------------------------------------- 19 ;-------------------------------------------------------- 20 ; ram data 21 ;-------------------------------------------------------- 22 .area _DATA 0000 23 _pages_table:: 0000 24 .ds 192 25 ;-------------------------------------------------------- 26 ; ram data 27 ;-------------------------------------------------------- 28 .area _INITIALIZED 29 ;-------------------------------------------------------- 30 ; absolute external ram data 31 ;-------------------------------------------------------- 32 .area _DABS (ABS) 33 ;-------------------------------------------------------- 34 ; global & static initialisations 35 ;-------------------------------------------------------- 36 .area _HOME 37 .area _GSINIT 38 .area _GSFINAL 39 .area _GSINIT 40 ;-------------------------------------------------------- 41 ; Home 42 ;-------------------------------------------------------- 43 .area _HOME 44 .area _HOME 45 ;-------------------------------------------------------- 46 ; code 47 ;-------------------------------------------------------- 48 .area _CODE 49 ;kernel/memory.c:5: int mmu_write_table(void) 50 ; --------------------------------- 51 ; Function mmu_write_table 52 ; --------------------------------- 0000 53 _mmu_write_table:: 54 ;kernel/memory.c:9: for (i = 0; i < PAGES_MAX_COUNT; i++) { 0000 21 00 00 [10] 55 ld hl,#0x0000 0003 56 00102$: 0003 23 [ 6] 57 inc hl 0004 7D [ 4] 58 ld a,l 0005 D6 20 [ 7] 59 sub a, #0x20 0007 7C [ 4] 60 ld a,h 0008 17 [ 4] 61 rla 0009 3F [ 4] 62 ccf 000A 1F [ 4] 63 rra 000B DE 80 [ 7] 64 sbc a, #0x80 000D 38 F4 [12] 65 jr C,00102$ 66 ;kernel/memory.c:15: return 0; 000F 21 00 00 [10] 67 ld hl,#0x0000 0012 C9 [10] 68 ret 69 ;kernel/memory.c:18: int page_map(int page, int pid, uint16_t addr) 70 ; --------------------------------- 71 ; Function page_map 72 ; --------------------------------- 0013 73 _page_map:: 0013 DD E5 [15] 74 push ix 0015 DD 21 00 00 [14] 75 ld ix,#0 0019 DD 39 [15] 76 add ix,sp 77 ;kernel/memory.c:20: if (page >= PAGES_MAX_COUNT) 001B DD 7E 04 [19] 78 ld a,4 (ix) 001E D6 20 [ 7] 79 sub a, #0x20 0020 DD 7E 05 [19] 80 ld a,5 (ix) 0023 17 [ 4] 81 rla 0024 3F [ 4] 82 ccf 0025 1F [ 4] 83 rra 0026 DE 80 [ 7] 84 sbc a, #0x80 0028 38 05 [12] 85 jr C,00102$ 86 ;kernel/memory.c:21: return -1; 002A 21 FF FF [10] 87 ld hl,#0xFFFF 002D 18 38 [12] 88 jr 00105$ 002F 89 00102$: 90 ;kernel/memory.c:23: if (pages_table[page].used) 002F 11r00r00 [10] 91 ld de,#_pages_table+0 0032 DD 4E 04 [19] 92 ld c,4 (ix) 0035 DD 46 05 [19] 93 ld b,5 (ix) 0038 69 [ 4] 94 ld l, c 0039 60 [ 4] 95 ld h, b 003A 29 [11] 96 add hl, hl 003B 09 [11] 97 add hl, bc 003C 29 [11] 98 add hl, hl 003D 19 [11] 99 add hl,de 003E 4D [ 4] 100 ld c,l 003F 44 [ 4] 101 ld b,h 0040 7E [ 7] 102 ld a,(hl) 0041 E6 01 [ 7] 103 and a,#0x01 0043 28 05 [12] 104 jr Z,00104$ 105 ;kernel/memory.c:24: return -2; 0045 21 FE FF [10] 106 ld hl,#0xFFFE 0048 18 1D [12] 107 jr 00105$ 004A 108 00104$: 109 ;kernel/memory.c:26: pages_table[page].addr = addr; 004A 59 [ 4] 110 ld e, c 004B 50 [ 4] 111 ld d, b 004C 13 [ 6] 112 inc de 004D 13 [ 6] 113 inc de 004E C5 [11] 114 push bc 004F 21 0A 00 [10] 115 ld hl, #0x000A 0052 39 [11] 116 add hl, sp 0053 01 04 00 [10] 117 ld bc, #0x0004 0056 ED B0 [21] 118 ldir 0058 C1 [10] 119 pop bc 120 ;kernel/memory.c:27: pages_table[page].pid = pid; 0059 69 [ 4] 121 ld l, c 005A 60 [ 4] 122 ld h, b 005B 23 [ 6] 123 inc hl 005C DD 7E 06 [19] 124 ld a,6 (ix) 005F 77 [ 7] 125 ld (hl),a 126 ;kernel/memory.c:29: pages_table[page].used = 1; 0060 0A [ 7] 127 ld a,(bc) 0061 F6 01 [ 7] 128 or a,#0x01 0063 02 [ 7] 129 ld (bc),a 130 ;kernel/memory.c:30: return 0; 0064 21 00 00 [10] 131 ld hl,#0x0000 0067 132 00105$: 0067 DD E1 [14] 133 pop ix 0069 C9 [10] 134 ret 135 ;kernel/memory.c:33: int page_unmap(int page) 136 ; --------------------------------- 137 ; Function page_unmap 138 ; --------------------------------- 006A 139 _page_unmap:: 006A DD E5 [15] 140 push ix 006C DD 21 00 00 [14] 141 ld ix,#0 0070 DD 39 [15] 142 add ix,sp 143 ;kernel/memory.c:35: if (page >= PAGES_MAX_COUNT) 0072 DD 7E 04 [19] 144 ld a,4 (ix) 0075 D6 20 [ 7] 145 sub a, #0x20 0077 DD 7E 05 [19] 146 ld a,5 (ix) 007A 17 [ 4] 147 rla 007B 3F [ 4] 148 ccf 007C 1F [ 4] 149 rra 007D DE 80 [ 7] 150 sbc a, #0x80 007F 38 05 [12] 151 jr C,00102$ 152 ;kernel/memory.c:36: return -1; 0081 21 FF FF [10] 153 ld hl,#0xFFFF 0084 18 22 [12] 154 jr 00105$ 0086 155 00102$: 156 ;kernel/memory.c:38: if (pages_table[page].used == 0) 0086 11r00r00 [10] 157 ld de,#_pages_table+0 0089 DD 4E 04 [19] 158 ld c,4 (ix) 008C DD 46 05 [19] 159 ld b,5 (ix) 008F 69 [ 4] 160 ld l, c 0090 60 [ 4] 161 ld h, b 0091 29 [11] 162 add hl, hl 0092 09 [11] 163 add hl, bc 0093 29 [11] 164 add hl, hl 0094 19 [11] 165 add hl,de 0095 5D [ 4] 166 ld e,l 0096 54 [ 4] 167 ld d,h 0097 7E [ 7] 168 ld a,(hl) 0098 E6 01 [ 7] 169 and a,#0x01 009A 20 05 [12] 170 jr NZ,00104$ 171 ;kernel/memory.c:39: return -2; 009C 21 FE FF [10] 172 ld hl,#0xFFFE 009F 18 07 [12] 173 jr 00105$ 00A1 174 00104$: 175 ;kernel/memory.c:41: pages_table[page].used = 0; 00A1 1A [ 7] 176 ld a,(de) 00A2 E6 FE [ 7] 177 and a,#0xFE 00A4 12 [ 7] 178 ld (de),a 179 ;kernel/memory.c:42: return 0; 00A5 21 00 00 [10] 180 ld hl,#0x0000 00A8 181 00105$: 00A8 DD E1 [14] 182 pop ix 00AA C9 [10] 183 ret 184 .area _CODE 185 .area _INITIALIZER 186 .area _CABS (ABS)