Sync acorn26 riscoscalls with acorn32 version.

This commit is contained in:
bjh21 2003-11-23 15:55:03 +00:00
parent f68440c42d
commit 18a0620f50
2 changed files with 177 additions and 5 deletions

View File

@ -1,7 +1,8 @@
/* $NetBSD: riscoscalls.S,v 1.1 2002/03/24 15:47:27 bjh21 Exp $ */
/* $NetBSD: riscoscalls.S,v 1.2 2003/11/23 15:55:03 bjh21 Exp $ */
/*-
* Copyright (c) 2001 Ben Harris
* Copyright (c) 2002 Reinoud Zandijk
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -51,6 +52,21 @@ ENTRY(os_readc)
swi OS_ReadC
ldmdb fp, {fp, sp, pc}
ENTRY(os_cli)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
swi OS_CLI
ldmdb fp, {fp, sp, pc}
ENTRY(xos_cli)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
swi OS_CLI
movvc r0, #0
ldmdb fp, {fp, sp, pc}
ENTRY(os_byte)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
@ -63,6 +79,13 @@ ENTRY(os_byte)
strne r2, [r3]
ldmdb fp, {fp, sp, pc}
ENTRY(os_word)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
swi OS_Word
ldmdb fp, {fp, sp, pc}
ENTRY(xosargs_read)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
@ -138,8 +161,8 @@ ENTRY(os_get_env)
mov ip, sp
stmfd sp!, {r4, fp, ip, lr, pc}
sub fp, ip, #4
mov r0, r3
mov r1, r4
mov r3, r0
mov r4, r1
swi OS_GetEnv
teq r3, #0
strne r1, [r3]
@ -221,6 +244,30 @@ ENTRY(os_read_mem_map_info)
strne r1, [r3]
ldmdb fp, {fp, sp, pc}
ENTRY(os_readsysinfo)
mov ip, sp
stmfd sp!, {r4-r9, fp, ip, lr, pc}
sub fp, ip, #4
mov r9, r5
mov r8, r4
mov r7, r3
mov r6, r2
mov r5, r1
swi OS_ReadSysInfo
teq r5, #0
strne r0, [r5]
teq r6, #0
strne r1, [r6]
teq r7, #0
strne r2, [r7]
ldr r1, [ip, #0]
teq r1, #0
strne r3, [r1]
ldr r1, [ip, #4]
teq r1, #0
strne r4, [r1]
ldmdb fp, {r4-r9, fp, sp, pc}
ENTRY(os_read_mem_map_entries)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
@ -228,6 +275,37 @@ ENTRY(os_read_mem_map_entries)
swi OS_ReadMemMapEntries
ldmdb fp, {fp, sp, pc}
ENTRY(osmemory_read_arrangement_table_size)
mov ip, sp
stmfd sp!, {r4, fp, ip, lr, pc}
sub fp, ip, #4
mov r3, r0
mov r4, r1
mov r0, #OSMemory_ReadArrangementTableSize
swi OS_Memory
cmp r3, #0
strne r1, [r3]
cmp r4, #0
strne r2, [r4]
ldmdb fp, {r4, fp, sp, pc}
ENTRY(osmemory_read_arrangement_table)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
mov r1, r0
mov r0, #OSMemory_ReadArrangementTable
swi OS_Memory
ldmdb fp, {fp, sp, pc}
ENTRY(osmemory_page_op)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}
sub fp, ip, #4
add r0, r0, #OSMemory_PageOp
swi OS_Memory
ldmdb fp, {fp, sp, pc}
ENTRY(xcache_control)
mov ip, sp
stmfd sp!, {fp, ip, lr, pc}

View File

@ -1,4 +1,4 @@
/* $NetBSD: riscoscalls.h,v 1.1 2002/03/24 15:47:27 bjh21 Exp $ */
/* $NetBSD: riscoscalls.h,v 1.2 2003/11/23 15:55:03 bjh21 Exp $ */
/*-
* Copyright (c) 2001 Ben Harris
@ -40,8 +40,12 @@
#define XOS_NewLine 0x020003
#define OS_ReadC 0x000004
#define XOS_ReadC 0x020004
#define OS_CLI 0x000005
#define XOS_CLI 0x020005
#define OS_Byte 0x000006
#define XOS_Byte 0x020006
#define OS_Word 0x000007
#define XOS_Word 0x020007
#define OS_Args 0x000009
#define XOS_Args 0x020009
#define OS_GBPB 0x00000c
@ -70,6 +74,10 @@
#define XOS_ReadMemMapInfo 0x020051
#define OS_ReadMemMapEntries 0x000052
#define XOS_ReadMemMapEntries 0x020052
#define OS_ReadSysInfo 0x000058
#define XOS_ReadSysInfo 0x020058
#define OS_Memory 0x000068
#define XOS_Memory 0x020068
#define Cache_Control 0x000280
#define XCache_Control 0x020280
@ -87,12 +95,27 @@ extern void os_new_line(void);
extern int os_readc(void);
#endif
/* OS_CLI */
#ifndef __ASSEMBLER__
extern void os_cli(char *);
extern os_error *xos_cli(char *);
#endif
/* OS_Byte */
#define osbyte_OUTPUT_CURSOR_POSITION 165
#ifndef __ASSEMBLER__
void os_byte(int, int, int, int *, int *);
extern void os_byte(int, int, int, int *, int *);
#endif
/* OS_Word */
#define osword_WRITE_SCREEN_ADDRESS 22
#ifndef __ASSEMBLER__
extern void os_word(int, char *);
#endif
/* OS_Args */
@ -146,7 +169,78 @@ extern os_error *xosgbpb_read(int, char *, int, int *);
#ifndef __ASSEMBLER__
extern os_error *xosfind_close(int);
extern os_error *xosfind_open(int, char const *, char const *, int *);
#endif
/* OS_ReadSysInfo */
#define OSReadSysInfo_ReadConfiguredScreenSize 0x00
#define OSReadSysInfo_ReadMonitorInfo 0x01
#define OSReadSysInfo_ReadChipPresenceAndId 0x02
#define OSReadSysInfo_ReadSuperIOFeatures 0x03
#define osreadsysinfo_IOEB_ASIC_PRESENT 0x01
#define osreadsysinfo_SUPERIO_PRESENT 0x02
#define osreadsysinfo_LCD_ASIC_PRESENT 0x04
#ifndef __ASSEMBLER__
extern void os_readsysinfo(int what, int *r0, int *r1, int *r2, int *r3, int *r4);
#define os_readsysinfo_configured_screensize(s) \
os_readsysinfo(OSReadSysInfo_ReadConfiguredScreenSize, (s), 0, 0, 0, 0)
#define os_readsysinfo_monitor_info(mode, type, sync) \
os_readsysinfo(OSReadSysInfo_ReadMonitorInfo, (mode), (type), (sync), 0, 0)
#define os_readsysinfo_chip_presence(ioeb, superio, lcd) \
os_readsysinfo(OSReadSysInfo_ReadChipPresenceAndId, (ioeb), (superio), (lcd), 0, 0)
#define os_readsysinfo_unique_id(low, high) \
os_readsysinfo(OSReadSysInfo_ReadChipPresenceAndId, 0, 0, 0, (low), (high))
#define os_readsysinfo_superio_features(basic, extra) \
os_readsysinfo(OSReadSysInfo_ReadSuperIOFeatures, (basic), (extra), 0, 0, 0)
#endif
/* OS_Memory */
#define OSMemory_PageOp 0x00
#define OSMemory_ReadArrangementTableSize 0x06
#define OSMemory_ReadArrangementTable 0x07
#define OSMemory_ReadSize 0x08
#define OSMemory_ReadController 0x09
#define osmemory_GIVEN_PAGE_NO 0x0100
#define osmemory_GIVEN_LOG_ADDR 0x0200
#define osmemory_GIVEN_PHYS_ADDR 0x0400
#define osmemory_RETURN_PAGE_NO 0x0800
#define osmemory_RETURN_LOG_ADDR 0x1000
#define osmemory_RETURN_PHYS_ADDR 0x2000
#define osmemory_TYPE 0xf00
#define osmemory_TYPE_SHIFT 8
#define osmemory_TYPE_ABSENT 0x0
#define osmemory_TYPE_DRAM 0x1
#define osmemory_TYPE_VRAM 0x2
#define osmemory_TYPE_ROM 0x3
#define osmemory_TYPE_IO 0x4
/* 5, 6, 7 are undefined */
#define osmemory_TYPE_ALLOCATABLE_MASK 0x8 /* bit signaling allocatable */
#ifndef __ASSEMBLER__
struct page_info {
int pagenumber;
int logical;
int physical;
};
extern void osmemory_read_arrangement_table_size(int *size, int *nbpp);
extern void osmemory_read_arrangement_table(unsigned char *block);
extern void osmemory_page_op(int fromto, struct page_info *block, int num_pages);
#endif
/* Misc */
#ifndef __ASSEMBLER__
extern char *os_get_env(caddr_t *, void **);
extern void os_exit(os_error const *, int) __attribute__((noreturn));