style update and add rp6502 doc

This commit is contained in:
rumbledethumps 2023-11-17 11:08:51 -08:00
parent b17c4d3434
commit 564c85235f
32 changed files with 261 additions and 351 deletions

View File

@ -1,8 +1,4 @@
; Copyright (c) 2023 Rumbledethumps
;
; SPDX-License-Identifier: Zlib
; SPDX-License-Identifier: BSD-3-Clause
; SPDX-License-Identifier: Unlicense
; Picocomputer 6502 general defines
; RIA UART
RIA_READY := $FFE0 ; TX=$80 RX=$40

View File

@ -1,11 +1,3 @@
#
# Copyright (c) 2023 Rumbledethumps
#
# SPDX-License-Identifier: Zlib
# SPDX-License-Identifier: BSD-3-Clause
# SPDX-License-Identifier: Unlicense
#
SYMBOLS {
__STARTUP__: type = import;
__STACKSIZE__: type = weak, value = $0800;

View File

@ -175,6 +175,9 @@
<tag><htmlurl url="plus4.html" name="plus4.html"></tag>
Topics specific to the Commodore Plus/4.
<tag><htmlurl url="rp6502.html" name="rp6502.html"></tag>
Topics specific to the Picocomputer 6502.
<tag><htmlurl url="supervision.html" name="supervision.html"></tag>
Topics specific to the Watara Supervision Console.

96
doc/rp6502.sgml Normal file
View File

@ -0,0 +1,96 @@
<!doctype linuxdoc system>
<article>
<title>Picocomputer 6502 - specific information for cc65
<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
<abstract>
An overview over the Picocomputer 6502 and its interfaces to the cc65 C
compiler.
</abstract>
<!-- Table of contents -->
<toc>
<!-- Begin the document -->
<sect>Overview<p>
The Picocomputer 6502 is a modern W65C02S computer with a custom operating
system designed to be POSIX-like. The reference design includes a W65C02S,
W65C22S, RP6502-RIA, and optionally a RP6502-VGA. Peripheral devices like
keyboards, mice, and flash storage are connected by USB to the RP6502-RIA.
Audio is generated by the RP6502-RIA. Video is generated by the RP6502-VGA.
<sect>Binary format<p>
The standard binary output format generated by the linker for the RP6502 target
is a plain machine language program without any prefix or postfix.
The RP6502 Integrated Development Environment, based on Visual Studio Code,
will convert the cc65 binary output into RP6502 ROM files that can be loaded
directly from the RP6502 monitor or installed on the RIA to be loaded at boot.
<sect>Memory layout<p>
<descrip>
<tag/Stack/
The C run-time stack is located at &dollar;FEFF, and grows downward.
<tag/Heap/
The C heap is located at the end of the program, and grows toward the C
run-time stack.
<tag/RAM/
RAM is located at &dollar;0000 - &dollar;FEFF. Default binaries load and
start at &dollar;0200.
<tag/ROM/
The RP6502 is designed with no ROM in the 6502 address space.
<tag/VIA/
A Versatile Interface Adapter (6522) is 16 registers located
at &dollar;FFD0.
<tag/RIA/
The RP6502 Interface Adapter is 32 registers located at &dollar;FFE0.
<tag/User/
User I/O expansion is from &dollar;FF00 to &dollar;FFCF.
</descrip><p>
<sect>Platform-specific header files<p>
Programs containing RP6502-specific code may use the <tt/rp6502.h/ or
<tt/rp6502.inc/ include files.
<sect>License<p>
This software is provided "as-is", without any expressed or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
<enum>
<item> The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated, but is not required.
<item> Altered source versions must be plainly marked as such, and must not
be misrepresented as being the original software.
<item> This notice may not be removed or altered from any source
distribution.
</enum>
</article>

View File

@ -1,10 +1,28 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
/*****************************************************************************/
/* */
/* rp6502.h */
/* */
/* Picocomputer 6502 */
/* */
/* */
/* This software is provided 'as-is', without any expressed or implied */
/* warranty. In no event will the authors be held liable for any damages */
/* arising from the use of this software. */
/* */
/* Permission is granted to anyone to use this software for any purpose, */
/* including commercial applications, and to alter it and redistribute it */
/* freely, subject to the following restrictions: */
/* */
/* 1. The origin of this software must not be misrepresented; you must not */
/* claim that you wrote the original software. If you use this software */
/* in a product, an acknowledgment in the product documentation would be */
/* appreciated but is not required. */
/* 2. Altered source versions must be plainly marked as such, and must not */
/* be misrepresented as being the original software. */
/* 3. This notice may not be removed or altered from any source */
/* distribution. */
/* */
/*****************************************************************************/
#ifndef _RP6502_H
#define _RP6502_H
@ -50,29 +68,29 @@ struct __RP6502
/* XSTACK helpers */
void __fastcall__ ria_push_long(unsigned long val);
void __fastcall__ ria_push_int(unsigned int val);
void __fastcall__ ria_push_long (unsigned long val);
void __fastcall__ ria_push_int (unsigned int val);
#define ria_push_char(v) RIA.xstack = v
long __fastcall__ ria_pop_long(void);
int __fastcall__ ria_pop_int(void);
long __fastcall__ ria_pop_long (void);
int __fastcall__ ria_pop_int (void);
#define ria_pop_char() RIA.xstack
/* Set the RIA fastcall register */
void __fastcall__ ria_set_axsreg(unsigned long axsreg);
void __fastcall__ ria_set_ax(unsigned int ax);
void __fastcall__ ria_set_axsreg (unsigned long axsreg);
void __fastcall__ ria_set_ax (unsigned int ax);
#define ria_set_a(v) RIA.a = v
/* Run an OS operation */
int __fastcall__ ria_call_int(unsigned char op);
long __fastcall__ ria_call_long(unsigned char op);
int __fastcall__ ria_call_int (unsigned char op);
long __fastcall__ ria_call_long (unsigned char op);
/* These run _mappederrno() on error */
int __fastcall__ ria_call_int_errno(unsigned char op);
long __fastcall__ ria_call_long_errno(unsigned char op);
int __fastcall__ ria_call_int_errno (unsigned char op);
long __fastcall__ ria_call_long_errno (unsigned char op);
/* OS operation numbers */
@ -99,15 +117,15 @@ long __fastcall__ ria_call_long_errno(unsigned char op);
/* C API for the operating system. */
int __cdecl__ xreg(char device, char channel, unsigned char address, ...);
int __fastcall__ phi2(void);
int __fastcall__ codepage(void);
long __fastcall__ lrand(void);
int __fastcall__ stdin_opt(unsigned long ctrl_bits, unsigned char str_length);
int __fastcall__ read_xstack(void *buf, unsigned count, int fildes);
int __fastcall__ read_xram(unsigned buf, unsigned count, int fildes);
int __fastcall__ write_xstack(const void *buf, unsigned count, int fildes);
int __fastcall__ write_xram(unsigned buf, unsigned count, int fildes);
int __cdecl__ xreg (char device, char channel, unsigned char address, ...);
int __fastcall__ phi2 (void);
int __fastcall__ codepage (void);
long __fastcall__ lrand (void);
int __fastcall__ stdin_opt (unsigned long ctrl_bits, unsigned char str_length);
int __fastcall__ read_xstack (void* buf, unsigned count, int fildes);
int __fastcall__ read_xram (unsigned buf, unsigned count, int fildes);
int __fastcall__ write_xstack (const void* buf, unsigned count, int fildes);
int __fastcall__ write_xram (unsigned buf, unsigned count, int fildes);
/* XREG location helpers */

View File

@ -1,16 +1,8 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <errno.h>
int __fastcall__ close(int fd)
int __fastcall__ close (int fd)
{
ria_set_ax(fd);
return ria_call_int_errno(RIA_OP_CLOSE);
ria_set_ax (fd);
return ria_call_int_errno (RIA_OP_CLOSE);
}

View File

@ -1,14 +1,6 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
int __fastcall__ codepage(void)
int __fastcall__ codepage (void)
{
return ria_call_int(RIA_OP_CODEPAGE);
return ria_call_int (RIA_OP_CODEPAGE);
}

View File

@ -1,10 +1,7 @@
; Copyright (c) 2023 Rumbledethumps
;
; SPDX-License-Identifier: Zlib
; SPDX-License-Identifier: BSD-3-Clause
; SPDX-License-Identifier: Unlicense
; Boilerplate crt0.s
; 2023, Rumbledethumps
;
; crt0.s
.export _init, _exit
.import _main

View File

@ -1,18 +1,10 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <time.h>
extern int __clock_gettimespec(struct timespec *ts, unsigned char op);
extern int __clock_gettimespec (struct timespec* ts, unsigned char op);
int clock_getres(clockid_t clock_id, struct timespec *res)
int clock_getres (clockid_t clock_id, struct timespec* res)
{
ria_set_ax(clock_id);
return __clock_gettimespec(res, RIA_OP_CLOCK_GETRES);
ria_set_ax (clock_id);
return __clock_gettimespec (res, RIA_OP_CLOCK_GETRES);
}

View File

@ -1,20 +1,12 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <time.h>
extern int __clock_gettimespec(struct timespec *ts, unsigned char op);
extern int __clock_gettimespec (struct timespec* ts, unsigned char op);
int clock_gettime(clockid_t clock_id, struct timespec *tp)
int clock_gettime (clockid_t clock_id, struct timespec* tp)
{
(void)clock_id;
/* time.s doesn't set the stack value for clock_id (bug?) */
ria_set_ax(CLOCK_REALTIME);
return __clock_gettimespec(tp, RIA_OP_CLOCK_GETTIME);
ria_set_ax (CLOCK_REALTIME);
return __clock_gettimespec (tp, RIA_OP_CLOCK_GETTIME);
}

View File

@ -1,22 +1,13 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <time.h>
int __clock_gettimespec(struct timespec *ts, unsigned char op)
int __clock_gettimespec (struct timespec* ts, unsigned char op)
/* Internal method shared by clock_getres and clock_gettime. */
{
int ax = ria_call_int_errno(op);
if (ax >= 0)
{
ts->tv_sec = ria_pop_long();
ts->tv_nsec = ria_pop_long();
int ax = ria_call_int_errno (op);
if (ax >= 0) {
ts->tv_sec = ria_pop_long ();
ts->tv_nsec = ria_pop_long ();
}
return ax;
}

View File

@ -1,24 +1,15 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <time.h>
int clock_gettimezone(clockid_t clock_id, struct _timezone *tz)
int clock_gettimezone (clockid_t clock_id, struct _timezone* tz)
{
int ax;
ria_set_ax(clock_id);
ax = ria_call_int_errno(RIA_OP_CLOCK_GETTIMEZONE);
if (ax >= 0)
{
ria_set_ax (clock_id);
ax = ria_call_int_errno (RIA_OP_CLOCK_GETTIMEZONE);
if (ax >= 0) {
char i;
for (i = 0; i < sizeof(struct _timezone); i++)
((char *)tz)[i] = ria_pop_char();
for (i = 0; i < sizeof (struct _timezone); i++)
((char*)tz)[i] = ria_pop_char ();
}
return ax;
}

View File

@ -1,8 +1,6 @@
; Copyright (c) 2023 Rumbledethumps
;
; SPDX-License-Identifier: Zlib
; SPDX-License-Identifier: BSD-3-Clause
; SPDX-License-Identifier: Unlicense
; 2023, Rumbledethumps
;
.constructor initenv, 24
.import __environ, __envcount, __envsize

View File

@ -1,8 +1,7 @@
; Copyright (c) 2023 Rumbledethumps
;
; SPDX-License-Identifier: Zlib
; SPDX-License-Identifier: BSD-3-Clause
; SPDX-License-Identifier: Unlicense
; 2023, Rumbledethumps
;
; Enables the C IRQ tools
.export initirq, doneirq
.import callirq, _exit

View File

@ -1,14 +1,6 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
long __fastcall__ lrand(void)
long __fastcall__ lrand (void)
{
return ria_call_long(RIA_OP_LRAND);
return ria_call_long (RIA_OP_LRAND);
}

View File

@ -1,19 +1,11 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <unistd.h>
off_t __fastcall__ lseek(int fd, off_t offset, int whence)
off_t __fastcall__ lseek (int fd, off_t offset, int whence)
{
/* Modified argument order for short stacking offset */
ria_push_long(offset);
ria_push_char(whence);
ria_set_ax(fd);
return ria_call_long_errno(RIA_OP_LSEEK);
ria_push_long (offset);
ria_push_char (whence);
ria_set_ax (fd);
return ria_call_long_errno (RIA_OP_LSEEK);
}

View File

@ -1,8 +1,7 @@
; Copyright (c) 2023 Rumbledethumps
;
; SPDX-License-Identifier: Zlib
; SPDX-License-Identifier: BSD-3-Clause
; SPDX-License-Identifier: Unlicense
; 2023, Rumbledethumps
;
; No arguments
.constructor initmainargs, 24
.import __argc, __argv

View File

@ -1,26 +1,16 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <errno.h>
#include <string.h>
int __cdecl__ open(const char *name, int flags, ...)
int __cdecl__ open (const char* name, int flags, ...)
{
size_t namelen = strlen(name);
if (namelen > 255)
{
return _mappederrno(EINVAL);
size_t namelen = strlen (name);
if (namelen > 255) {
return _mappederrno (EINVAL);
}
while (namelen)
{
ria_push_char(name[--namelen]);
while (namelen) {
ria_push_char (name[--namelen]);
}
ria_set_ax(flags);
return ria_call_int_errno(RIA_OP_OPEN);
ria_set_ax (flags);
return ria_call_int_errno (RIA_OP_OPEN);
}

View File

@ -1,14 +1,6 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
int __fastcall__ phi2(void)
int __fastcall__ phi2 (void)
{
return ria_call_int(RIA_OP_PHI2);
return ria_call_int (RIA_OP_PHI2);
}

View File

@ -1,16 +1,8 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <stdlib.h>
// Non-standard cc65
void _randomize(void)
void _randomize (void)
{
srand(ria_call_int(RIA_OP_LRAND));
srand (ria_call_int (RIA_OP_LRAND));
}

View File

@ -1,29 +1,18 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <unistd.h>
int __fastcall__ read(int fildes, void *buf, unsigned count)
int __fastcall__ read (int fildes, void* buf, unsigned count)
{
int total = 0;
while (count)
{
while (count) {
unsigned blockcount = (count > 256) ? 256 : count;
int bytes_read = read_xstack(&((char *)buf)[total], blockcount, fildes);
if (bytes_read < 0)
{
int bytes_read = read_xstack (&((char*)buf)[total], blockcount, fildes);
if (bytes_read < 0) {
return bytes_read;
}
total += bytes_read;
count -= bytes_read;
if (bytes_read < blockcount)
{
if (bytes_read < blockcount) {
break;
}
}

View File

@ -1,17 +1,9 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
int __fastcall__ read_xram(unsigned buf, unsigned count, int fildes)
int __fastcall__ read_xram (unsigned buf, unsigned count, int fildes)
{
ria_push_int(buf);
ria_push_int(count);
ria_set_ax(fildes);
return ria_call_int_errno(RIA_OP_READ_XRAM);
ria_push_int (buf);
ria_push_int (count);
ria_set_ax (fildes);
return ria_call_int_errno (RIA_OP_READ_XRAM);
}

View File

@ -1,22 +1,13 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
int __fastcall__ read_xstack(void *buf, unsigned count, int fildes)
int __fastcall__ read_xstack (void* buf, unsigned count, int fildes)
{
int i, ax;
ria_push_int(count);
ria_set_ax(fildes);
ax = ria_call_int_errno(RIA_OP_READ_XSTACK);
for (i = 0; i < ax; i++)
{
((char *)buf)[i] = ria_pop_char();
ria_push_int (count);
ria_set_ax (fildes);
ax = ria_call_int_errno (RIA_OP_READ_XSTACK);
for (i = 0; i < ax; i++) {
((char*)buf)[i] = ria_pop_char ();
}
return ax;
}

View File

@ -1,8 +1,7 @@
; Copyright (c) 2023 Rumbledethumps
;
; SPDX-License-Identifier: Zlib
; SPDX-License-Identifier: BSD-3-Clause
; SPDX-License-Identifier: Unlicense
; 2023, Rumbledethumps
;
; Helpers for building API shims
.include "rp6502.inc"

View File

@ -1,18 +1,10 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <time.h>
int clock_settime(clockid_t clock_id, const struct timespec *tp)
int clock_settime (clockid_t clock_id, const struct timespec* tp)
{
ria_set_ax(clock_id);
ria_push_long(tp->tv_nsec);
ria_push_long(tp->tv_sec);
return ria_call_int_errno(RIA_OP_CLOCK_SETTIME);
ria_set_ax (clock_id);
ria_push_long (tp->tv_nsec);
ria_push_long (tp->tv_sec);
return ria_call_int_errno (RIA_OP_CLOCK_SETTIME);
}

View File

@ -1,16 +1,9 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
int __fastcall__ stdin_opt(unsigned long ctrl_bits, unsigned char str_length)
int __fastcall__ stdin_opt (unsigned long ctrl_bits, unsigned char str_length)
{
ria_push_long(ctrl_bits);
ria_set_a(str_length);
return ria_call_int_errno(RIA_OP_STDIN_OPT);
ria_push_long (ctrl_bits);
ria_set_a (str_length);
return ria_call_int_errno (RIA_OP_STDIN_OPT);
}

View File

@ -1,26 +1,16 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <errno.h>
#include <string.h>
unsigned char __fastcall__ _sysremove(const char *name)
unsigned char __fastcall__ _sysremove (const char* name)
{
size_t namelen;
namelen = strlen(name);
if (namelen > 255)
{
return _mappederrno(EINVAL);
namelen = strlen (name);
if (namelen > 255) {
return _mappederrno (EINVAL);
}
while (namelen)
{
ria_push_char(name[--namelen]);
while (namelen) {
ria_push_char (name[--namelen]);
}
return ria_call_int_errno(RIA_OP_UNLINK);
return ria_call_int_errno (RIA_OP_UNLINK);
}

View File

@ -1,32 +1,21 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <errno.h>
#include <string.h>
unsigned char __fastcall__ _sysrename(const char *oldpath, const char *newpath)
unsigned char __fastcall__ _sysrename (const char* oldpath, const char* newpath)
{
size_t oldpathlen, newpathlen;
oldpathlen = strlen(oldpath);
newpathlen = strlen(newpath);
if (oldpathlen + newpathlen > 254)
{
return _mappederrno(EINVAL);
oldpathlen = strlen (oldpath);
newpathlen = strlen (newpath);
if (oldpathlen + newpathlen > 254) {
return _mappederrno (EINVAL);
}
while (oldpathlen)
{
ria_push_char(oldpath[--oldpathlen]);
while (oldpathlen) {
ria_push_char (oldpath[--oldpathlen]);
}
ria_push_char(0);
while (newpathlen)
{
ria_push_char(newpath[--newpathlen]);
ria_push_char (0);
while (newpathlen) {
ria_push_char (newpath[--newpathlen]);
}
return ria_call_int_errno(RIA_OP_RENAME);
return ria_call_int_errno (RIA_OP_RENAME);
}

View File

@ -1,29 +1,18 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
#include <unistd.h>
int __fastcall__ write(int fildes, const void *buf, unsigned count)
int __fastcall__ write (int fildes, const void* buf, unsigned count)
{
int ax, total = 0;
while (count)
{
while (count) {
int blockcount = (count > 256) ? 256 : count;
ax = write_xstack(&((char *)buf)[total], blockcount, fildes);
if (ax < 0)
{
ax = write_xstack (&((char*)buf)[total], blockcount, fildes);
if (ax < 0) {
return ax;
}
total += ax;
count -= ax;
if (ax < blockcount)
{
if (ax < blockcount) {
break;
}
}

View File

@ -1,17 +1,9 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
int __fastcall__ write_xram(unsigned buf, unsigned count, int fildes)
int __fastcall__ write_xram (unsigned buf, unsigned count, int fildes)
{
ria_push_int(buf);
ria_push_int(count);
ria_set_ax(fildes);
return ria_call_int_errno(RIA_OP_WRITE_XRAM);
ria_push_int (buf);
ria_push_int (count);
ria_set_ax (fildes);
return ria_call_int_errno (RIA_OP_WRITE_XRAM);
}

View File

@ -1,20 +1,11 @@
/*
* Copyright (c) 2023 Rumbledethumps
*
* SPDX-License-Identifier: Zlib
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: Unlicense
*/
#include <rp6502.h>
int __fastcall__ write_xstack(const void *buf, unsigned count, int fildes)
int __fastcall__ write_xstack (const void* buf, unsigned count, int fildes)
{
unsigned i;
for (i = count; i;)
{
ria_push_char(((char *)buf)[--i]);
for (i = count; i;) {
ria_push_char (((char*)buf)[--i]);
}
ria_set_ax(fildes);
return ria_call_int_errno(RIA_OP_WRITE_XSTACK);
ria_set_ax (fildes);
return ria_call_int_errno (RIA_OP_WRITE_XSTACK);
}

View File

@ -1,9 +1,6 @@
; Copyright (c) 2023 Rumbledethumps
;
; SPDX-License-Identifier: Zlib
; SPDX-License-Identifier: BSD-3-Clause
; SPDX-License-Identifier: Unlicense
; 2023, Rumbledethumps
;
; CC65 will promote variadic char arguments to int. It will not demote longs.
; int __cdecl__ xreg(char device, char channel, unsigned char address, ...);