summaryrefslogtreecommitdiffstats
path: root/sw/z80/build/kernel/memory.asm
diff options
context:
space:
mode:
authorleleraffa97@hotmail.it <leleraffa97@hotmail.it>2017-08-26 11:11:39 +0200
committerleleraffa97@hotmail.it <leleraffa97@hotmail.it>2017-08-26 11:11:39 +0200
commit1acc542400d15ddf32f44e3f1ddb82f9c9fe4aab (patch)
treefb439e84abdf86a1b6e9f7362ca4c3cdeef2bb8d /sw/z80/build/kernel/memory.asm
parentMerge remote-tracking branch 'origin/naopross' into atlas (diff)
downloadz80uPC-1acc542400d15ddf32f44e3f1ddb82f9c9fe4aab.tar.gz
z80uPC-1acc542400d15ddf32f44e3f1ddb82f9c9fe4aab.zip
File system initialization
Simple I/O (sio) interfaced, not yet implemented
Diffstat (limited to 'sw/z80/build/kernel/memory.asm')
-rw-r--r--sw/z80/build/kernel/memory.asm186
1 files changed, 186 insertions, 0 deletions
diff --git a/sw/z80/build/kernel/memory.asm b/sw/z80/build/kernel/memory.asm
new file mode 100644
index 0000000..ffa5214
--- /dev/null
+++ b/sw/z80/build/kernel/memory.asm
@@ -0,0 +1,186 @@
+;--------------------------------------------------------
+; File Created by SDCC : free open source ANSI-C Compiler
+; Version 3.5.0 #9253 (Mar 24 2016) (Linux)
+; This file was generated Wed Aug 23 21:44:59 2017
+;--------------------------------------------------------
+ .module memory
+ .optsdcc -mz80
+
+;--------------------------------------------------------
+; Public variables in this module
+;--------------------------------------------------------
+ .globl _pages_table
+ .globl _mmu_write_table
+ .globl _page_map
+ .globl _page_unmap
+;--------------------------------------------------------
+; special function registers
+;--------------------------------------------------------
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area _DATA
+_pages_table::
+ .ds 192
+;--------------------------------------------------------
+; ram data
+;--------------------------------------------------------
+ .area _INITIALIZED
+;--------------------------------------------------------
+; absolute external ram data
+;--------------------------------------------------------
+ .area _DABS (ABS)
+;--------------------------------------------------------
+; global & static initialisations
+;--------------------------------------------------------
+ .area _HOME
+ .area _GSINIT
+ .area _GSFINAL
+ .area _GSINIT
+;--------------------------------------------------------
+; Home
+;--------------------------------------------------------
+ .area _HOME
+ .area _HOME
+;--------------------------------------------------------
+; code
+;--------------------------------------------------------
+ .area _CODE
+;kernel/memory.c:5: int mmu_write_table(void)
+; ---------------------------------
+; Function mmu_write_table
+; ---------------------------------
+_mmu_write_table::
+;kernel/memory.c:9: for (i = 0; i < PAGES_MAX_COUNT; i++) {
+ ld hl,#0x0000
+00102$:
+ inc hl
+ ld a,l
+ sub a, #0x20
+ ld a,h
+ rla
+ ccf
+ rra
+ sbc a, #0x80
+ jr C,00102$
+;kernel/memory.c:15: return 0;
+ ld hl,#0x0000
+ ret
+;kernel/memory.c:18: int page_map(int page, int pid, uint16_t addr)
+; ---------------------------------
+; Function page_map
+; ---------------------------------
+_page_map::
+ push ix
+ ld ix,#0
+ add ix,sp
+;kernel/memory.c:20: if (page >= PAGES_MAX_COUNT)
+ ld a,4 (ix)
+ sub a, #0x20
+ ld a,5 (ix)
+ rla
+ ccf
+ rra
+ sbc a, #0x80
+ jr C,00102$
+;kernel/memory.c:21: return -1;
+ ld hl,#0xFFFF
+ jr 00105$
+00102$:
+;kernel/memory.c:23: if (pages_table[page].used)
+ ld de,#_pages_table+0
+ ld c,4 (ix)
+ ld b,5 (ix)
+ ld l, c
+ ld h, b
+ add hl, hl
+ add hl, bc
+ add hl, hl
+ add hl,de
+ ld c,l
+ ld b,h
+ ld a,(hl)
+ and a,#0x01
+ jr Z,00104$
+;kernel/memory.c:24: return -2;
+ ld hl,#0xFFFE
+ jr 00105$
+00104$:
+;kernel/memory.c:26: pages_table[page].addr = addr;
+ ld e, c
+ ld d, b
+ inc de
+ inc de
+ push bc
+ ld hl, #0x000A
+ add hl, sp
+ ld bc, #0x0004
+ ldir
+ pop bc
+;kernel/memory.c:27: pages_table[page].pid = pid;
+ ld l, c
+ ld h, b
+ inc hl
+ ld a,6 (ix)
+ ld (hl),a
+;kernel/memory.c:29: pages_table[page].used = 1;
+ ld a,(bc)
+ or a,#0x01
+ ld (bc),a
+;kernel/memory.c:30: return 0;
+ ld hl,#0x0000
+00105$:
+ pop ix
+ ret
+;kernel/memory.c:33: int page_unmap(int page)
+; ---------------------------------
+; Function page_unmap
+; ---------------------------------
+_page_unmap::
+ push ix
+ ld ix,#0
+ add ix,sp
+;kernel/memory.c:35: if (page >= PAGES_MAX_COUNT)
+ ld a,4 (ix)
+ sub a, #0x20
+ ld a,5 (ix)
+ rla
+ ccf
+ rra
+ sbc a, #0x80
+ jr C,00102$
+;kernel/memory.c:36: return -1;
+ ld hl,#0xFFFF
+ jr 00105$
+00102$:
+;kernel/memory.c:38: if (pages_table[page].used == 0)
+ ld de,#_pages_table+0
+ ld c,4 (ix)
+ ld b,5 (ix)
+ ld l, c
+ ld h, b
+ add hl, hl
+ add hl, bc
+ add hl, hl
+ add hl,de
+ ld e,l
+ ld d,h
+ ld a,(hl)
+ and a,#0x01
+ jr NZ,00104$
+;kernel/memory.c:39: return -2;
+ ld hl,#0xFFFE
+ jr 00105$
+00104$:
+;kernel/memory.c:41: pages_table[page].used = 0;
+ ld a,(de)
+ and a,#0xFE
+ ld (de),a
+;kernel/memory.c:42: return 0;
+ ld hl,#0x0000
+00105$:
+ pop ix
+ ret
+ .area _CODE
+ .area _INITIALIZER
+ .area _CABS (ABS)