You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(35) |
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(37) |
Feb
(10) |
Mar
|
Apr
(2) |
May
(17) |
Jun
(1) |
Jul
(14) |
Aug
(14) |
Sep
(4) |
Oct
|
Nov
(14) |
Dec
(4) |
2005 |
Jan
(6) |
Feb
|
Mar
|
Apr
(6) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
(92) |
Dec
(12) |
2006 |
Jan
(3) |
Feb
(4) |
Mar
|
Apr
(5) |
May
(3) |
Jun
(15) |
Jul
(3) |
Aug
(1) |
Sep
(29) |
Oct
(1) |
Nov
(6) |
Dec
(5) |
2007 |
Jan
(2) |
Feb
(2) |
Mar
|
Apr
(3) |
May
(14) |
Jun
(2) |
Jul
(16) |
Aug
(73) |
Sep
(12) |
Oct
(9) |
Nov
(27) |
Dec
(3) |
2008 |
Jan
(4) |
Feb
(4) |
Mar
(3) |
Apr
(8) |
May
(23) |
Jun
(4) |
Jul
(1) |
Aug
(3) |
Sep
(7) |
Oct
(5) |
Nov
(1) |
Dec
(1) |
2009 |
Jan
|
Feb
(10) |
Mar
|
Apr
(4) |
May
(4) |
Jun
(10) |
Jul
|
Aug
(1) |
Sep
|
Oct
(7) |
Nov
|
Dec
(1) |
2010 |
Jan
|
Feb
(1) |
Mar
|
Apr
(6) |
May
|
Jun
(3) |
Jul
(11) |
Aug
(1) |
Sep
|
Oct
(15) |
Nov
(1) |
Dec
(5) |
2011 |
Jan
(4) |
Feb
(1) |
Mar
(6) |
Apr
|
May
(22) |
Jun
|
Jul
(8) |
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
(2) |
2012 |
Jan
|
Feb
(10) |
Mar
(1) |
Apr
(6) |
May
(27) |
Jun
(48) |
Jul
(30) |
Aug
(4) |
Sep
|
Oct
(3) |
Nov
(1) |
Dec
(11) |
2013 |
Jan
(4) |
Feb
(7) |
Mar
(6) |
Apr
(18) |
May
(28) |
Jun
(20) |
Jul
|
Aug
(4) |
Sep
(1) |
Oct
(1) |
Nov
(2) |
Dec
(7) |
2014 |
Jan
(3) |
Feb
(2) |
Mar
(4) |
Apr
(9) |
May
(11) |
Jun
(10) |
Jul
|
Aug
(18) |
Sep
(12) |
Oct
(17) |
Nov
(10) |
Dec
(16) |
2015 |
Jan
(5) |
Feb
(1) |
Mar
(5) |
Apr
(4) |
May
(28) |
Jun
(2) |
Jul
|
Aug
|
Sep
(6) |
Oct
|
Nov
(2) |
Dec
(1) |
2016 |
Jan
(14) |
Feb
|
Mar
(3) |
Apr
|
May
|
Jun
(3) |
Jul
(4) |
Aug
(4) |
Sep
(1) |
Oct
(1) |
Nov
|
Dec
(1) |
2017 |
Jan
(11) |
Feb
|
Mar
(21) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2018 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
(2) |
Sep
(4) |
Oct
(4) |
Nov
|
Dec
(1) |
2019 |
Jan
(1) |
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
(13) |
Sep
(4) |
Oct
|
Nov
|
Dec
|
2020 |
Jan
(10) |
Feb
(9) |
Mar
(5) |
Apr
(4) |
May
(3) |
Jun
(18) |
Jul
(4) |
Aug
(2) |
Sep
(20) |
Oct
(2) |
Nov
|
Dec
|
2021 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(1) |
Jun
(2) |
Jul
(1) |
Aug
(2) |
Sep
|
Oct
|
Nov
|
Dec
(2) |
2022 |
Jan
(1) |
Feb
(2) |
Mar
(2) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
(5) |
Sep
|
Oct
(1) |
Nov
|
Dec
(1) |
2023 |
Jan
(10) |
Feb
(7) |
Mar
(29) |
Apr
(31) |
May
(29) |
Jun
(34) |
Jul
(3) |
Aug
(24) |
Sep
(22) |
Oct
(10) |
Nov
(38) |
Dec
(27) |
2024 |
Jan
(15) |
Feb
(8) |
Mar
(4) |
Apr
(20) |
May
(33) |
Jun
(18) |
Jul
(15) |
Aug
(23) |
Sep
(8) |
Oct
|
Nov
|
Dec
|
From: quzar <qu...@us...> - 2024-09-18 00:54:24
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via fd9f323eeddea8970ec595ca49cb40e68b208520 (commit) from 8e783b8ae5c54b510efa7f958aa37fa6fb17041b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit fd9f323eeddea8970ec595ca49cb40e68b208520 Author: Andy Barajas <and...@gm...> Date: Tue Sep 17 17:46:30 2024 -0700 Add getpeername() (#718) Added getpeername to sockets to help with cURL kos-port ----------------------------------------------------------------------- Summary of changes: include/kos/fs_socket.h | 33 ++++++++++++++----- include/sys/socket.h | 32 ++++++++++++++++++ kernel/fs/fs_socket.c | 24 ++++++++++++++ kernel/net/net_tcp.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ kernel/net/net_udp.c | 76 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 244 insertions(+), 8 deletions(-) diff --git a/include/kos/fs_socket.h b/include/kos/fs_socket.h index 46285cfc..bd58ea2d 100644 --- a/include/kos/fs_socket.h +++ b/include/kos/fs_socket.h @@ -325,17 +325,34 @@ typedef struct fs_socket_proto { Currently all options (regardless of level) are passed onto the protocol handler. - \param s The socket to get the name of. - \param name Pointer to a sockaddr structure which will hold - the resulting address information. - \param name_len The amount of space pointed to by name, in - bytes. On return, this is set to the actual size - of the returned address information. - \retval -1 On error (set errno appropriately). - \retval 0 On success. + \param s The socket to get the name of. + \param name Pointer to a sockaddr structure which will hold + the resulting address information. + \param name_len The amount of space pointed to by name, in + bytes. On return, this is set to the actual size + of the returned address information. + \retval -1 On error (with errno set appropriately). + \retval 0 On success. */ int (*getsockname)(net_socket_t *s, struct sockaddr *name, socklen_t *name_len); + /** \brief Get the name of the peer connected to a socket created with the + protocol. + + This function should implement the ::getpeername() system call for the + protocol. The semantics are exactly as expected for that function. + + \param s The socket from which to get the peer address. + \param name Pointer to a sockaddr structure which will hold + the resulting address information. + \param name_len The amount of space pointed to by name, in + bytes. On return, this is set to the actual size + of the returned address information. + \retval -1 On error (with errno set appropriately). + \retval 0 On success. + */ + int (*getpeername)(net_socket_t *s, struct sockaddr *name, socklen_t *name_len); + /** \brief Manipulate file options. This function should implement the fcntl() system call for the given diff --git a/include/sys/socket.h b/include/sys/socket.h index 40744199..da174d27 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -387,6 +387,38 @@ int socket(int domain, int type, int protocol); */ int getsockname(int socket, struct sockaddr *name, socklen_t *name_len); +/** + \brief Get the name of the connected peer socket. + + This function retrieves the address of the peer connected to the socket + specified by the socket descriptor. The address is returned in the buffer + pointed to by the name parameter, and the actual length of the address is + returned in the name_len parameter. + + \param socket A socket that is already connected to a peer. + \param name A pointer to a sockaddr structure where the peer + address will be stored. + \param name_len A pointer to a socklen_t variable that specifies the + length of the address structure. + On return, it will contain the actual size of the + address returned. + + \retval 0 On success. + \retval -1 On error, sets errno as appropriate, such as: + - EBADF: The socket argument is not a valid file + descriptor. + - EFAULT: The addr argument points to memory not in a + valid part of the process address space. + - ENOBUFS: Insufficient resources were available in the + system to perform the operation. + - ENOTCONN: The socket is not connected. + - ENOTSOCK: The socket argument does not refer to a + socket. + - EOPNOTSUPP: The socket does not support getpeername. +*/ +int getpeername(int socket, struct sockaddr *__RESTRICT name, + socklen_t *__RESTRICT name_len); + /** \brief Get socket options. This function retrieves options associated with a socket. This function diff --git a/kernel/fs/fs_socket.c b/kernel/fs/fs_socket.c index 7465e890..8f766811 100644 --- a/kernel/fs/fs_socket.c +++ b/kernel/fs/fs_socket.c @@ -542,6 +542,30 @@ int getsockname(int sock, struct sockaddr *name, socklen_t *name_len) { return hnd->protocol->getsockname(hnd, name, name_len); } +int getpeername(int sock, struct sockaddr *__RESTRICT name, socklen_t *__RESTRICT name_len) { + net_socket_t *hnd; + + hnd = (net_socket_t *)fs_get_handle(sock); + + if(hnd == NULL) { + errno = EBADF; + return -1; + } + + /* Make sure this is actually a socket. */ + if(fs_get_handler(sock) != &vh) { + errno = ENOTSOCK; + return -1; + } + + if(!hnd->protocol->getpeername) { + errno = EOPNOTSUPP; + return -1; + } + + return hnd->protocol->getpeername(hnd, name, name_len); +} + int getsockopt(int sock, int level, int option_name, void *option_value, socklen_t *option_len) { net_socket_t *hnd; diff --git a/kernel/net/net_tcp.c b/kernel/net/net_tcp.c index 9e0fe06b..f4902d61 100644 --- a/kernel/net/net_tcp.c +++ b/kernel/net/net_tcp.c @@ -1797,6 +1797,92 @@ ret_success: return 0; } +static int net_tcp_getpeername(net_socket_t *hnd, struct sockaddr *name, socklen_t *name_len) { + struct tcp_sock *sock; + struct sockaddr_in realaddr; + struct sockaddr_in6 realaddr6; + + if(!name || !name_len) { + errno = EFAULT; + return -1; + } + + if(irq_inside_int()) { + if(rwsem_read_trylock(&tcp_sem)) { + errno = EWOULDBLOCK; + return -1; + } + } else { + rwsem_read_lock(&tcp_sem); + } + + if(!(sock = (struct tcp_sock *)hnd->data)) { + rwsem_read_unlock(&tcp_sem); + errno = EBADF; + return -1; + } + + if(irq_inside_int()) { + if(mutex_trylock(&sock->mutex)) { + rwsem_read_unlock(&tcp_sem); + errno = EWOULDBLOCK; + return -1; + } + } else { + mutex_lock(&sock->mutex); + } + + if(sock->state == TCP_STATE_CLOSED) { + mutex_unlock(&sock->mutex); + rwsem_read_unlock(&tcp_sem); + errno = ENOTCONN; + return -1; + } + + if(sock->domain == AF_INET) { + memset(&realaddr, 0, sizeof(struct sockaddr_in)); + realaddr.sin_family = AF_INET; + realaddr.sin_addr.s_addr = + sock->remote_addr.sin6_addr.__s6_addr.__s6_addr32[3]; + realaddr.sin_port = sock->remote_addr.sin6_port; + + if(*name_len <= sizeof(struct sockaddr_in)) { + /* Passed in a structure not big enough so truncate*/ + memcpy(name, &realaddr, *name_len); + errno = ENOBUFS; + } else { + memcpy(name, &realaddr, sizeof(struct sockaddr_in)); + *name_len = sizeof(struct sockaddr_in); + goto ret_success; + } + } else if(sock->domain == AF_INET6) { + memset(&realaddr6, 0, sizeof(struct sockaddr_in6)); + realaddr6.sin6_family = AF_INET6; + realaddr6.sin6_addr = sock->remote_addr.sin6_addr; + realaddr6.sin6_port = sock->remote_addr.sin6_port; + + if(*name_len <= sizeof(struct sockaddr_in6)) { + /* Passed in a structure not big enough */ + memcpy(name, &realaddr6, *name_len); + errno = ENOBUFS; + } else { + memcpy(name, &realaddr6, sizeof(struct sockaddr_in6)); + *name_len = sizeof(struct sockaddr_in6); + goto ret_success; + } + } + + mutex_unlock(&sock->mutex); + rwsem_read_unlock(&tcp_sem); + errno = ENOTSOCK; + return -1; + +ret_success: + mutex_unlock(&sock->mutex); + rwsem_read_unlock(&tcp_sem); + return 0; +} + static int net_tcp_fcntl(net_socket_t *hnd, int cmd, va_list ap) { struct tcp_sock *sock; @@ -2871,6 +2957,7 @@ static fs_socket_proto_t proto = { net_tcp_getsockopt, /* getsockopt */ net_tcp_setsockopt, /* setsockopt */ net_tcp_getsockname, /* getsockname */ + net_tcp_getpeername, /* getpeername */ net_tcp_fcntl, /* fcntl */ net_tcp_poll /* poll */ }; diff --git a/kernel/net/net_udp.c b/kernel/net/net_udp.c index 9a7e5fc8..6e812680 100644 --- a/kernel/net/net_udp.c +++ b/kernel/net/net_udp.c @@ -960,6 +960,80 @@ ret_success: return 0; } +static int net_udp_getpeername(net_socket_t *hnd, struct sockaddr *name, socklen_t *name_len) { + struct udp_sock *sock; + struct sockaddr_in realaddr; + struct sockaddr_in6 realaddr6; + + if(!name || !name_len) { + errno = EFAULT; + return -1; + } + + if(irq_inside_int()) { + if(mutex_trylock(&udp_mutex) == -1) { + errno = EWOULDBLOCK; + return -1; + } + } else { + mutex_lock(&udp_mutex); + } + + if(!(sock = (struct udp_sock *)hnd->data)) { + mutex_unlock(&udp_mutex); + errno = EBADF; + return -1; + } + + /* If the socket is not connected, return an error */ + if(IN6_IS_ADDR_UNSPECIFIED(&sock->remote_addr.sin6_addr) || sock->remote_addr.sin6_port == 0) { + mutex_unlock(&udp_mutex); + errno = ENOTCONN; + return -1; + } + + /* Depending on the socket domain, return the appropriate address structure */ + if(sock->domain == AF_INET) { + memset(&realaddr, 0, sizeof(struct sockaddr_in)); + realaddr.sin_family = AF_INET; + realaddr.sin_addr.s_addr = sock->remote_addr.sin6_addr.__s6_addr.__s6_addr32[3]; + realaddr.sin_port = sock->remote_addr.sin6_port; + + if(*name_len <= sizeof(struct sockaddr_in)) { + /* Passed in a structure not big enough so truncate*/ + memcpy(name, &realaddr, *name_len); + errno = ENOBUFS; + } else { + memcpy(name, &realaddr, sizeof(struct sockaddr_in)); + *name_len = sizeof(struct sockaddr_in); + goto ret_success; + } + } else if(sock->domain == AF_INET6) { + memset(&realaddr6, 0, sizeof(struct sockaddr_in6)); + realaddr6.sin6_family = AF_INET6; + realaddr6.sin6_addr = sock->remote_addr.sin6_addr; + realaddr6.sin6_port = sock->remote_addr.sin6_port; + + if(*name_len <= sizeof(struct sockaddr_in6)) { + /* Passed in a structure not big enough */ + memcpy(name, &realaddr6, *name_len); + errno = ENOBUFS; + } else { + memcpy(name, &realaddr6, sizeof(struct sockaddr_in6)); + *name_len = sizeof(struct sockaddr_in6); + goto ret_success; + } + } + + mutex_unlock(&udp_mutex); + errno = ENOTSOCK; + return -1; + +ret_success: + mutex_unlock(&udp_mutex); + return 0; +} + static int net_udp_fcntl(net_socket_t *hnd, int cmd, va_list ap) { struct udp_sock *sock; long val; @@ -1433,6 +1507,7 @@ static fs_socket_proto_t proto = { net_udp_getsockopt, net_udp_setsockopt, net_udp_getsockname, + net_udp_getpeername, net_udp_fcntl, net_udp_poll }; @@ -1455,6 +1530,7 @@ static fs_socket_proto_t proto_lite = { net_udp_getsockopt, net_udp_setsockopt, net_udp_getsockname, + net_udp_getpeername, net_udp_fcntl, net_udp_poll }; hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: quzar <qu...@us...> - 2024-09-17 02:51:22
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 8e783b8ae5c54b510efa7f958aa37fa6fb17041b (commit) from b14b8d0a8f9d9949277637894be77958c4126f0a (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8e783b8ae5c54b510efa7f958aa37fa6fb17041b Author: darcagn <da...@pr...> Date: Mon Sep 16 21:43:27 2024 -0500 Prevent thd_shutdown() from destroying kernel thread (#757) ----------------------------------------------------------------------- Summary of changes: kernel/thread/thread.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/thread/thread.c b/kernel/thread/thread.c index 319149de..017279fd 100644 --- a/kernel/thread/thread.c +++ b/kernel/thread/thread.c @@ -1131,7 +1131,8 @@ void thd_shutdown(void) { /* Kill remaining live threads */ LIST_FOREACH_SAFE(cur, &thd_list, t_list, tmp) { - thd_destroy(cur); + if(cur->tid != 1) + thd_destroy(cur); } sem_destroy(&thd_reap_sem); hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: quzar <qu...@us...> - 2024-09-17 02:19:30
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via b14b8d0a8f9d9949277637894be77958c4126f0a (commit) via 35e5abd1dc778fb45364275d9d629a71a2b1c856 (commit) via 63b9b9637bd67af8702b40eb0c5389d4f9c21e50 (commit) via 73f9d0ee9faad816bceb2d76fad185808f53cbb2 (commit) via 51e5ffb2a4cdeaf04c119bd133124b26c716f172 (commit) via 2a32b2151a48e051ad091923145f001f4d411c8b (commit) via 30fc866daabd75ed216220a223bb9c0ae9ab9365 (commit) via d8417b4a9a2d3a130f023a8b321190f474436078 (commit) via 86165fbb8d94f083d23437bf86abb697948f119b (commit) via ce249f9a3d72a38b999550065e1c22a00366a74d (commit) via 8a240ed9d9066088a7216ccc11e27425ce141b14 (commit) via 089b5b315e35e9df84ad04f783913d57f4485797 (commit) via bab7e8890ada902608afd34613b988bb34cfed17 (commit) via 06011e1bf40adda17f271741eab65d606a923f95 (commit) via bf189670e954d9036b772d66c823a9f4b6c93c6f (commit) via bab4b3c363b4dc8e84ccb120467f0026df64062b (commit) via e8a3a8539e6fed103cc65e7dd46671e865e25a44 (commit) via 3acda030702cf823712851b296b7591899d8faee (commit) via dccd296d9cfa6fdc396f6c1472518e87216b68cb (commit) via 161ab3fcd7608fb9ff5a0f695c9ed19bc8534122 (commit) from 01555798061d1fbb552dfef251989b2e0555c472 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b14b8d0a8f9d9949277637894be77958c4126f0a Merge: 63b9b963 35e5abd1 Author: Donald Haase <qu...@ya...> Date: Mon Sep 16 22:18:48 2024 -0400 Merge pull request #637 from pcercuei/irqsafe Add IRQ-safe mutex / rwsem functions, and scoped mutexes commit 35e5abd1dc778fb45364275d9d629a71a2b1c856 Merge: ce249f9a 63b9b963 Author: Donald Haase <qu...@ya...> Date: Mon Sep 16 22:16:15 2024 -0400 Merge branch 'master' into irqsafe commit 63b9b9637bd67af8702b40eb0c5389d4f9c21e50 Merge: 73f9d0ee 2a32b215 Author: Luke Benstead <ka...@gm...> Date: Sat Sep 7 18:23:00 2024 +0100 Merge pull request #741 from skmp/fixed_aica_lut aica: Fix the volume LUT commit 73f9d0ee9faad816bceb2d76fad185808f53cbb2 Merge: 01555798 51e5ffb2 Author: Luke Benstead <ka...@gm...> Date: Sat Sep 7 18:15:47 2024 +0100 Merge pull request #742 from skmp/aica_channel_shifts aica: Channel masks are 64 bits, use ULL consts commit 51e5ffb2a4cdeaf04c119bd133124b26c716f172 Author: Stefanos Kornilios Mitsis Poiitidis <sk...@ni...> Date: Sat Sep 7 19:25:08 2024 +0300 aica: Channel masks are 64 bits, use ULL consts commit 2a32b2151a48e051ad091923145f001f4d411c8b Author: Stefanos Kornilios Mitsis Poiitidis <sk...@ni...> Date: Sat Sep 7 10:57:23 2024 +0300 aica: remove not required masking from log lookup commit 30fc866daabd75ed216220a223bb9c0ae9ab9365 Author: Stefanos Kornilios Mitsis Poiitidis <sk...@ni...> Date: Sat Sep 7 10:35:17 2024 +0300 Add prebuilt driver commit d8417b4a9a2d3a130f023a8b321190f474436078 Author: Stefanos Kornilios Mitsis Poiitidis <st...@sk...v> Date: Sat Sep 7 10:25:42 2024 +0300 Apply suggestions from code review Co-authored-by: Andy Barajas <and...@gm...> commit 86165fbb8d94f083d23437bf86abb697948f119b Author: Stefanos Kornilios Mitsis Poiitidis <sk...@ni...> Date: Fri Sep 6 18:35:12 2024 +0300 aica: Fix the volume LUT commit ce249f9a3d72a38b999550065e1c22a00366a74d Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 20:30:48 2024 +0200 fs: socket: Use mutex_lock_irqsafe() / mutex_lock_scoped() Factorize code by using the new mutex functions and macros. Signed-off-by: Paul Cercueil <pa...@cr...> commit 8a240ed9d9066088a7216ccc11e27425ce141b14 Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 20:28:32 2024 +0200 fs: pty: Use mutex_lock_scoped() / mutex_lock_irqsafe() Factorize code by using the new mutex functions and macros. Signed-off-by: Paul Cercueil <pa...@cr...> commit 089b5b315e35e9df84ad04f783913d57f4485797 Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 16:31:04 2024 +0200 fs: ramdisk: Use mutex_lock_scoped() Use mutex_lock_scoped() instead of mutex_lock() + mutex_unlock(). Signed-off-by: Paul Cercueil <pa...@cr...> commit bab7e8890ada902608afd34613b988bb34cfed17 Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 19:29:19 2024 +0200 fs: dclsocket: Use mutex_lock_irqsafe() Factorize code by using the new mutex function. Signed-off-by: Paul Cercueil <pa...@cr...> commit 06011e1bf40adda17f271741eab65d606a923f95 Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 20:32:20 2024 +0200 libc: poll: Use mutex_lock_irqsafe() Factorize code by using the new mutex function. Signed-off-by: Paul Cercueil <pa...@cr...> commit bf189670e954d9036b772d66c823a9f4b6c93c6f Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 20:31:29 2024 +0200 exports: Use mutex_lock_irqsafe_scoped() Factorize code by using the new mutex macros. Signed-off-by: Paul Cercueil <pa...@cr...> commit bab4b3c363b4dc8e84ccb120467f0026df64062b Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 20:25:36 2024 +0200 cdrom: Use mutex_lock_scoped() / mutex_lock_irqsafe() Factorize code by using the new mutex functions and macros. Signed-off-by: Paul Cercueil <pa...@cr...> commit e8a3a8539e6fed103cc65e7dd46671e865e25a44 Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 15:45:24 2024 +0200 net: Use irqsafe mutex/rwmem variants and factorize code - Use irqsafe variants for locking mutexes and semaphores, which translates to the exact same code - Factorize the "lock rwsem, get socket structure, lock socket structure" code Signed-off-by: Paul Cercueil <pa...@cr...> commit 3acda030702cf823712851b296b7591899d8faee Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 15:41:41 2024 +0200 rwsem: Add rwsem_write_lock_irqsafe() / rwsem_read_lock_irqsafe() These functions can be from within an interrupt context. In that case, if the semaphore is already locked, an error will be returned. Signed-off-by: Paul Cercueil <pa...@cr...> commit dccd296d9cfa6fdc396f6c1472518e87216b68cb Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 16:29:27 2024 +0200 mutex: Add mutex_lock_scoped() This macro will lock a mutex, similarly to mutex_lock, with the difference being that the mutex will automatically be unlocked once the execution exits the functional block in which this macro was called. Signed-off-by: Paul Cercueil <pa...@cr...> commit 161ab3fcd7608fb9ff5a0f695c9ed19bc8534122 Author: Paul Cercueil <pa...@cr...> Date: Wed Jun 19 15:39:24 2024 +0200 mutex: Add mutex_lock_irqsafe() This function can be from within an interrupt context. In that case, if the mutex is already locked, an error will be returned. Signed-off-by: Paul Cercueil <pa...@cr...> ----------------------------------------------------------------------- Summary of changes: include/kos/mutex.h | 45 ++ include/kos/rwsem.h | 42 +- kernel/arch/dreamcast/fs/fs_dclsocket.c | 107 +---- kernel/arch/dreamcast/hardware/cdrom.c | 27 +- kernel/arch/dreamcast/sound/arm/aica.c | 52 +-- .../arch/dreamcast/sound/arm/stream.drv.prebuilt | Bin 3244 -> 3228 bytes kernel/arch/dreamcast/sound/snd_sfxmgr.c | 11 +- kernel/arch/dreamcast/sound/snd_stream.c | 7 +- kernel/exports/nmmgr.c | 6 +- kernel/fs/fs_pty.c | 26 +- kernel/fs/fs_ramdisk.c | 109 ++--- kernel/fs/fs_socket.c | 76 +--- kernel/libc/koslib/poll.c | 22 +- kernel/net/net_dhcp.c | 14 +- kernel/net/net_ipv4_frag.c | 15 +- kernel/net/net_multicast.c | 31 +- kernel/net/net_tcp.c | 459 ++++----------------- kernel/net/net_udp.c | 141 ++----- kernel/thread/mutex.c | 7 + kernel/thread/rwsem.c | 14 + 20 files changed, 353 insertions(+), 858 deletions(-) diff --git a/include/kos/mutex.h b/include/kos/mutex.h index 34094d09..67729b65 100644 --- a/include/kos/mutex.h +++ b/include/kos/mutex.h @@ -167,6 +167,29 @@ int mutex_destroy(mutex_t *m); */ int mutex_lock(mutex_t *m); +/** \brief Lock a mutex. + + This function will lock a mutex, if it is not already locked by another + thread. If it is locked by another thread already, this function will block + until the mutex has been acquired for the calling thread. + This function can be called from within an interrupt context. In that case, + if the mutex is already locked, an error will be returned. + + The semantics of this function depend on the type of mutex that is used. + + \param m The mutex to acquire + \retval 0 On success + \retval -1 On error, sets errno as appropriate + + \par Error Conditions: + \em EINVAL - the mutex has not been initialized properly \n + \em EAGAIN - lock has been acquired too many times (recursive), or the + function was called inside an interrupt and the mutex was + already locked \n + \em EDEADLK - would deadlock (error-checking) +*/ +int mutex_lock_irqsafe(mutex_t *m); + /** \brief Lock a mutex (with a timeout). This function will attempt to lock a mutex. If the lock can be acquired @@ -255,6 +278,28 @@ int mutex_unlock(mutex_t *m); */ int mutex_unlock_as_thread(mutex_t *m, kthread_t *thd); +/** \cond */ +static inline void __mutex_scoped_cleanup(mutex_t **m) { + if(*m) + mutex_unlock(*m); +} + +#define ___mutex_lock_scoped(m, l) \ + mutex_t *__scoped_mutex_##l __attribute__((cleanup(__mutex_scoped_cleanup))) = mutex_lock(m) ? NULL : (m) + +#define __mutex_lock_scoped(m, l) ___mutex_lock_scoped(m, l) +/** \endcond */ + +/** \brief Lock a mutex with scope management + + This macro will lock a mutex, similarly to mutex_lock, with the difference + that the mutex will automatically be unlocked once the execution exits the + functional block in which the macro was called. + + \param m The mutex to acquire +*/ +#define mutex_lock_scoped(m) __mutex_lock_scoped((m), __LINE__) + __END_DECLS #endif /* __KOS_MUTEX_H */ diff --git a/include/kos/rwsem.h b/include/kos/rwsem.h index ed3a1945..ad2a05d2 100644 --- a/include/kos/rwsem.h +++ b/include/kos/rwsem.h @@ -121,7 +121,7 @@ int rwsem_read_lock_timed(rw_semaphore_t *s, int timeout); This function attempts to lock the r/w semaphore for reading. If the semaphore is locked for writing, this function will block until it is possible to obtain the lock for reading. This function is <b>NOT</b> safe to - call inside of an interrupt. + call inside of an interrupt; use rwsem_read_lock_irqsafe instead. \param s The r/w semaphore to lock. \retval 0 On success @@ -133,6 +133,25 @@ int rwsem_read_lock_timed(rw_semaphore_t *s, int timeout); */ int rwsem_read_lock(rw_semaphore_t *s); +/** \brief Lock a reader/writer semaphore for reading. + + This function attempts to lock the r/w semaphore for reading. If the + semaphore is locked for writing, this function will block until it is + possible to obtain the lock for reading. + If called within an interrupt context, and the semaphore is already locked, + this function will return an error. + + \param s The r/w semaphore to lock. + \retval 0 On success + \retval -1 On error, errno will be set as appropriate. + + \par Error Conditions: + \em EINVAL - the semaphore is not initialized \n + \em EWOULDBLOCK - called inside an interrupt and the semaphore was + already locked +*/ +int rwsem_read_lock_irqsafe(rw_semaphore_t *s); + /** \brief Lock a reader/writer semaphore for writing (with a timeout). This function attempts to lock the r/w semaphore for writing. If the @@ -158,7 +177,7 @@ int rwsem_write_lock_timed(rw_semaphore_t *s, int timeout); This function attempts to lock the r/w semaphore for writing. If the semaphore is locked for reading or writing, this function will block until it is possible to obtain the lock for writing. This function is <b>NOT</b> - safe to call inside of an interrupt. + safe to call inside of an interrupt; use rwsem_write_lock_irqsafe instead. \param s The r/w semaphore to lock. \retval 0 On success. @@ -170,6 +189,25 @@ int rwsem_write_lock_timed(rw_semaphore_t *s, int timeout); */ int rwsem_write_lock(rw_semaphore_t *s); +/** \brief Lock a reader/writer semaphore for writing. + + This function attempts to lock the r/w semaphore for writing. If the + semaphore is locked for reading or writing, this function will block until + it is possible to obtain the lock for writing. + If called within an interrupt context, and the semaphore is already locked, + this function will return an error. + + \param s The r/w semaphore to lock. + \retval 0 On success. + \retval -1 On error, errno will be set as appropriate. + + \par Error conditions: + \em EINVAL - the semaphore is not initialized \n + \em EWOULDBLOCK - called inside an interrupt and the semaphore was + already locked +*/ +int rwsem_write_lock_irqsafe(rw_semaphore_t *s); + /** \brief Unlock a reader/writer semaphore from a read lock. This function releases one instance of the read lock on the r/w semaphore. diff --git a/kernel/arch/dreamcast/fs/fs_dclsocket.c b/kernel/arch/dreamcast/fs/fs_dclsocket.c index a965d39c..e3365424 100644 --- a/kernel/arch/dreamcast/fs/fs_dclsocket.c +++ b/kernel/arch/dreamcast/fs/fs_dclsocket.c @@ -206,22 +206,14 @@ static void dcls_recv_loop(void) { } static void *dcls_open(struct vfs_handler *vfs, const char *fn, int mode) { - int hnd, locked; - int dcload_mode = 0; + int hnd, dcload_mode = 0; int mm = (mode & O_MODE_MASK); command_t *cmd = (command_t *)pktbuf; (void)vfs; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; - return 0; - } - else if(locked == -1) { - mutex_lock(&mutex); - } + if(mutex_lock_irqsafe(&mutex)) + return NULL; if(mode & O_DIR) { char realfn[fn[0] ? strlen(fn) + 1 : 2]; @@ -286,18 +278,11 @@ static void *dcls_open(struct vfs_handler *vfs, const char *fn, int mode) { } static int dcls_close(void *hnd) { - int fd = (int) hnd, locked; + int fd = (int) hnd; command_int_t *cmd = (command_int_t *)pktbuf; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return -1; - } - else if(locked == -1) { - mutex_lock(&mutex); - } if(fd > 100) { memcpy(cmd->id, "DC17", 4); @@ -322,21 +307,13 @@ static int dcls_close(void *hnd) { static ssize_t dcls_read(void *hnd, void *buf, size_t cnt) { uint32 fd = (uint32) hnd; - int locked; command_3int_t *cmd = (command_3int_t *)pktbuf; if(!fd) return -1; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return -1; - } - else if(locked == -1) { - mutex_lock(&mutex); - } --fd; @@ -355,21 +332,13 @@ static ssize_t dcls_read(void *hnd, void *buf, size_t cnt) { static ssize_t dcls_write(void *hnd, const void *buf, size_t cnt) { uint32 fd = (uint32) hnd; - int locked; command_3int_t *cmd = (command_3int_t *)pktbuf; if(!fd) return -1; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return -1; - } - else if(locked == -1) { - mutex_lock(&mutex); - } --fd; @@ -388,21 +357,13 @@ static ssize_t dcls_write(void *hnd, const void *buf, size_t cnt) { static off_t dcls_seek(void *hnd, off_t offset, int whence) { uint32 fd = (uint32)hnd; - int locked; command_3int_t *command = (command_3int_t *)pktbuf; if(!hnd) return -1; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return -1; - } - else if(locked == -1) { - mutex_lock(&mutex); - } --fd; @@ -437,7 +398,6 @@ static dirent_t their_dir; static dcload_dirent_t our_dir; static dirent_t *dcls_readdir(void *hnd) { - int locked; uint32 fd = (uint32) hnd; command_3int_t *cmd = (command_3int_t *)pktbuf; @@ -446,15 +406,8 @@ static dirent_t *dcls_readdir(void *hnd) { return NULL; } - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return NULL; - } - else if(locked == -1) { - mutex_lock(&mutex); - } memcpy(cmd->id, "DC18", 4); cmd->value0 = htonl(fd); @@ -507,19 +460,12 @@ static dirent_t *dcls_readdir(void *hnd) { } static int dcls_rename(vfs_handler_t *vfs, const char *fn1, const char *fn2) { - int len1 = strlen(fn1), len2 = strlen(fn2), locked; + int len1 = strlen(fn1), len2 = strlen(fn2); (void)vfs; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return -1; - } - else if(locked == -1) { - mutex_lock(&mutex); - } memcpy(pktbuf, "DC07", 4); strcpy((char *)(pktbuf + 4), fn1); @@ -544,19 +490,12 @@ static int dcls_rename(vfs_handler_t *vfs, const char *fn1, const char *fn2) { } static int dcls_unlink(vfs_handler_t *vfs, const char *fn) { - int len = strlen(fn) + 5, locked; + int len = strlen(fn) + 5; (void)vfs; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return -1; - } - else if(locked == -1) { - mutex_lock(&mutex); - } memcpy(pktbuf, "DC08", 4); strcpy((char *)(pktbuf + 4), fn); @@ -574,19 +513,11 @@ static int dcls_stat(vfs_handler_t *vfs, const char *fn, struct stat *rv, int flag) { command_t *cmd = (command_t *)pktbuf; dcload_stat_t filestat; - int locked; (void)flag; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return -1; - } - else if(locked == -1) { - mutex_lock(&mutex); - } memcpy(cmd->id, "DC13", 4); cmd->address = htonl((uint32) &filestat); @@ -635,7 +566,6 @@ static int dcls_fake_shutdown(void) { } static int dcls_writebuf(const uint8 *buf, int len, int xlat) { - int locked; command_3int_t cmd; (void)xlat; @@ -643,15 +573,8 @@ static int dcls_writebuf(const uint8 *buf, int len, int xlat) { if(initted < 2) return -1; - locked = mutex_trylock(&mutex); - - if(locked == -1 && irq_inside_int()) { - errno = EAGAIN; + if(mutex_lock_irqsafe(&mutex)) return -1; - } - else if(locked == -1) { - mutex_lock(&mutex); - } memcpy(cmd.id, "DD02", 4); cmd.value0 = htonl(1); diff --git a/kernel/arch/dreamcast/hardware/cdrom.c b/kernel/arch/dreamcast/hardware/cdrom.c index e842e336..09ec0ca6 100644 --- a/kernel/arch/dreamcast/hardware/cdrom.c +++ b/kernel/arch/dreamcast/hardware/cdrom.c @@ -77,7 +77,7 @@ int cdrom_exec_cmd_timed(int cmd, void *param, int timeout) { uint64_t begin; assert(cmd > 0 && cmd < CMD_MAX); - mutex_lock(&_g1_ata_mutex); + mutex_lock_scoped(&_g1_ata_mutex); /* Submit the command */ for(n = 0; n < 10; ++n) { @@ -89,10 +89,8 @@ int cdrom_exec_cmd_timed(int cmd, void *param, int timeout) { thd_pass(); } - if(hnd <= 0) { - mutex_unlock(&_g1_ata_mutex); + if(hnd <= 0) return ERR_SYS; - } /* Wait command to finish */ if(timeout) { @@ -117,8 +115,6 @@ int cdrom_exec_cmd_timed(int cmd, void *param, int timeout) { thd_pass(); } while(1); - mutex_unlock(&_g1_ata_mutex); - if(rv != ERR_OK) return rv; else if(n == COMPLETED || n == STREAMING) @@ -147,14 +143,9 @@ int cdrom_get_status(int *status, int *disc_type) { /* We might be called in an interrupt to check for ISO cache flushing, so make sure we're not interrupting something already in progress. */ - if(irq_inside_int()) { - if(mutex_trylock(&_g1_ata_mutex)) - /* DH: Figure out a better return to signal error */ - return -1; - } - else { - mutex_lock(&_g1_ata_mutex); - } + if(mutex_lock_irqsafe(&_g1_ata_mutex)) + /* DH: Figure out a better return to signal error */ + return -1; do { rv = syscall_gdrom_check_drive(params); @@ -192,10 +183,9 @@ int cdrom_change_dataype(int sector_part, int cdxa, int sector_size) { /* Wrapper for the change datatype syscall */ int cdrom_change_datatype(int sector_part, int cdxa, int sector_size) { - int rv = ERR_OK; uint32_t params[4]; - mutex_lock(&_g1_ata_mutex); + mutex_lock_scoped(&_g1_ata_mutex); /* Check if we are using default params */ if(sector_size == 2352) { @@ -224,9 +214,8 @@ int cdrom_change_datatype(int sector_part, int cdxa, int sector_size) { params[1] = sector_part; /* Get Data or Full Sector */ params[2] = cdxa; /* CD-XA mode 1/2 */ params[3] = sector_size; /* sector size */ - rv = syscall_gdrom_sector_mode(params); - mutex_unlock(&_g1_ata_mutex); - return rv; + + return syscall_gdrom_sector_mode(params); } /* Re-init the drive, e.g., after a disc change, etc */ diff --git a/kernel/arch/dreamcast/sound/arm/aica.c b/kernel/arch/dreamcast/sound/arm/aica.c index e116355f..74f30539 100644 --- a/kernel/arch/dreamcast/sound/arm/aica.c +++ b/kernel/arch/dreamcast/sound/arm/aica.c @@ -2,6 +2,7 @@ aica.c (c)2000-2002 Megan Potter + (c)2024 Stefanos Kornilios Mitsis Poiitidis ARM support routines for using the wavetable channels */ @@ -30,31 +31,36 @@ void aica_init(void) { } /* Translates a volume from linear form to logarithmic form (required by - the AICA chip */ -static int logs[] = { - 0, 15, 22, 27, 31, 35, 39, 42, 45, 47, 50, 52, 55, 57, 59, 61, - 63, 65, 67, 69, 71, 73, 74, 76, 78, 79, 81, 82, 84, 85, 87, 88, - 90, 91, 92, 94, 95, 96, 98, 99, 100, 102, 103, 104, 105, 106, - 108, 109, 110, 111, 112, 113, 114, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, - 135, 136, 137, 138, 138, 139, 140, 141, 142, 143, 144, 145, 146, - 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 156, - 157, 158, 159, 160, 160, 161, 162, 163, 164, 164, 165, 166, 167, - 167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 176, 176, - 177, 178, 178, 179, 180, 181, 181, 182, 183, 183, 184, 185, 185, - 186, 187, 187, 188, 189, 189, 190, 191, 191, 192, 193, 193, 194, - 195, 195, 196, 197, 197, 198, 199, 199, 200, 200, 201, 202, 202, - 203, 204, 204, 205, 205, 206, 207, 207, 208, 209, 209, 210, 210, - 211, 212, 212, 213, 213, 214, 215, 215, 216, 216, 217, 217, 218, - 219, 219, 220, 220, 221, 221, 222, 223, 223, 224, 224, 225, 225, - 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 232, 232, 233, - 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 239, 239, 240, - 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, - 247, 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 254, 255 + the AICA chip + + Calculated by + for (int i = 0; i < 256; i++) + if (i == 0) ...<truncated>... hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-09-06 06:36:22
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 01555798061d1fbb552dfef251989b2e0555c472 (commit) from 892b8149ca90bb77c3452c4edeecbb0082b89dba (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 01555798061d1fbb552dfef251989b2e0555c472 Author: dfchil <dan...@gm...> Date: Fri Sep 6 08:36:05 2024 +0200 Added a set of known working purupuru bit patterns to the rumble example (#682) * Added a set of known working purupuru bit patterns to the rumble example * Added a myself to the changelog * Added a myself to the changelog * added a bit-field pattern describing effects and a print function for it * fixed indentation error * field print layout indentation * I had unintentially and very regretably angered the Endians, fixed now and tested for correctness against the rumble_fields_t related macros * reverted print_rumble_fields to only showing numbers * print is directly usable as code * added my name and year to the rumble.c example file --------- Co-authored-by: drxl <da...@vm...> Co-authored-by: Daniel Fairchild <da...@vi...> ----------------------------------------------------------------------- Summary of changes: doc/CHANGELOG | 3 +- examples/dreamcast/rumble/rumble.c | 156 ++++++++++++++++++++++++++++++++++++- 2 files changed, 157 insertions(+), 2 deletions(-) diff --git a/doc/CHANGELOG b/doc/CHANGELOG index f3da1509..d8f3a52a 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -228,7 +228,8 @@ KallistiOS version 2.1.0 ----------------------------------------------- - *** Added thread support for tracking CPU time + updated clock_gettime() [FG] - *** Added support for one-shot timers [PC] - DC Use one-shot timers for timeout and a proper polling mechanism in modem [PC] -- *** Added pvrtex utility by TapamN to utils [DF == Daniel Fairchild] +- *** Added pvrtex utility by TapamN to utils [DF == Daniel Fairchild] +- DC Added a set of known working purupuru bit patterns and a browsing mechanism to the rumble example [DF] - *** Added full support for <time.h> additions from C23 standard. [FG] - *** Fixes mutexes not working properly [PC] - DC fs_dcload: Set errno on error in dcload_stat() [PC] diff --git a/examples/dreamcast/rumble/rumble.c b/examples/dreamcast/rumble/rumble.c index 74d6aa32..fd63424b 100644 --- a/examples/dreamcast/rumble/rumble.c +++ b/examples/dreamcast/rumble/rumble.c @@ -3,6 +3,7 @@ rumble.c Copyright (C) 2004 SinisterTengu Copyright (C) 2008, 2023 Donald Haase + Copyright (C) 2024 Daniel Fairchild */ @@ -35,6 +36,121 @@ KOS_INIT_FLAGS(INIT_DEFAULT); plx_fcxt_t *cxt; + +typedef union rumble_fields { + uint32_t raw; + struct { + /* Special Effects and motor select. The normal purupuru packs will +only have one motor. Selecting MOTOR2 for these is probably not +a good idea. The PULSE setting here supposably creates a sharp +pulse effect, when ORed with the special field. */ + + /** \brief Yet another pulse effect. + This supposedly creates a sharp pulse effect. + */ + uint32_t special_pulse : 1; + uint32_t : 3; // unused + + /** \brief Select motor #1. + + Most jump packs only have one motor, but on things that do have more + than one motor (like PS1->Dreamcast controller adapters that support + rumble), this selects the first motor. + */ + uint32_t special_motor1 : 1; + uint32_t : 2; // unused + + /** \brief Select motor #2. + + Most jump packs only have one motor, but on things that do have more + than one motor (like PS1->Dreamcast controller adapters that support + rumble), this selects the second motor. + */ + uint32_t special_motor2 : 1; + + /** \brief Ignore this command. + + Valid value 15 (0xF). + + Most jump packs will ignore commands with this set in effect1, + apparently. + */ + uint32_t fx1_powersave : 4; + + /** \brief Upper nibble of effect1. + + This value works with the lower nibble of the effect2 field to + increase the intensity of the rumble effect. + Valid values are 0-7. + + \see rumble_fields_t.fx2_lintensity + */ + uint32_t fx1_intensity : 3; + + /** \brief Give a pulse effect to the rumble. + + This probably should be used with rumble_fields_t.fx1_pulse as well. + + \see rumble_fields_t.fx2_pulse + */ + uint32_t fx1_pulse : 1; + + /** \brief Lower-nibble of effect2. + + This value works with the upper nibble of the effect1 + field to increase the intensity of the rumble effect. + Valid values are 0-7. + + \see rumble_fields_t.fx1_intensity + */ + uint32_t fx2_lintensity : 3; + + /** \brief Give a pulse effect to the rumble. + + This probably should be used with rumble_fields_t.fx1_pulse as well. + + \see rumble_fields_t.fx1_intensity + */ + uint32_t fx2_pulse : 1; + + /** \brief Upper-nibble of effect2. + + This apparently lowers the rumble's intensity somewhat. + Valid values are 0-7. + */ + uint32_t fx2_uintensity : 3; + + /* OR these in with your effect2 value if you feel so inclined. + if you or the PULSE effect in here, you probably should also + do so with the effect1 one below. */ + + /** \brief Give a decay effect to the rumble on some packs. */ + uint32_t fx2_decay : 1; + + /** \brief The duration of the effect. No idea on units... */ + uint32_t duration : 8; + }; +} rumble_fields_t; + + +void print_rumble_fields(uint32_t raw) { + rumble_fields_t fields = {.raw = raw}; + printf("Rumble Fields:\n"); + printf(" .special_pulse = %u,\n", fields.special_pulse); + printf(" .special_motor1 = %u,\n", fields.special_motor1); + printf(" .special_motor2 = %u,\n", fields.special_motor2); + + printf(" .fx1_pulse = %u,\n", fields.fx1_pulse); + printf(" .fx1_powersave = %u,\n", fields.fx1_powersave); + printf(" .fx1_intensity = %u,\n", fields.fx1_intensity); + + printf(" .fx2_lintensity = %u,\n", fields.fx2_lintensity); + printf(" .fx2_pulse = %u,\n", fields.fx2_pulse); + printf(" .fx2_uintensity = %u,\n", fields.fx2_uintensity); + printf(" .fx2_decay = %u,\n", fields.fx2_decay); + + printf(" .duration = %u,\n", fields.duration); +} /* This blocks waiting for a specified device to be present and valid */ void wait_for_dev_attach(maple_device_t **dev_ptr, unsigned int func) { maple_device_t *dev = *dev_ptr; @@ -69,6 +185,28 @@ void wait_for_dev_attach(maple_device_t **dev_ptr, unsigned int func) { } } + +typedef struct { + uint32_t pattern; + const char *description; +} baked_pattern_t; + +static size_t catalog_index = 0; +static const baked_pattern_t catalog[] = { + {.pattern = 0x011A7010, .description = "Basic Thud (simple .5s jolt)"}, + {.pattern = 0x31071011, .description = "Car Idle (69 Mustang)"}, + {.pattern = 0x2615F010, .description = "Car Idle (VW beetle)"}, + {.pattern = 0x3339F010, .description = "Eathquake (Vibrate, and fade out)"}, + {.pattern = 0x05281011, .description = "Helicopter"}, + {.pattern = 0x00072010, .description = "Ship's Thrust (as in AAC)"}, +}; + +static inline void word2hexbytes(uint32_t word, uint8_t *bytes) { + for (int i = 0; i < 8; i++) { + bytes[i] = (word >> (28 - (i * 4))) & 0xf; + } +} + int main(int argc, char *argv[]) { cont_state_t *state; @@ -79,8 +217,9 @@ int main(int argc, char *argv[]) { int i = 0, count = 0; uint16_t old_buttons = 0, rel_buttons = 0; uint32_t effect = 0; - uint8_t n[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; //nibbles + uint8_t n[8]; char s[8][2] = { "", "", "", "", "", "", "", "" }; + word2hexbytes(0, n); pvr_init_defaults(); @@ -148,6 +287,16 @@ int main(int argc, char *argv[]) { if(n[i] > 0) n[i]--; } + if ((state->buttons & CONT_X) && (rel_buttons & CONT_X)) { + printf("Setting baked pattern:\n\t'%s'\n", catalog[catalog_index].description); + word2hexbytes(catalog[catalog_index].pattern, n); + catalog_index++; + if (catalog_index >= sizeof(catalog) / sizeof(baked_pattern_t)) { + catalog_index = 0; + } + } + + if((state->buttons & CONT_A) && (rel_buttons & CONT_A)) { effect = (n[0] << 28) + (n[1] << 24) + (n[2] << 20) + (n[3] << 16) + (n[4] << 12) + (n[5] << 8) + (n[6] << 4) + (n[7] << 0); @@ -155,6 +304,7 @@ int main(int argc, char *argv[]) { purupuru_rumble_raw(purudev, effect); /* We print these out to make it easier to track the options chosen */ printf("Rumble: 0x%lx!\n", effect); + print_rumble_fields(effect); } if((state->buttons & CONT_B) && (rel_buttons & CONT_B)) { @@ -185,6 +335,10 @@ int main(int argc, char *argv[]) { plx_fcxt_draw(cxt, "Press B to stop rumblin."); w.y += 25.0f; + plx_fcxt_setpos_pnt(cxt, &w); + plx_fcxt_draw(cxt, "Press X for next baked pattern"); + w.y += 25.0f; + plx_fcxt_setpos_pnt(cxt, &w); plx_fcxt_draw(cxt, "Press Start to quit."); hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-09-06 02:31:26
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 892b8149ca90bb77c3452c4edeecbb0082b89dba (commit) from c1104515865a09ffa6ccfc05dcd6f991c524f951 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 892b8149ca90bb77c3452c4edeecbb0082b89dba Author: Andy Barajas <and...@gm...> Date: Thu Sep 5 19:30:42 2024 -0700 Refactor sysinfo_icon/id (#734) * Refactor sysinfo_icon/id Made syscall_sysinfo_init() public and call it in arch_auto_init() to prepare for future calls to syscalls for info_icon and info_id. * Update kernel/arch/dreamcast/include/dc/syscalls.h Added not that KOS automatically calls this during initialization Co-authored-by: Falco Girgis <gyr...@gm...> --------- Co-authored-by: Falco Girgis <gyr...@gm...> ----------------------------------------------------------------------- Summary of changes: kernel/arch/dreamcast/hardware/syscalls.c | 9 +-------- kernel/arch/dreamcast/include/dc/syscalls.h | 8 ++++++++ kernel/arch/dreamcast/kernel/init.c | 2 ++ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/kernel/arch/dreamcast/hardware/syscalls.c b/kernel/arch/dreamcast/hardware/syscalls.c index 60d7cf07..a2bc5d66 100644 --- a/kernel/arch/dreamcast/hardware/syscalls.c +++ b/kernel/arch/dreamcast/hardware/syscalls.c @@ -116,18 +116,12 @@ syscall((r4), (r5), (r6), (func)); \ } while(0) -/* - Prepares FUNC_SYSINFO_ICON and FUNC_SYSINFO_ID calls for use by - copying the relevant data from the system flashrom into - 8C000068-8C00007F. No point in making this public. -*/ -static void syscall_sysinfo_init(void) { +void syscall_sysinfo_init(void) { MAKE_SYSCALL_VOID(VEC_SYSINFO, FUNC_SYSINFO_INIT, PARAM_NA, PARAM_NA, PARAM_NA); } int syscall_sysinfo_icon(uint32_t icon, uint8_t *dest) { - syscall_sysinfo_init(); MAKE_SYSCALL_INT(VEC_SYSINFO, FUNC_SYSINFO_ICON, icon, dest, PARAM_NA); } @@ -135,7 +129,6 @@ int syscall_sysinfo_icon(uint32_t icon, uint8_t *dest) { uint64_t syscall_sysinfo_id(void) { uint64_t *id = NULL; - syscall_sysinfo_init(); MAKE_SYSCALL_SET(VEC_SYSINFO, FUNC_SYSINFO_ID, PARAM_NA, PARAM_NA, PARAM_NA, id, uint64_t *); diff --git a/kernel/arch/dreamcast/include/dc/syscalls.h b/kernel/arch/dreamcast/include/dc/syscalls.h index 0f705ea4..71c21852 100644 --- a/kernel/arch/dreamcast/include/dc/syscalls.h +++ b/kernel/arch/dreamcast/include/dc/syscalls.h @@ -38,6 +38,14 @@ __BEGIN_DECLS #include <stdint.h> #include <sys/types.h> +/** \brief Inits data needed by sysinfo id/icon + \note This is called automatically by KOS during initialization. + This function prepares syscall_sysinfo_icon and syscall_sysinfo_id + calls for use by copying the relevant data from the system flashrom + into 8C000068-8C00007F. +*/ +void syscall_sysinfo_init(void); + /** \brief Reads an icon from the flashrom. This function reads an icon from the flashrom into a destination diff --git a/kernel/arch/dreamcast/kernel/init.c b/kernel/arch/dreamcast/kernel/init.c index ed90b7f1..f2c222b1 100644 --- a/kernel/arch/dreamcast/kernel/init.c +++ b/kernel/arch/dreamcast/kernel/init.c @@ -172,6 +172,8 @@ int __weak arch_auto_init(void) { timer_init(); /* Timers */ hardware_sys_init(); /* DC low-level hardware init */ + syscall_sysinfo_init(); + /* Initialize our timer */ perf_cntr_timer_enable(); timer_ms_enable(); hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-09-04 03:23:47
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via c1104515865a09ffa6ccfc05dcd6f991c524f951 (commit) from 688c85db2fb0255ce4aff8cdabbeb2c4c099d65b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c1104515865a09ffa6ccfc05dcd6f991c524f951 Author: darcagn <da...@pr...> Date: Tue Sep 3 22:23:30 2024 -0500 Fix typos in environ.sh (#733) Just changing -0* typos to -O. ----------------------------------------------------------------------- Summary of changes: doc/environ.sh.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/environ.sh.sample b/doc/environ.sh.sample index f1a0989d..14db9945 100644 --- a/doc/environ.sh.sample +++ b/doc/environ.sh.sample @@ -129,7 +129,7 @@ export DC_ARM_LDFLAGS="" # Optimization Level # # Controls the baseline optimization level to use when building. -# Typically this is -Og (debugging), -O0, -01, -02, or -03. +# Typically this is -Og (debugging), -O0, -O1, -O2, or -O3. # NOTE: For our target, -O4 is a valid optimization level that has # been seen to have some performance impact as well. # hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-09-01 04:28:47
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 688c85db2fb0255ce4aff8cdabbeb2c4c099d65b (commit) from 8f4089dac331d7d2ca85701453b98f66baf1532e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 688c85db2fb0255ce4aff8cdabbeb2c4c099d65b Author: darcagn <da...@pr...> Date: Sat Aug 31 23:28:31 2024 -0500 Remove FD_SETSIZE setting from environ.sh (#719) ----------------------------------------------------------------------- Summary of changes: doc/environ.sh.sample | 15 --------------- include/kos/opts.h | 5 +++-- kernel/fs/fs.c | 7 +++---- 3 files changed, 6 insertions(+), 21 deletions(-) diff --git a/doc/environ.sh.sample b/doc/environ.sh.sample index ad12f47e..f1a0989d 100644 --- a/doc/environ.sh.sample +++ b/doc/environ.sh.sample @@ -144,21 +144,6 @@ export KOS_CFLAGS="${KOS_CFLAGS} -O2" # #export KOS_CFLAGS="${KOS_CFLAGS} -freorder-blocks-algorithm=simple -flto=auto" -# RAM-Saving Optimization -# -# Uncomment the line below to reduce the default size of FD_SETSIZE from the -# default value of 1024 to 64. FD_SETSIZE defines the maximum number of files -# that can be opened simultaneously, including files on the ramdisk, romdisk, -# CD, VMU, network sockets, etc. The default setting allows 1024 files to be -# opened at once, which is typically more than most use cases require. -# -# By reducing this value, you can save approximately ~11.25 KB of RAM, which -# can be particularly useful when porting large games to the Dreamcast that -# are strapped for memory. However, be cautious not to set it too low, as this -# may limit the number of files and sockets that can be opened simultaneously. -# -# export KOS_CFLAGS="${KOS_CFLAGS} -DFD_SETSIZE=64" - # Frame Pointers # # Controls whether frame pointers are emitted or not. Disabled by diff --git a/include/kos/opts.h b/include/kos/opts.h index fe005278..66eedea2 100644 --- a/include/kos/opts.h +++ b/include/kos/opts.h @@ -129,8 +129,9 @@ __BEGIN_DECLS #define FS_RAMDISK_MAX_FILES 8 #endif -/** \brief The number of distinct file descriptors that can be in use at a - time. This value can be overwritten in environ.sh */ +/** \brief The number of distinct file descriptors, including files and + network sockets, that can be in use at a time. Decreasing this + value can reduce memory usage. */ #ifndef FD_SETSIZE #define FD_SETSIZE 1024 #endif diff --git a/kernel/fs/fs.c b/kernel/fs/fs.c index d1efca3a..e0e0339c 100644 --- a/kernel/fs/fs.c +++ b/kernel/fs/fs.c @@ -197,10 +197,9 @@ static int fs_hnd_assign(fs_hnd_t *hnd) { break; if(i >= FD_SETSIZE) { - if(FD_SETSIZE != 1024) - dbglog(DBG_ERROR, "fs_hnd_assign: Update -DFD_SETSIZE flag in \ - environ.sh to support additional files being opened. Current \ - limit is %d\n", FD_SETSIZE); + dbglog(DBG_ERROR, "fs_hnd_assign: Update FD_SETSIZE definition in \ + opts.h to support additional files being opened. Current \ + limit is %d\n", FD_SETSIZE); fs_hnd_unref(hnd); errno = EMFILE; hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-09-01 04:24:37
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 8f4089dac331d7d2ca85701453b98f66baf1532e (commit) from 698c12cc65d16dee55ed5b6106767bdea2e1056c (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8f4089dac331d7d2ca85701453b98f66baf1532e Author: darcagn <da...@pr...> Date: Sat Aug 31 23:24:15 2024 -0500 Update pvrtex/stb_image.h from v2.27 to v2.30 to fix compilation warning (#731) ----------------------------------------------------------------------- Summary of changes: utils/pvrtex/stb_image.h | 487 ++++++++++++++++++++++++++++------------------- 1 file changed, 289 insertions(+), 198 deletions(-) diff --git a/utils/pvrtex/stb_image.h b/utils/pvrtex/stb_image.h index d60371b9..9eedabed 100644 --- a/utils/pvrtex/stb_image.h +++ b/utils/pvrtex/stb_image.h @@ -1,4 +1,4 @@ -/* stb_image - v2.27 - public domain image loader - http://nothings.org/stb +/* stb_image - v2.30 - public domain image loader - http://nothings.org/stb no warranty implied; use at your own risk Do this: @@ -48,6 +48,9 @@ LICENSE RECENT REVISION HISTORY: + 2.30 (2024-05-31) avoid erroneous gcc warning + 2.29 (2023-05-xx) optimizations + 2.28 (2023-01-29) many error fixes, security errors, just tons of stuff 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug fixes 2.26 (2020-07-13) many minor fixes 2.25 (2020-02-02) fix warnings @@ -108,7 +111,7 @@ RECENT REVISION HISTORY: Cass Everitt Ryamond Barbiero github:grim210 Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus - Josh Tobin Matthew Gregan github:poppolopoppo + Josh Tobin Neil Bickford Matthew Gregan github:poppolopoppo Julian Raschke Gregory Mullen Christian Floisand github:darealshinji Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 Brad Weinberger Matvey Cherevko github:mosra @@ -140,7 +143,7 @@ RECENT REVISION HISTORY: // // ... x = width, y = height, n = # 8-bit components per pixel ... // // ... replace '0' with '1'..'4' to force that many components per pixel // // ... but 'n' will always be the number that it would have been if you said 0 -// stbi_image_free(data) +// stbi_image_free(data); // // Standard parameters: // int *x -- outputs image width in pixels @@ -635,7 +638,7 @@ STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const ch #endif #endif -#ifdef _MSC_VER +#if defined(_MSC_VER) || defined(__SYMBIAN32__) typedef unsigned short stbi__uint16; typedef signed short stbi__int16; typedef unsigned int stbi__uint32; @@ -1063,6 +1066,23 @@ static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) } #endif +// returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 inclusive), 0 on overflow. +static int stbi__addints_valid(int a, int b) +{ + if ((a >= 0) != (b >= 0)) return 1; // a and b have different signs, so no overflow + if (a < 0 && b < 0) return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. + return a <= INT_MAX - b; +} + +// returns 1 if the product of two ints fits in a signed short, 0 on overflow. +static int stbi__mul2shorts_valid(int a, int b) +{ + if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow + if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid + if (b < 0) return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN + return a >= SHRT_MIN / b; +} + // stbi__err - error // stbi__errpf - error returning pointer to float // stbi__errpuc - error returning pointer to unsigned char @@ -1985,9 +2005,12 @@ static int stbi__build_huffman(stbi__huffman *h, int *count) int i,j,k=0; unsigned int code; // build size list for each symbol (from JPEG spec) - for (i=0; i < 16; ++i) - for (j=0; j < count[i]; ++j) + for (i=0; i < 16; ++i) { + for (j=0; j < count[i]; ++j) { h->size[k++] = (stbi_uc) (i+1); + if(k >= 257) return stbi__err("bad size list","Corrupt JPEG"); + } + } h->size[k] = 0; // compute actual symbols (from jpeg spec) @@ -2112,6 +2135,8 @@ stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) // convert the huffman code to the symbol id c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + if(c < 0 || c >= 256) // symbol id out of bounds! + return -1; STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); // convert the id to a symbol @@ -2130,6 +2155,7 @@ stbi_inline static int stbi__extend_receive(stbi__jpeg *j, int n) unsigned int k; int sgn; if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) k = stbi_lrot(j->code_buffer, n); @@ -2144,6 +2170,7 @@ stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) { unsigned int k; if (j->code_bits < n) stbi__grow_buffer_unsafe(j); + if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing k = stbi_lrot(j->code_buffer, n); j->code_buffer = k & ~stbi__bmask[n]; k &= stbi__bmask[n]; @@ -2155,6 +2182,7 @@ stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) { unsigned int k; if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); + if (j->code_bits < 1) return 0; // ran out of bits from stream, return 0s intead of continuing k = j->code_buffer; j->code_buffer <<= 1; --j->code_bits; @@ -2192,8 +2220,10 @@ static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman memset(data,0,64*sizeof(data[0])); diff = t ? stbi__extend_receive(j, t) : 0; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta","Corrupt JPEG"); dc = j->img_comp[b].dc_pred + diff; j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, dequant[0])) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); data[0] = (short) (dc * dequant[0]); // decode AC components, see JPEG spec @@ -2207,6 +2237,7 @@ static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman if (r) { // fast-AC path k += (r >> 4) & 15; // run s = r & 15; // combined length + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); j->code_buffer <<= s; j->code_bits -= s; // decode into unzigzag'd location @@ -2246,8 +2277,10 @@ static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__ if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); diff = t ? stbi__extend_receive(j, t) : 0; + if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta", "Corrupt JPEG"); dc = j->img_comp[b].dc_pred + diff; j->img_comp[b].dc_pred = dc; + if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); data[0] = (short) (dc * (1 << j->succ_low)); } else { // refinement scan for DC coefficient @@ -2282,6 +2315,7 @@ static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__ if (r) { // fast-AC path k += (r >> 4) & 15; // run s = r & 15; // combined length + if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); j->code_buffer <<= s; j->code_bits -= s; zig = stbi__jpeg_dezigzag[k++]; @@ -3102,6 +3136,7 @@ static int stbi__process_marker(stbi__jpeg *z, int m) sizes[i] = stbi__get8(z->s); n += sizes[i]; } + if(n > 256) return stbi__err("bad DHT header","Corrupt JPEG"); // Loop over i < n would write past end of values! L -= 17; if (tc == 0) { if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; @@ -3351,6 +3386,28 @@ static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) return 1; } +static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) +{ + // some JPEGs have junk at end, skip over it but if we find what looks + // like a valid marker, resume there + while (!stbi__at_eof(j->s)) { + stbi_uc x = stbi__get8(j->s); + while (x == 0xff) { // might be a marker + if (stbi__at_eof(j->s)) return STBI__MARKER_none; + x = stbi__get8(j->s); + if (x != 0x00 && x != 0xff) { + // not a stuffed zero or lead-in to another marker, looks + // like an actual marker, return it + return x; + } + // stuffed zero has x=0 now which ends the loop, meaning we go + // back to regular scan loop. + // repeated 0xff keeps trying to read the next byte of the marker. + } + } + return STBI__MARKER_none; +} + // decode image to YCbCr format static int stbi__decode_jpeg_image(stbi__jpeg *j) { @@ -3367,25 +3424,22 @@ static int stbi__decode_jpeg_image(stbi__jpeg *j) if (!stbi__process_scan_header(j)) return 0; if (!stbi__parse_entropy_coded_data(j)) return 0; if (j->marker == STBI__MARKER_none ) { - // handle 0s at the end of image data from IP Kamera 9060 - while (!stbi__at_eof(j->s)) { - int x = stbi__get8(j->s); - if (x == 255) { - j->marker = stbi__get8(j->s); - break; - } - } + j->marker = stbi__skip_jpeg_junk_at_end(j); // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 } + m = stbi__get_marker(j); + if (STBI__RESTART(m)) + m = stbi__get_marker(j); } else if (stbi__DNL(m)) { int Ld = stbi__get16be(j->s); stbi__uint32 NL = stbi__get16be(j->s); if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); + m = stbi__get_marker(j); } else { - if (!stbi__process_marker(j, m)) return 0; + if (!stbi__process_marker(j, m)) return 1; + m = stbi__get_marker(j); } - m = stbi__get_marker(j); } if (j->progressive) stbi__jpeg_finish(j); @@ -3976,6 +4030,7 @@ static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int re unsigned char* result; stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); if (!j) return stbi__errpuc("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); STBI_NOTUSED(ri); j->s = s; stbi__setup_jpeg(j); @@ -3989,6 +4044,7 @@ static int stbi__jpeg_test(stbi__context *s) int r; stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); j->s = s; stbi__setup_jpeg(j); r = stbi__decode_jpeg_header(j, STBI__SCAN_type); @@ -4014,6 +4070,7 @@ static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) int result; stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); if (!j) return stbi__err("outofmem", "Out of memory"); + memset(j, 0, sizeof(stbi__jpeg)); j->s = s; result = stbi__jpeg_info_raw(j, x, y, comp); STBI_FREE(j); @@ -4121,6 +4178,7 @@ typedef struct { stbi_uc *zbuffer, *zbuffer_end; int num_bits; + int hit_zeof_once; stbi__uint32 code_buffer; char *zout; @@ -4187,9 +4245,20 @@ stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) int b,s; if (a->num_bits < 16) { if (stbi__zeof(a)) { - return -1; /* report error for unexpected end of data. */ + if (!a->hit_zeof_once) { + // This is the first time we hit eof, insert 16 extra padding btis + // to allow us to keep going; if we actually consume any of them + // though, that is invalid data. This is caught later. + a->hit_zeof_once = 1; + a->num_bits += 16; // add 16 implicit zero bits + } else { + // We already inserted our extra 16 padding bits and are again + // out, this stream is actually prematurely terminated. + return -1; + } + } else { + stbi__fill_bits(a); } - stbi__fill_bits(a); } b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; if (b) { @@ -4254,17 +4323,25 @@ static int stbi__parse_huffman_block(stbi__zbuf *a) int len,dist; if (z == 256) { a->zout = zout; + if (a->hit_zeof_once && a->num_bits < 16) { + // The first time we hit zeof, we inserted 16 extra zero bits into our bit + // buffer so the decoder can just do its speculative decoding. But if we + // actually consumed any of those bits (which is the case when num_bits < 16), + // the stream actually read past the end so it is malformed. + return stbi__err("unexpected end","Corrupt PNG"); + } return 1; } + if (z >= 286) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data z -= 257; len = stbi__zlength_base[z]; if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); z = stbi__zhuffman_decode(a, &a->z_distance); - if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); + if (z < 0 || z >= 30) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data dist = stbi__zdist_base[z]; if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); - if (zout + len > a->zout_end) { + if (len > a->zout_end - zout) { if (!stbi__zexpand(a, zout, len)) return 0; zout = a->zout; } @@ -4408,6 +4485,7 @@ static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) if (!stbi__parse_zlib_header(a)) return 0; a->num_bits = 0; a->code_buffer = 0; + a->hit_zeof_once = 0; do { final = stbi__zreceive(a,1); type = stbi__zreceive(a,2); @@ -4563,9 +4641,8 @@ enum { STBI__F_up=2, STBI__F_avg=3, STBI__F_paeth=4, - // synthetic filters used for first scanline to avoid needing a dummy row of 0s - STBI__F_avg_first, - STBI__F_paeth_first + // synthetic filter used for first scanline to avoid needing a dummy row of 0s + STBI__F_avg_first }; static stbi_uc first_row_filter[5] = @@ -4574,29 +4651,56 @@ static stbi_uc first_row_filter[5] = STBI__F_sub, STBI__F_none, STBI__F_avg_first, - STBI__F_paeth_first + STBI__F_sub // Paeth with b=c=0 turns out to be equivalent to sub }; static int stbi__paeth(int a, int b, int c) { - int p = a + b - c; - int pa = abs(p-a); - int pb = abs(p-b); - int pc = abs(p-c); - if (pa <= pb && pa <= pc) return a; - if (pb <= pc) return b; - return c; + // This formulation looks very different from the reference in the PNG spec, but is + // actually equivalent and has favorable data dependencies and admits straightforward + // generation of branch-free code, which helps performance significantly. + int thresh = c*3 - (a + b); + int lo = a < b ? a : b; + int hi = a < b ? b : a; + int t0 = (hi <= thresh) ? lo : c; + int t1 = (thresh <= lo) ? hi : t0; + return t1; } static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; +// adds an extra all-255 alpha channel +// dest == src is legal +// img_n must be 1 or 3 +static void stbi__create_png_alpha_expand8(stbi_uc *dest, stbi_uc *src, stbi__uint32 x, int img_n) +{ + int i; + // must process data backwards since we allow dest==src + if (img_n == 1) { + for (i=x-1; i >= 0; --i) { + dest[i*2+1] = 255; + dest[i*2+0] = src[i]; + } + } else { + STBI_ASSERT(img_n == 3); + for (i=x-1; i >= 0; --i) { + dest[i*4+3] = 255; + dest[i*4+2] = src[i*3+2]; + dest[i*4+1] = src[i*3+1]; + dest[i*4+0] = src[i*3+0]; + } + } +} + // create the png data from post-deflated data static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) { - int bytes = (depth == 16? 2 : 1); + int bytes = (depth == 16 ? 2 : 1); stbi__context *s = a->s; stbi__uint32 i,j,stride = x*out_n*bytes; stbi__uint32 img_len, img_width_bytes; + stbi_uc *filter_buf; + int all_ok = 1; int k; int img_n = s->img_n; // copy it into a local for later @@ -4608,8 +4712,11 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into if (!a->out) return stbi__err("outofmem", "Out of memory"); + // note: error exits here don't need to clean up a->out individually, + // stbi__do_png always does on error. if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); img_width_bytes = (((img_n * x * depth) + 7) >> 3); + if (!stbi__mad2sizes_valid(img_width_bytes, y, img_width_bytes)) return stbi__err("too large", "Corrupt PNG"); img_len = (img_width_bytes + 1) * y; // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, @@ -4617,189 +4724,137 @@ static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 r // so just check for raw_len < img_len always. if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); + // Allocate two scan lines worth of filter workspace buffer. + filter_buf = (stbi_uc *) stbi__malloc_mad2(img_width_bytes, 2, 0); + if (!filter_buf) return stbi__err("outofmem", "Out of memory"); + + // Filtering for low-bit-depth images + if (depth < 8) { + filter_bytes = 1; + width = img_width_bytes; + } + for (j=0; j < y; ++j) { - stbi_uc *cur = a->out + stride*j; - stbi_uc *prior; + // cur/prior filter buffers alternate + stbi_uc *cur = filter_buf + (j & 1)*img_width_bytes; + stbi_uc *prior = filter_buf + (~j & 1)*img_width_bytes; + stbi_uc *dest = a->out + stride*j; + int nk = width * filter_bytes; int filter = *raw++; - if (filter > 4) - return stbi__err("invalid filter","Corrupt PNG"); - - if (depth < 8) { - if (img_width_bytes > x) return stbi__err("invalid width","Corrupt PNG"); - cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place - filter_bytes = 1; - width = img_width_bytes; + // check filter type + if (filter > 4) { + all_ok = stbi__err("invalid filter","Corrupt PNG"); + break; } - prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above // if first row, use special filter that doesn't sample previous row if (j == 0) filter = first_row_filter[filter]; - // handle first byte explicitly - for (k=0; k < filter_bytes; ++k) { - switch (filter) { - case STBI__F_none : cur[k] = raw[k]; break; - case STBI__F_sub : cur[k] = raw[k]; break; - case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; - case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; - case STBI__F_avg_first : cur[k] = raw[k]; break; - case STBI__F_paeth_first: cur[k] = raw[k]; break; - } - } - - if (depth == 8) { - if (img_n != out_n) - cur[img_n] = 255; // first pixel - raw += img_n; - cur += out_n; - prior += out_n; - } else if (depth == 16) { - if (img_n != out_n) { - cur[filter_bytes] = 255; // first pixel top byte - cur[filter_bytes+1] = 255; // first pixel bottom byte - } - raw += filter_bytes; - cur += output_bytes; - prior += output_bytes; - } else { - raw += 1; - cur += 1; - prior += 1; + // perform actual filtering + switch (filter) { + case STBI__F_none: + memcpy(cur, raw, nk); + break; + case STBI__F_sub: + memcpy(cur, raw, filter_bytes); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); + break; + case STBI__F_up: + for (k = 0; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + break; + case STBI__F_avg: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); + break; + case STBI__F_paeth: + for (k = 0; k < filter_bytes; ++k) + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); // prior[k] == stbi__paeth(0,prior[k],0) + for (k = filter_bytes; k < nk; ++k) + cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes], prior[k], prior[k-filter_bytes])); + break; + case STBI__F_avg_first: + memcpy(cur, raw, filter_bytes); ...<truncated>... hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: darcagn <da...@us...> - 2024-08-28 01:05:11
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 698c12cc65d16dee55ed5b6106767bdea2e1056c (commit) via bedf52662a10f267a422d1227d178e8972cd38e4 (commit) from 715eb80e6e0ca1edf343b0fecee3275a67a5fab3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 698c12cc65d16dee55ed5b6106767bdea2e1056c Author: Andy Barajas <and...@gm...> Date: Tue Aug 27 18:04:21 2024 -0700 Fix incorrect file handle checks (#730) commit bedf52662a10f267a422d1227d178e8972cd38e4 Author: Falco Girgis <gyr...@gm...> Date: Tue Aug 27 11:43:10 2024 -0500 Added POSIX settimeofday() (#661) * Added settimeofday() POSIX funtion from sys/time.h - Newlib declares this function for us but never bothers to defined it for our target. - It can be defined trivially by just forwarding the call to clock_settime() and converting usecs to nsecs. - Made rtc_set_unix_sets() return standard POSIX codes, so that clock_settime() and settimeofday() can simply forward the call and have errno set automatically from the RTC driver (which now has errno support) * updated documentation. ----------------------------------------------------------------------- Summary of changes: examples/dreamcast/libdream/cdfs/cdfs.c | 4 ++-- kernel/arch/dreamcast/include/arch/rtc.h | 34 +++++++++++++++++++------------- kernel/arch/dreamcast/kernel/rtc.c | 10 ++++++++-- kernel/libc/posix/Makefile | 2 +- kernel/libc/posix/settimeofday.c | 24 ++++++++++++++++++++++ 5 files changed, 55 insertions(+), 19 deletions(-) create mode 100644 kernel/libc/posix/settimeofday.c diff --git a/examples/dreamcast/libdream/cdfs/cdfs.c b/examples/dreamcast/libdream/cdfs/cdfs.c index a482a286..33e3b43c 100644 --- a/examples/dreamcast/libdream/cdfs/cdfs.c +++ b/examples/dreamcast/libdream/cdfs/cdfs.c @@ -16,7 +16,7 @@ void cdfs_test(void) { /* Read and print the root directory */ d = fs_open("/cd", O_RDONLY | O_DIR); - if(d == 0) { + if(d < 0) { printf("Can't open root!\r\n"); return; } @@ -37,7 +37,7 @@ void cdfs_test(void) { /* Read and print a file called README.TXT (if any) */ fd = fs_open("/cd/readme.txt", O_RDONLY); - if(fd == 0) { + if(fd < 0) { printf("Can't open file README.TXT for reading.\r\n"); return; } diff --git a/kernel/arch/dreamcast/include/arch/rtc.h b/kernel/arch/dreamcast/include/arch/rtc.h index 4042a08a..ccbe294d 100644 --- a/kernel/arch/dreamcast/include/arch/rtc.h +++ b/kernel/arch/dreamcast/include/arch/rtc.h @@ -1,8 +1,8 @@ /* KallistiOS ##version## arch/dreamcast/include/rtc.h - Copyright (C) 2000-2001 Megan Potter - Copyright (C) 2023 Falco Girgis + Copyright (C) 2000, 2001 Megan Potter + Copyright (C) 2023, 2024 Falco Girgis */ @@ -57,11 +57,12 @@ __BEGIN_DECLS Y2K and the last timestamp it can represent before rolling over is February 06 2086 06:28:15. - \sa wdt + \sa wdt, timers, perf_counters + + @{ */ /** \brief Get the current date/time. - \ingroup rtc This function retrieves the current RTC value as a standard UNIX timestamp (with an epoch of January 1, 1970 00:00). This is assumed to be in the @@ -69,12 +70,11 @@ __BEGIN_DECLS \return The current UNIX-style timestamp (local time). - \sa rtc_set_unix_secs(), rtc_boot_time() + \sa rtc_set_unix_secs() */ time_t rtc_unix_secs(void); /** \brief Set the current date/time. - \ingroup rtc This function sets the current RTC value as a standard UNIX timestamp (with an epoch of January 1, 1970 00:00). This is assumed to be in the @@ -85,32 +85,38 @@ time_t rtc_unix_secs(void); uses a 32-bit timestamp (which also has a different epoch), not all `time_t` values can be represented within the RTC! - \param time Unix timestamp to set the current time to + \param time Unix timestamp to set the current time to + + \return 0 for success or -1 for failure (with errno set + appropriately). - \return 0 for success or -1 for failure + \exception EINVAL \p time was an invalid timestamp or could not be + represented on the AICA's RTC. + \exception EPERM Failed to set and successfully read back \p time + from the RTC. \sa rtc_unix_secs() */ int rtc_set_unix_secs(time_t time); /** \brief Get the time since the system was booted. - \ingroup rtc - This function retrieves the cached RTC value from when KallistiOS was started. As - with rtc_unix_secs(), this is a UNIX-style timestamp in local time. + This function retrieves the cached RTC value from when KallistiOS was + started. As with rtc_unix_secs(), this is a UNIX-style timestamp in + local time. \return The boot time as a UNIX-style timestamp. - - \sa rtc_unix_secs() */ time_t rtc_boot_time(void); -/* \cond */ +/* \cond INTERNAL */ /* Internally called Init / Shutdown */ int rtc_init(void); void rtc_shutdown(void); /* \endcond */ +/** @} */ + __END_DECLS #endif /* __ARCH_RTC_H */ diff --git a/kernel/arch/dreamcast/kernel/rtc.c b/kernel/arch/dreamcast/kernel/rtc.c index d18c8f18..d6d71d18 100644 --- a/kernel/arch/dreamcast/kernel/rtc.c +++ b/kernel/arch/dreamcast/kernel/rtc.c @@ -28,8 +28,10 @@ #include <arch/rtc.h> #include <arch/timer.h> #include <dc/g2bus.h> + #include <stdint.h> #include <assert.h> +#include <errno.h> /* High 16-bit Timestamp Value @@ -125,8 +127,10 @@ int rtc_set_unix_secs(time_t secs) { const uint32_t adjusted = (const uint32_t)adjusted_time; /* Protect against underflowing or overflowing our 32-bit timestamp. */ - if(adjusted_time < 0 || adjusted_time > UINT32_MAX) + if(adjusted_time < 0 || adjusted_time > UINT32_MAX) { + errno = EINVAL; return -1; + } /* Enable writing by setting LSB of control */ g2_write_32(RTC_CTRL_ADDR, RTC_CTRL_WRITE_EN); @@ -151,8 +155,10 @@ int rtc_set_unix_secs(time_t secs) { /* Signify failure if the fetched time never matched the time we attempted to set. */ - if(i == RTC_RETRY_COUNT) + if(i == RTC_RETRY_COUNT) { + errno = EPERM; result = -1; + } /* We have to update the boot time now as well, subtracting the amount of time that has elapsed since boot from the diff --git a/kernel/libc/posix/Makefile b/kernel/libc/posix/Makefile index b38f6502..3b495f6a 100644 --- a/kernel/libc/posix/Makefile +++ b/kernel/libc/posix/Makefile @@ -11,6 +11,6 @@ # CFLAGS += -std=gnu11 -OBJS = posix_memalign.o clock_gettime.o sysconf.o +OBJS = posix_memalign.o clock_gettime.o settimeofday.o sysconf.o include $(KOS_BASE)/Makefile.prefab diff --git a/kernel/libc/posix/settimeofday.c b/kernel/libc/posix/settimeofday.c new file mode 100644 index 00000000..da4f5aa9 --- /dev/null +++ b/kernel/libc/posix/settimeofday.c @@ -0,0 +1,24 @@ +/* KallistiOS ##version## + + settimeofday.c + Copyright (C) 2024 Falco Girgis +*/ + +#include <time.h> +#include <sys/time.h> +#include <errno.h> + +int settimeofday(const struct timeval *tv, const struct timezone *tz) { + struct timespec tspec; + (void)tz; + + if(!tv) { + errno = EFAULT; + return -1; + } + + tspec.tv_sec = tv->tv_sec; + tspec.tv_nsec = tv->tv_usec * 1000; + + return clock_settime(CLOCK_REALTIME, &tspec); +} hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: darcagn <da...@us...> - 2024-08-27 16:19:15
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 715eb80e6e0ca1edf343b0fecee3275a67a5fab3 (commit) via 0ba2d733dbcda4e735adfd876c501720a2ab1e50 (commit) via d6260e268f41f22065001508d041ff7f864beeb8 (commit) from d2ace52770a1f001847db31f829c3a572c9b8730 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 715eb80e6e0ca1edf343b0fecee3275a67a5fab3 Merge: d2ace527 0ba2d733 Author: darcagn <da...@pr...> Date: Tue Aug 27 11:18:13 2024 -0500 Merge pull request #729 from DC-SWAT/g1_dma_unlock Unlock all memory for G1 ATA DMA. commit 0ba2d733dbcda4e735adfd876c501720a2ab1e50 Author: DC-SWAT <sw...@21...> Date: Tue Aug 27 20:34:20 2024 +0700 Manage cache only on system RAM. commit d6260e268f41f22065001508d041ff7f864beeb8 Author: DC-SWAT <sw...@21...> Date: Tue Aug 27 15:59:15 2024 +0700 Unlock all memory for G1 ATA DMA. This allows data to be loaded directly into video and audio memory. ----------------------------------------------------------------------- Summary of changes: kernel/arch/dreamcast/hardware/g1ata.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/kernel/arch/dreamcast/hardware/g1ata.c b/kernel/arch/dreamcast/hardware/g1ata.c index 777c8b52..badc9ebc 100644 --- a/kernel/arch/dreamcast/hardware/g1ata.c +++ b/kernel/arch/dreamcast/hardware/g1ata.c @@ -2,7 +2,7 @@ hardware/g1ata.c Copyright (C) 2013, 2014, 2015 Lawrence Sebald - Copyright (C) 2015, 2023 Ruslan Rostovtsev + Copyright (C) 2015, 2023, 2024 Ruslan Rostovtsev */ #include <errno.h> @@ -109,8 +109,12 @@ typedef struct ata_devdata { #define G1_ATA_DMA_STATUS 0xA05F7418 /* Read/Write */ #define G1_ATA_DMA_PROTECTION 0xA05F74B8 /* Write-only */ +/* Protection register code. */ +#define G1_DMA_UNLOCK_CODE 0x8843 /* System memory protection unlock value. */ -#define G1_DMA_UNLOCK_SYSMEM 0x8843407F +#define G1_DMA_UNLOCK_SYSMEM (G1_DMA_UNLOCK_CODE << 16 | 0x407F) +/* All memory protection unlock value. */ +#define G1_DMA_UNLOCK_ALLMEM (G1_DMA_UNLOCK_CODE << 16 | 0x007F) /* Bitmasks for the STATUS_REG/ALT_STATUS registers. */ #define G1_ATA_SR_ERR 0x01 @@ -665,8 +669,10 @@ int g1_ata_read_lba_dma(uint64_t sector, size_t count, void *buf, return -1; } - /* Invalidate the dcache over the range of the data. */ - dcache_inval_range((uint32)buf, count * 512); + if((addr >> 24) == 0x0C) { + /* Invalidate the dcache over the range of the data. */ + dcache_inval_range((uint32)buf, count * 512); + } /* Lock the mutex. It will be unlocked later in the IRQ handler. */ if(g1_ata_mutex_lock()) @@ -845,8 +851,10 @@ int g1_ata_write_lba_dma(uint64_t sector, size_t count, const void *buf, return -1; } - /* Flush the dcache over the range of the data. */ - dcache_flush_range((uint32)buf, count * 512); + if((addr >> 24) == 0x0C) { + /* Flush the dcache over the range of the data. */ + dcache_flush_range((uint32)buf, count * 512); + } /* Lock the mutex. It will be unlocked in the IRQ handler later. */ if(g1_ata_mutex_lock()) @@ -1057,7 +1065,7 @@ static int g1_ata_scan(void) { if(!g1_ata_set_transfer_mode(ATA_TRANSFER_WDMA(2))) { OUT32(G1_ATA_DMA_RACCESS_WAIT, G1_ACCESS_WDMA_MODE2); OUT32(G1_ATA_DMA_WACCESS_WAIT, G1_ACCESS_WDMA_MODE2); - OUT32(G1_ATA_DMA_PROTECTION, G1_DMA_UNLOCK_SYSMEM); + OUT32(G1_ATA_DMA_PROTECTION, G1_DMA_UNLOCK_ALLMEM); } else { device.wdma_modes = 0; hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: quzar <qu...@us...> - 2024-08-24 19:58:05
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via d2ace52770a1f001847db31f829c3a572c9b8730 (commit) from 6e3584b4874fef191384ec50ff1ffae25e0e1882 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit d2ace52770a1f001847db31f829c3a572c9b8730 Author: Falco Girgis <gyr...@gm...> Date: Sat Aug 24 14:57:30 2024 -0500 Fixed Overflow with Writing PVR BG Plane (#694) * Fixed overflow with writing pvr bg plane. - skmp (correctly) reported that our little loop to copy the internally populated pvr_bkg_poly_t polygon (which gets color info from pvr_set_bg_color()) was looping too far. * structure is only 60 bytes, we looped for 64 and then wrote another word even beyond that. - swapped implementation to use memcpy() based on sizeof(pvr_bkg_poly_t) which is safer, and is smart enough to do per-word operations when they are valid (not here, lolz). - removed final vrl[0x11] = 0 assignment, as it clearly wasn't necessary and doesn't appear to even be doing anything useful at-all. The BG polygon types are special and don't need end-of-list flags, and interpolate the 4th vertex, more like PVR sprites. * Fixed PVR BG clear color code - VRAM writes need to be word-sized, and while mempcy() was doing the right thing internally, that's sketchy... explicitly using mempcy4() now. * Adjusted PVR BG plane size based on FB resolution. - Also cleaned up the code a bit. - Changed Z coord to FLT_EPSILON instead of 0.2f. ----------------------------------------------------------------------- Summary of changes: kernel/arch/dreamcast/hardware/pvr/pvr_misc.c | 43 +++++++++++++-------------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/kernel/arch/dreamcast/hardware/pvr/pvr_misc.c b/kernel/arch/dreamcast/hardware/pvr/pvr_misc.c index 061b9c33..b484dc99 100644 --- a/kernel/arch/dreamcast/hardware/pvr/pvr_misc.c +++ b/kernel/arch/dreamcast/hardware/pvr/pvr_misc.c @@ -8,9 +8,13 @@ #include <assert.h> #include <string.h> +#include <float.h> + #include <arch/timer.h> #include <dc/pvr.h> #include <dc/video.h> +#include <kos/string.h> + #include "pvr_internal.h" /* @@ -174,9 +178,8 @@ void pvr_begin_queued_render(void) { volatile pvr_ta_buffers_t * tbuf; volatile pvr_frame_buffers_t * rbuf; pvr_bkg_poly_t bkg; - uint32 *vrl, *bkgdata; + uint32_t *vrl; uint32 vert_end; - int i; int bufn = pvr_state.view_target; union { float f; @@ -197,26 +200,22 @@ void pvr_begin_queued_render(void) { /* Throw the background data on the end of the TA's list */ bkg.flags1 = 0x90800000; /* These are from libdream.. ought to figure out */ bkg.flags2 = 0x20800440; /* what they mean for sure... heh =) */ - bkg.dummy = 0; - bkg.x1 = 0.0f; - bkg.y1 = 480.0f; - bkg.z1 = 0.2f; - bkg.argb1 = pvr_state.bg_color; - bkg.x2 = 0.0f; - bkg.y2 = 0.0f; - bkg.z2 = 0.2f; - bkg.argb2 = pvr_state.bg_color; - bkg.x3 = 640.0f; - bkg.y3 = 480.0f; - bkg.z3 = 0.2f; - bkg.argb3 = pvr_state.bg_color; - bkgdata = (uint32 *)&bkg; - vrl = (uint32*)(PVR_RAM_BASE | PVR_GET(PVR_TA_VERTBUF_POS)); - - for(i = 0; i < 0x10; i++) - vrl[i] = bkgdata[i]; - - vrl[0x11] = 0; + bkg.dummy = 0; + bkg.x1 = 0.0f; + bkg.y1 = pvr_state.h; + bkg.z1 = FLT_EPSILON; + bkg.argb1 = pvr_state.bg_color; + bkg.x2 = 0.0f; + bkg.y2 = 0.0f; + bkg.z2 = FLT_EPSILON; + bkg.argb2 = pvr_state.bg_color; + bkg.x3 = pvr_state.w; + bkg.y3 = pvr_state.h; + bkg.z3 = FLT_EPSILON; + bkg.argb3 = pvr_state.bg_color; + vrl = (uint32_t *)(PVR_RAM_BASE | PVR_GET(PVR_TA_VERTBUF_POS)); + + memcpy4(vrl, &bkg, sizeof(bkg)); /* Reset the ISP/TSP, just in case */ //PVR_SET(PVR_RESET, PVR_RESET_ISPTSP); hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: darcagn <da...@us...> - 2024-08-23 02:20:02
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 6e3584b4874fef191384ec50ff1ffae25e0e1882 (commit) from 4346a85740d341587fd151cf47475b74fff9eeb4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 6e3584b4874fef191384ec50ff1ffae25e0e1882 Author: Andy Barajas <and...@gm...> Date: Thu Aug 22 19:19:21 2024 -0700 Fix KOS warning when compiling SDL2 using m4-single (#724) * Fix warning when compiling SDL2 using m4-single * Update kernel/arch/dreamcast/include/arch/args.h ----------------------------------------------------------------------- Summary of changes: kernel/arch/dreamcast/include/arch/args.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/arch/dreamcast/include/arch/args.h b/kernel/arch/dreamcast/include/arch/args.h index 63a2c4ec..56f3ffe8 100644 --- a/kernel/arch/dreamcast/include/arch/args.h +++ b/kernel/arch/dreamcast/include/arch/args.h @@ -14,7 +14,7 @@ \author Paul Cercueil */ -#if __SH4_SINGLE_ONLY__ +#ifdef __SH4_SINGLE_ONLY__ #define KOS_SH4_SINGLE_ONLY 1 #else #define KOS_SH4_SINGLE_ONLY 0 hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: darcagn <da...@us...> - 2024-08-21 20:10:08
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 4346a85740d341587fd151cf47475b74fff9eeb4 (commit) via 9d759bc67d15f8faaecaa89d4fe91c147fbb7155 (commit) via 08c583f3fa1b44aac6a032be12a8ff9c334d7acf (commit) from cdff9466a32a5f59d9139513786adc6184c3adce (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 4346a85740d341587fd151cf47475b74fff9eeb4 Merge: 08c583f3 9d759bc6 Author: darcagn <da...@pr...> Date: Wed Aug 21 12:11:26 2024 -0500 Merge pull request #723 from pcercuei/fix-lba48 g1ata: Restore LBA48 support commit 9d759bc67d15f8faaecaa89d4fe91c147fbb7155 Author: Paul Cercueil <pa...@cr...> Date: Wed Aug 21 19:02:57 2024 +0200 g1ata: Restore LBA48 support The introduction of chained LBA28 DMA transfers accidentally broke LBA48 support. Restore LBA48 support by checking that we're actually using a non-LBA48 drive before trying to chain DMA descriptors. Signed-off-by: Paul Cercueil <pa...@cr...> commit 08c583f3fa1b44aac6a032be12a8ff9c334d7acf Author: darcagn <da...@pr...> Date: Wed Aug 21 10:51:42 2024 -0500 Adjust pvrtex .gitignore and Makefile (#721) -Create info folder as needed rather than forcing it to always exist. ----------------------------------------------------------------------- Summary of changes: kernel/arch/dreamcast/hardware/g1ata.c | 3 ++- utils/pvrtex/.gitignore | 1 + utils/pvrtex/Makefile | 3 ++- utils/pvrtex/info/.gitkeep | 0 4 files changed, 5 insertions(+), 2 deletions(-) delete mode 100644 utils/pvrtex/info/.gitkeep diff --git a/kernel/arch/dreamcast/hardware/g1ata.c b/kernel/arch/dreamcast/hardware/g1ata.c index 7faa8c0a..777c8b52 100644 --- a/kernel/arch/dreamcast/hardware/g1ata.c +++ b/kernel/arch/dreamcast/hardware/g1ata.c @@ -232,13 +232,14 @@ static void g1_ata_set_sector_and_count(uint64_t sector, uint32_t count, int lba } static void g1_dma_irq_hnd(uint32 code, void *data) { + int can_lba48 = CAN_USE_LBA48(); unsigned int nb_sectors; /* XXXX: Probably should look at the code to make sure it isn't an error. */ (void)code; (void)data; - if(dma_in_progress && dma_nb_sectors > 256) { + if(dma_in_progress && !can_lba48 && dma_nb_sectors > 256) { dma_sector += 256; dma_nb_sectors -= 256; nb_sectors = dma_nb_sectors <= 256 ? dma_nb_sectors : 256; diff --git a/utils/pvrtex/.gitignore b/utils/pvrtex/.gitignore index 1d3690fa..e1fdd06b 100644 --- a/utils/pvrtex/.gitignore +++ b/utils/pvrtex/.gitignore @@ -1,2 +1,3 @@ +info/ pvrtex README diff --git a/utils/pvrtex/Makefile b/utils/pvrtex/Makefile index d736110b..1acf1204 100644 --- a/utils/pvrtex/Makefile +++ b/utils/pvrtex/Makefile @@ -19,6 +19,7 @@ MYCFLAGS=$(MYFLAGS) -Wno-pointer-sign define textSegment2Header + mkdir -p info awk '/$1/,/--------------------------------------------------------------------------/' README > $2/$3.txt $(KOS_BASE)/utils/bin2c/bin2c $2/$3.txt $2/$3.h $(3)_txt rm $2/$3.txt @@ -47,7 +48,7 @@ README: readme_unformatted.txt all: $(TARGET) README -install: all +install: all install -m 755 $(TARGET) $(DC_TOOLS_BASE)/ info/options.h: README Makefile diff --git a/utils/pvrtex/info/.gitkeep b/utils/pvrtex/info/.gitkeep deleted file mode 100644 index e69de29b..00000000 hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: darcagn <da...@us...> - 2024-08-20 15:30:55
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via cdff9466a32a5f59d9139513786adc6184c3adce (commit) from c2d45545e439c0624865b792a23653bb3dfd956b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit cdff9466a32a5f59d9139513786adc6184c3adce Author: dfchil <dan...@gm...> Date: Tue Aug 20 17:29:43 2024 +0200 Pvrtex minor fixes (#720) * removed dependency on xxd, used the standarized install path in $DC_TOOLS_BASE * removed the autogenerated info/*.h files --------- Co-authored-by: Daniel Fairchild <da...@vi...> ----------------------------------------------------------------------- Summary of changes: utils/pvrtex/Makefile | 14 +- utils/pvrtex/info/examples.h | 175 ------- utils/pvrtex/info/options.h | 1030 ------------------------------------------ utils/pvrtex/main.c | 4 +- 4 files changed, 8 insertions(+), 1215 deletions(-) delete mode 100644 utils/pvrtex/info/examples.h delete mode 100644 utils/pvrtex/info/options.h diff --git a/utils/pvrtex/Makefile b/utils/pvrtex/Makefile index 40e17a3e..d736110b 100644 --- a/utils/pvrtex/Makefile +++ b/utils/pvrtex/Makefile @@ -19,15 +19,13 @@ MYCFLAGS=$(MYFLAGS) -Wno-pointer-sign define textSegment2Header - awk '/$1/,/--------------------------------------------------------------------------/' README|xxd -i -n $2_$3 > $2/$3.h + awk '/$1/,/--------------------------------------------------------------------------/' README > $2/$3.txt + $(KOS_BASE)/utils/bin2c/bin2c $2/$3.txt $2/$3.h $(3)_txt + rm $2/$3.txt endef - -TOOLINSTALLDIR=$(KOS_BASE)/../bin - .PHONY: all clean - $(TARGET): $(OBJS) gcc $(OPTMODE) -o $(TARGET) \ $(OBJS) $(PROGMAIN) -lm -lstdc++ @@ -50,10 +48,10 @@ README: readme_unformatted.txt all: $(TARGET) README install: all - install -m 755 $(TARGET) $(TOOLINSTALLDIR)/ + install -m 755 $(TARGET) $(DC_TOOLS_BASE)/ -info/options.h: README +info/options.h: README Makefile $(call textSegment2Header,Command Line Options:,info,options) -info/examples.h: README +info/examples.h: README Makefile $(call textSegment2Header,Usage Examples:,info,examples) diff --git a/utils/pvrtex/info/examples.h b/utils/pvrtex/info/examples.h deleted file mode 100644 index 1888d1e8..00000000 --- a/utils/pvrtex/info/examples.h +++ /dev/null @@ -1,175 +0,0 @@ -unsigned char info_examples[] = { - 0x55, 0x73, 0x61, 0x67, 0x65, 0x20, 0x45, 0x78, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x73, 0x3a, 0x0a, 0x0a, 0x70, 0x76, 0x72, 0x74, 0x65, 0x78, 0x20, - 0x2d, 0x69, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x6e, - 0x67, 0x20, 0x2d, 0x6f, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x64, 0x74, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x73, 0x20, 0x61, 0x20, 0x50, 0x4e, 0x47, 0x20, 0x66, 0x69, 0x6c, 0x65, - 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x44, 0x54, 0x20, 0x66, 0x69, 0x6c, - 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, 0x77, - 0x69, 0x64, 0x64, 0x6c, 0x65, 0x64, 0x2c, 0x20, 0x75, 0x6e, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x0a, 0x09, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, - 0x75, 0x74, 0x20, 0x6d, 0x69, 0x70, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x69, - 0x73, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, 0x61, - 0x6c, 0x6c, 0x79, 0x20, 0x63, 0x68, 0x6f, 0x73, 0x65, 0x6e, 0x0a, 0x09, - 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, - 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x70, 0x6e, 0x67, 0x20, 0x28, 0x53, 0x65, 0x65, 0x20, 0x64, 0x65, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x6f, - 0x72, 0x0a, 0x09, 0x41, 0x55, 0x54, 0x4f, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x69, - 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, - 0x29, 0x2e, 0x0a, 0x0a, 0x70, 0x76, 0x72, 0x74, 0x65, 0x78, 0x20, 0x2d, - 0x69, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x6e, 0x67, - 0x20, 0x2d, 0x6f, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2e, - 0x64, 0x74, 0x20, 0x2d, 0x66, 0x20, 0x61, 0x72, 0x67, 0x62, 0x34, 0x34, - 0x34, 0x34, 0x20, 0x2d, 0x64, 0x20, 0x2d, 0x63, 0x20, 0x36, 0x34, 0x20, - 0x2d, 0x6d, 0x20, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x20, 0x2d, - 0x72, 0x20, 0x2d, 0x52, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x74, 0x73, 0x20, 0x61, 0x20, 0x50, 0x4e, 0x47, 0x20, 0x66, 0x69, 0x6c, - 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x44, 0x54, 0x20, 0x66, 0x69, - 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, 0x20, 0x74, - 0x77, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x64, 0x2c, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x0a, 0x09, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6d, - 0x69, 0x70, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x41, 0x52, 0x47, - 0x42, 0x34, 0x34, 0x34, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x0a, - 0x09, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2c, 0x20, 0x61, 0x6e, 0x64, - 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, 0x65, 0x64, 0x2e, 0x20, 0x49, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x61, 0x0a, - 0x09, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, 0x70, 0x6f, 0x77, 0x65, - 0x72, 0x2d, 0x6f, 0x66, 0x2d, 0x74, 0x77, 0x6f, 0x2c, 0x20, 0x69, 0x74, - 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x73, - 0x69, 0x7a, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x65, 0x73, 0x74, 0x20, 0x73, - 0x71, 0x75, 0x61, 0x72, 0x65, 0x0a, 0x09, 0x70, 0x6f, 0x77, 0x65, 0x72, - 0x2d, 0x6f, 0x66, 0x2d, 0x74, 0x77, 0x6f, 0x2e, 0x20, 0x54, 0x68, 0x65, - 0x20, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x6f, 0x6f, 0x6b, 0x20, 0x75, 0x73, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x65, - 0x64, 0x0a, 0x09, 0x74, 0x6f, 0x20, 0x36, 0x34, 0x20, 0x65, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x61, - 0x6c, 0x20, 0x32, 0x35, 0x36, 0x3b, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, - 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x73, 0x20, 0x71, 0x75, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x0a, 0x09, 0x72, 0x65, - 0x64, 0x75, 0x63, 0x65, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73, 0x69, - 0x7a, 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, 0x62, 0x79, 0x20, 0x31, 0x2e, 0x35, - 0x20, 0x4b, 0x42, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x6d, 0x70, - 0x72, 0x6f, 0x76, 0x65, 0x73, 0x20, 0x66, 0x69, 0x6c, 0x6c, 0x72, 0x61, - 0x74, 0x65, 0x2e, 0x0a, 0x0a, 0x70, 0x76, 0x72, 0x74, 0x65, 0x78, 0x20, - 0x2d, 0x69, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x70, 0x6e, - 0x67, 0x20, 0x2d, 0x6f, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x64, 0x74, 0x20, 0x2d, 0x66, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x20, 0x2d, 0x6d, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x74, 0x73, 0x20, 0x61, 0x20, 0x50, 0x4e, 0x47, 0x20, 0x66, 0x69, 0x6c, - 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, - 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x6d, 0x61, - 0x70, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x44, 0x54, 0x20, 0x66, 0x69, - 0x6c, 0x65, 0x2c, 0x0a, 0x09, 0x77, 0x69, 0x74, 0x68, 0x20, 0x6d, 0x69, - 0x70, 0x6d, 0x61, 0x70, 0x73, 0x2e, 0x0a, 0x0a, 0x70, 0x76, 0x72, 0x74, - 0x65, 0x78, 0x20, 0x2d, 0x69, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x2e, 0x70, 0x6e, 0x67, 0x20, 0x2d, 0x6f, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x64, 0x74, 0x20, 0x2d, 0x73, 0x0a, 0x09, 0x43, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x50, 0x4e, - 0x47, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, - 0x6e, 0x6f, 0x6e, 0x74, 0x77, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x64, 0x20, - 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x20, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, - 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x77, - 0x65, 0x72, 0x2d, 0x6f, 0x66, 0x2d, 0x74, 0x77, 0x6f, 0x20, 0x77, 0x69, - 0x64, 0x74, 0x68, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x61, 0x6e, - 0x20, 0x61, 0x6c, 0x73, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x79, - 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x0a, 0x09, 0x6f, - 0x66, 0x20, 0x33, 0x32, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x69, 0x73, - 0x20, 0x3c, 0x3d, 0x20, 0x31, 0x30, 0x32, 0x34, 0x2e, 0x0a, 0x0a, 0x70, - 0x76, 0x72, 0x74, 0x65, 0x78, 0x20, 0x2d, 0x69, 0x20, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x2e, 0x70, 0x6e, 0x67, 0x20, 0x2d, 0x6f, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x64, 0x74, 0x20, 0x2d, 0x66, - 0x20, 0x70, 0x61, 0x6c, 0x38, 0x62, 0x70, 0x70, 0x20, 0x2d, 0x43, 0x20, - 0x36, 0x34, 0x20, 0x2d, 0x64, 0x20, 0x2d, 0x70, 0x20, 0x70, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x2e, 0x70, 0x6e, 0x67, 0x0a, 0x09, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x73, 0x20, 0x61, 0x20, 0x50, 0x4e, 0x47, - 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x20, 0x44, - 0x54, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, - 0x38, 0x2d, 0x62, 0x69, 0x74, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, - 0x20, 0x54, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, - 0x6e, 0x67, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x77, 0x69, - 0x6c, 0x6c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x75, 0x73, 0x65, 0x20, 0x6d, - 0x6f, 0x72, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x36, 0x34, 0x20, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x20, 0x32, 0x35, 0x36, 0x2c, 0x0a, 0x09, 0x61, 0x6e, - 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x64, 0x69, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x64, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, - 0x70, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, - 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x20, 0x77, 0x72, 0x69, 0x74, - 0x74, 0x65, 0x6e, 0x0a, 0x09, 0x74, 0x6f, 0x20, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x64, 0x74, 0x2e, 0x70, 0x61, 0x6c, 0x2e, 0x20, - 0x41, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, 0x77, - 0x69, 0x6c, 0x6c, 0x20, 0x62, 0x65, 0x0a, 0x09, 0x77, 0x72, 0x69, 0x74, - 0x74, 0x65, 0x6e, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x2e, 0x70, 0x6e, 0x67, 0x2e, 0x0a, 0x0a, 0x70, 0x76, 0x72, - 0x74, 0x65, 0x78, 0x20, 0x2d, 0x69, 0x20, 0x6d, 0x69, 0x70, 0x32, 0x35, - 0x36, 0x2e, 0x70, 0x6e, 0x67, 0x20, 0x2d, 0x69, 0x20, 0x6d, 0x69, 0x70, - 0x31, 0x32, 0x38, 0x2e, 0x70, 0x6e, 0x67, 0x20, 0x2d, 0x69, 0x20, 0x6d, - 0x69, 0x70, 0x36, 0x34, 0x2e, 0x70, 0x6e, 0x67, 0x20, 0x2d, 0x69, 0x20, - 0x6d, 0x69, 0x70, 0x33, 0x32, 0x2e, 0x70, 0x6e, 0x67, 0x20, 0x2d, 0x69, - 0x20, 0x6d, 0x69, 0x70, 0x31, 0x36, 0x2e, 0x70, 0x6e, 0x67, 0x0a, 0x2d, - 0x6f, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x64, 0x74, - 0x20, 0x2d, 0x6d, 0x0a, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x73, 0x20, 0x61, 0x20, 0x6d, 0x69, 0x70, 0x6d, 0x61, 0x70, 0x70, - 0x65, 0x64, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2c, 0x20, - 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 0x69, - 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x70, 0x75, - 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x0a, 0x09, 0x61, 0x73, - 0x20, 0x75, 0x73, 0x65, 0x72, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x6d, 0x69, 0x70, 0x6d, 0x61, 0x70, 0x20, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x73, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x20, - 0x6f, 0x66, 0x20, 0x61, 0x75, 0x74, 0x6f, 0x6d, 0x61, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6e, 0x67, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x66, 0x20, - 0x74, 0x68, 0x65, 0x6d, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x61, 0x20, 0x6d, - 0x69, 0x70, 0x6d, 0x61, 0x70, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x20, - 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, - 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65, 0x20, 0x75, 0x73, - 0x65, 0x72, 0x2c, 0x20, 0x69, 0x74, 0x0a, 0x09, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x62, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x61, 0x20, 0x68, 0x69, 0x67, - 0x68, 0x65, 0x72, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x2e, 0x20, 0x42, - 0x79, 0x20, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x68, 0x69, 0x67, 0x68, 0x65, 0x72, 0x0a, 0x09, 0x6c, - 0x65, 0x76, 0x65, 0x6c, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x20, 0x6e, 0x6f, - 0x74, 0x20, 0x62, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20, 0x62, 0x75, - 0x74, 0x20, 0x74, 0x68, 0x72, 0x65, 0x65, 0x20, 0x6c, 0x65, 0x76, 0x65, - 0x6c, 0x73, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x3b, 0x20, 0x69, 0x66, - 0x20, 0x79, 0x6f, 0x75, 0x0a, 0x09, 0x77, 0x61, 0x6e, 0x74, 0x20, 0x74, - 0x6f, 0x20, 0x75, 0x73, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6c, 0x65, - 0x76, 0x65, 0x6c, 0x20, 0x61, 0x62, 0x6f, 0x76, 0x65, 0x2c, 0x20, 0x75, - 0x73, 0x65, 0x20, 0x66, 0x61, 0x73, 0x74, 0x20, 0x6d, 0x69, 0x70, 0x6d, - 0x61, 0x70, 0x73, 0x20, 0x28, 0x2d, 0x6d, 0x20, 0x66, 0x61, 0x73, 0x74, - 0x29, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x65, 0x61, 0x64, 0x2e, 0x0a, 0x0a, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, - 0x2d, 0x2d, 0x0a -}; -unsigned int info_examples_len = 2055; diff --git a/utils/pvrtex/info/options.h b/utils/pvrtex/info/options.h deleted file mode 100644 index 6e437e86..00000000 --- a/utils/pvrtex/info/options.h +++ /dev/null @@ -1,1030 +0,0 @@ -unsigned char info_options[] = { - 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x20, 0x4c, 0x69, 0x6e, 0x65, - 0x20, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x0a, 0x0a, 0x2d, - 0x2d, 0x68, 0x65, 0x6c, 0x70, 0x2c, 0x20, 0x2d, 0x68, 0x0a, 0x09, 0x44, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x20, 0x63, 0x6f, 0x6d, 0x6d, - 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x0a, 0x0a, 0x2d, 0x2d, 0x65, 0x78, 0x61, 0x6d, - 0x70, 0x6c, 0x65, 0x73, 0x20, 0x2d, 0x45, 0x0a, 0x09, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x73, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65, 0x20, - 0x65, 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x73, 0x0a, 0x0a, 0x2d, 0x2d, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x2d, 0x56, 0x0a, - 0x09, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x73, 0x20, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x0a, 0x0a, 0x2d, 0x2d, 0x69, 0x6e, 0x20, - 0x5b, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x2c, 0x20, - 0x2d, 0x69, 0x20, 0x5b, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x5d, 0x0a, 0x09, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x6d, 0x61, - 0x67, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x69, - 0x73, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x69, 0x73, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x2e, 0x0a, 0x0a, 0x09, - 0x49, 0x66, 0x20, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x20, - 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, - 0x20, 0x61, 0x72, 0x65, 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, - 0x65, 0x64, 0x2c, 0x20, 0x74, 0x68, 0x65, 0x79, 0x20, 0x61, 0x72, 0x65, - 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x0a, 0x09, - 0x61, 0x73, 0x73, 0x75, 0x6d, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x62, - 0x65, 0x20, 0x64, 0x69, 0x66, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x6d, 0x69, 0x70, 0x6d, 0x61, 0x70, 0x20, 0x6c, 0x65, 0x76, 0x65, 0x6c, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, - 0x6c, 0x65, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x20, - 0x52, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x0a, 0x09, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x6e, 0x6f, 0x74, 0x20, - 0x62, 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, - 0x63, 0x75, 0x73, 0x74, 0x6f, 0x6d, 0x20, 0x6d, 0x69, 0x70, 0x6d, 0x61, - 0x70, 0x73, 0x2c, 0x20, 0x73, 0x6f, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x73, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x0a, 0x09, - 0x62, 0x65, 0x20, 0x61, 0x20, 0x73, 0x71, 0x75, 0x61, 0x72, 0x65, 0x20, - 0x70, 0x6f, 0x77, 0x65, 0x72, 0x2d, 0x6f, 0x66, 0x2d, 0x74, 0x77, 0x6f, - 0x2e, 0x0a, 0x0a, 0x09, 0x55, 0x73, 0x65, 0x73, 0x20, 0x73, 0x74, 0x62, - 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x6c, 0x69, 0x62, 0x72, 0x61, - 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, 0x65, 0x61, 0x64, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x2e, 0x20, 0x54, 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, - 0x74, 0x65, 0x64, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, - 0x20, 0x61, 0x72, 0x65, 0x3a, 0x0a, 0x09, 0x09, 0x4a, 0x50, 0x45, 0x47, - 0x2c, 0x20, 0x50, 0x4e, 0x47, 0x2c, 0x20, 0x54, 0x47, 0x41, 0x2c, 0x20, - 0x42, 0x4d, 0x50, 0x2c, 0x20, 0x50, 0x53, 0x44, 0x2c, 0x20, 0x47, 0x49, - 0x46, 0x2c, 0x20, 0x48, 0x44, 0x52, 0x2c, 0x20, 0x50, 0x49, 0x43, 0x2c, - 0x20, 0x50, 0x4d, 0x4e, 0x0a, 0x0a, 0x2d, 0x2d, 0x6f, 0x75, 0x74, 0x20, - 0x5b, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x2c, 0x20, - 0x2d, 0x6f, 0x20, 0x5b, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, - 0x5d, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, - 0x66, 0x69, 0x6c, 0x65, 0x20, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x65, 0x64, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x2e, 0x20, - 0x54, 0x68, 0x65, 0x20, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x20, 0x6f, 0x66, 0x0a, 0x09, 0x74, 0x68, 0x69, 0x73, 0x20, 0x66, - 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x74, - 0x72, 0x6f, 0x6c, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, - 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x0a, 0x0a, 0x09, - 0x54, 0x68, 0x65, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, - 0x64, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x20, 0x61, 0x72, - 0x65, 0x3a, 0x0a, 0x0a, 0x09, 0x2e, 0x50, 0x56, 0x52, 0x0a, 0x09, 0x09, - 0x4f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, 0x50, 0x6f, 0x77, - 0x65, 0x72, 0x56, 0x52, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x2e, 0x20, 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x20, 0x61, 0x73, 0x20, - 0x77, 0x61, 0x73, 0x0a, 0x09, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x74, 0x6f, 0x20, 0x68, 0x65, 0x6c, 0x70, 0x20, 0x74, 0x65, - 0x73, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x2c, 0x20, 0x62, 0x79, 0x0a, 0x09, - 0x09, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x50, 0x43, 0x20, 0x50, 0x56, - 0x52, 0x20, 0x76, 0x69, 0x65, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x0a, 0x09, 0x09, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x72, 0x65, 0x2e, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65, 0x20, 0x61, - 0x72, 0x65, 0x20, 0x6c, 0x69, 0x6b, 0x65, 0x6c, 0x79, 0x20, 0x69, 0x6e, - 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x69, 0x74, 0x69, - 0x65, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x2e, 0x50, 0x56, 0x52, - 0x0a, 0x09, 0x09, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x69, 0x6e, 0x67, 0x20, - 0x6f, 0x66, 0x20, 0x6f, 0x66, 0x66, 0x69, 0x63, 0x69, 0x61, 0x6c, 0x20, - 0x67, 0x61, 0x6d, 0x65, 0x73, 0x20, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x65, - 0x78, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2c, 0x20, 0x70, 0x76, 0x72, 0x74, - 0x65, 0x78, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x0a, 0x09, 0x09, 0x6e, 0x6f, - 0x74, 0x20, 0x61, 0x64, 0x64, 0x20, 0x61, 0x20, 0x47, 0x42, 0x49, 0x58, - 0x20, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x29, 0x2e, 0x0a, 0x09, 0x2e, 0x54, - 0x45, 0x58, 0x0a, 0x09, 0x09, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, - 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x76, 0x73, 0x70, - 0x65, 0x6c, 0x73, 0x66, 0x72, 0x65, 0x61, 0x6b, 0x27, 0x73, 0x20, 0x74, - 0x65, 0x78, 0x63, 0x6f, 0x6e, 0x76, 0x2e, 0x20, 0x70, 0x76, 0x72, 0x74, - 0x65, 0x78, 0x20, 0x77, 0x69, 0x6c, 0x6c, 0x0a, 0x09, 0x09, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x20, 0x63, 0x65, 0x72, 0x74, 0x61, - 0x69, 0x6e, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x20, 0x6e, - 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, - 0x20, 0x62, 0x79, 0x20, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x6e, 0x76, 0x20, - 0x62, 0x75, 0x74, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x70, 0x72, 0x65, 0x73, - 0x65, 0x6e, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x20, 0x28, 0x6c, 0x69, 0x6b, 0x65, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x20, 0x73, 0x74, 0x72, 0x69, - 0x64, 0x65, 0x0a, 0x09, 0x09, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x29, 0x2e, 0x0a, 0x09, 0x2e, 0x44, 0x54, 0x0a, 0x09, 0x09, 0x4e, - 0x65, 0x77, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x6d, - 0x61, 0x74, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, - 0x68, 0x69, 0x73, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x2e, - 0x20, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x20, 0x73, 0x6d, - 0x61, 0x6c, 0x6c, 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x64, 0x65, 0x62, 0x6f, - 0x6f, 0x6b, 0x20, 0x56, 0x51, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x74, - 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, - 0x69, 0x73, 0x20, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x20, 0x74, - 0x6f, 0x20, 0x61, 0x20, 0x33, 0x32, 0x2d, 0x62, 0x79, 0x74, 0x65, 0x0a, - 0x09, 0x09, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x72, 0x79, 0x20, 0x74, 0x6f, - 0x20, 0x6d, 0x61, 0x6b, 0x65, 0x20, 0x44, 0x4d, 0x41, 0x20, 0x65, 0x61, - 0x73, 0x69, 0x65, 0x72, 0x2e, 0x0a, 0x0a, 0x09, 0x49, 0x74, 0x27, 0x73, - 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x20, 0x74, 0x6f, - 0x20, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x79, 0x20, 0x6e, 0x6f, 0x20, - 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x20, - 0x69, 0x66, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x61, 0x20, 0x70, 0x72, - 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x0a, - 0x09, 0x69, 0x73, 0x20, 0x64, 0x65, 0x73, 0x69, 0x72, 0x65, 0x64, 0x2e, - 0x0a, 0x0a, 0x2d, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, 0x5b, - 0x74, 0x79, 0x70, 0x65, 0x5d, 0x2c, 0x20, 0x2d, 0x66, 0x20, 0x5b, 0x74, - 0x79, 0x70, 0x65, 0x5d, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x73, 0x20, 0x74, - 0x68, 0x65, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x2e, 0x0a, 0x0a, 0x09, 0x5b, 0x74, 0x79, 0x70, - 0x65, 0x5d, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x6f, 0x6e, - 0x65, 0x20, 0x6f, 0x66, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6f, 0x6c, - 0x6c, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x3a, 0x0a, 0x0a, 0x09, 0x52, 0x47, - 0x42, 0x35, 0x36, 0x35, 0x0a, 0x09, 0x09, 0x42, 0x65, 0x73, 0x74, 0x20, - 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x6f, 0x66, - 0x20, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x66, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, - 0x74, 0x20, 0x73, 0x61, 0x63, 0x72, 0x69, 0x66, 0x69, 0x63, 0x69, 0x6e, - 0x67, 0x0a, 0x09, 0x09, 0x73, 0x70, 0x65, 0x65, 0x64, 0x2c, 0x20, 0x62, - 0x75, 0x74, 0x20, 0x63, 0x61, 0x6e, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, - 0x72, 0x61, 0x69, 0x6e, 0x62, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x20, 0x6f, - 0x6e, 0x20, 0x67, 0x72, 0x61, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x0a, 0x09, 0x41, 0x52, 0x47, - 0x42, 0x31, 0x35, 0x35, 0x35, 0x0a, 0x09, 0x09, 0x41, 0x6c, 0x6c, 0x6f, - 0x77, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x79, - 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, - 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x73, 0x2e, 0x20, 0x42, 0x65, 0x74, - 0x74, 0x65, 0x72, 0x20, 0x63, 0x68, 0x6f, 0x69, 0x63, 0x65, 0x20, 0x66, - 0x6f, 0x72, 0x0a, 0x09, 0x09, 0x67, 0x72, 0x61, 0x79, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x20, 0x74, 0x68, 0x61, 0x6e, 0x20, 0x52, 0x47, 0x42, 0x35, - 0x36, 0x35, 0x2c, 0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x72, 0x61, 0x69, 0x6e, 0x62, - 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x2e, 0x0a, 0x09, 0x41, 0x52, 0x47, 0x42, - 0x34, 0x34, 0x34, 0x34, 0x0a, 0x09, 0x09, 0x41, 0x6c, 0x6c, 0x6f, 0x77, - 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x20, - 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x2c, 0x20, 0x62, - 0x75, 0x74, 0x20, 0x70, 0x6f, 0x6f, 0x72, 0x65, 0x73, 0x74, 0x20, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x0a, 0x09, 0x09, 0x6e, 0x6f, 0x74, 0x69, 0x63, 0x61, - 0x62, 0x6c, 0x65, 0x20, 0x62, 0x61, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2e, - 0x0a, 0x09, 0x59, 0x55, 0x56, 0x34, 0x32, 0x32, 0x20, 0x2f, 0x20, 0x59, - 0x55, 0x56, 0x0a, 0x09, 0x09, 0x42, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, - 0x74, 0x68, 0x61, 0x6e, 0x20, 0x52, 0x47, 0x42, 0x35, 0x36, 0x35, 0x20, - 0x6f, 0x72, 0x20, 0x41, 0x52, 0x47, 0x42, 0x31, 0x35, 0x35, 0x35, 0x20, - 0x66, 0x6f, 0x72, 0x20, 0x67, 0x72, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x74, - 0x73, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x0a, 0x09, 0x09, 0x62, 0x69, 0x2f, - 0x74, 0x72, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x66, 0x69, - 0x6c, 0x74, 0x65, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x68, 0x61, 0x73, 0x20, - 0x77, 0x6f, 0x72, 0x73, 0x65, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, - 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x0a, 0x09, 0x50, 0x41, 0x4c, 0x38, - 0x42, 0x50, 0x50, 0x0a, 0x09, 0x09, 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, - 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x32, 0x35, 0x36, 0x20, 0x63, 0x6f, 0x6c, - 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x50, 0x61, 0x6c, 0x65, 0x74, 0x74, 0x65, - 0x20, 0x69, 0x73, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, 0x73, 0x65, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x0a, 0x09, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x20, - 0x4d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x74, 0x77, 0x69, 0x64, - 0x64, 0x6c, 0x65, 0x64, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x63, 0x6f, 0x6d, - 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x6d, 0x69, - 0x70, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x2c, 0x0a, 0x09, 0x09, - 0x61, 0x6e, 0x64, 0x20, 0x62, 0x69, 0x2f, 0x74, 0x72, 0x69, 0x6c, 0x69, - 0x6e, 0x65, 0x61, 0x72, 0x20, 0x61, 0x72, 0x65, 0x20, 0x75, 0x73, 0x65, - 0x64, 0x2c, 0x20, 0x61, 0x20, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, - 0x65, 0x20, 0x62, 0x75, 0x67, 0x20, 0x63, 0x61, 0x75, 0x73, 0x65, 0x73, - 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x0a, 0x09, 0x09, 0x74, 0x65, 0x78, 0x65, - 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, 0x20, 0x66, 0x69, 0x6c, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x63, 0x6f, 0x72, 0x72, - 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x20, 0x74, 0x68, 0x65, - 0x20, 0x74, 0x6f, 0x70, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2f, 0x62, 0x6f, - 0x74, 0x74, 0x6f, 0x6d, 0x0a, 0x09, 0x09, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x20, 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, 0x73, 0x20, 0x6f, 0x66, 0x20, - 0x61, 0x20, 0x34, 0x78, 0x32, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2e, - 0x0a, 0x09, 0x50, 0x41, 0x4c, 0x34, 0x42, 0x50, 0x50, 0x0a, 0x09, 0x09, - 0x4d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20, 0x6f, 0x66, 0x20, 0x31, - 0x36, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x2e, 0x20, 0x50, 0x61, - 0x6c, 0x65, 0x74, 0x74, 0x65, 0x20, 0x69, 0x73, 0x20, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x20, - 0x73, 0x65, 0x70, 0x65, 0x72, 0x61, 0x74, 0x65, 0x0a, 0x09, 0x09, 0x66, - 0x69, 0x6c, 0x65, 0x2e, 0x20, 0x4d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, - 0x20, 0x74, 0x77, 0x69, 0x64, 0x64, 0x6c, 0x65, 0x64, 0x2e, 0x20, 0x49, - 0x66, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x2c, 0x20, 0x6d, 0x69, 0x70, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x2c, 0x0a, 0x09, 0x09, 0x61, 0x6e, 0x64, 0x20, 0x62, 0x69, 0x2f, - 0x74, 0x72, 0x69, 0x6c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x20, 0x61, 0x72, - 0x65, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x20, 0x61, 0x20, 0x68, 0x61, - 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x20, 0x62, 0x75, 0x67, 0x20, 0x63, - 0x61, 0x75, 0x73, 0x65, 0x73, 0x20, 0x73, 0x6f, 0x6d, 0x65, 0x0a, 0x09, - 0x09, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, - 0x65, 0x20, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x65, 0x64, 0x20, 0x69, - 0x6e, 0x63, 0x6f, 0x72, 0x72, 0x65, 0x63, 0x74, 0x6c, 0x79, 0x20, 0x6f, - 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x74, 0x6f, 0x70, 0x20, 0x6c, 0x65, - 0x66, 0x74, 0x2f, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x0a, 0x09, 0x09, - 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x63, 0x6f, 0x72, 0x6e, 0x65, 0x72, - 0x73, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x34, 0x78, 0x34, 0x20, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x0a, 0x09, 0x42, 0x55, 0x4d, 0x50, 0x4d, 0x41, - 0x50, 0x0a, 0x09, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x73, 0x20, 0x50, 0x56, 0x52, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, - 0x20, 0x6d, 0x61, 0x70, 0x2e, 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x20, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x73, 0x20, 0x61, 0x0a, 0x09, - 0x09, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6d, 0x61, 0x70, 0x2e, - 0x0a, 0x09, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x0a, 0x09, 0x09, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x73, 0x20, 0x50, 0x56, 0x52, - 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x70, 0x2e, - 0x20, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x20, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x20, 0x69, 0x73, 0x20, 0x74, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x20, 0x61, 0x73, 0x20, 0x61, 0x0a, 0x09, 0x09, 0x44, 0x4f, 0x54, 0x33, - 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x6d, 0x61, 0x70, 0x2c, - 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x52, 0x47, 0x42, 0x20, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x20, 0x74, 0x6f, 0x20, - 0x74, 0x68, 0x65, 0x0a, 0x09, 0x09, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, - 0x27, 0x73, 0x20, 0x58, 0x59, 0x5a, 0x2e, 0x0a, 0x09, 0x41, 0x55, 0x54, - 0x4f, 0x0a, 0x09, 0x09, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x73, 0x20, - 0x52, 0x47, 0x42, 0x35, 0x36, 0x35, 0x2c, 0x20, 0x41, 0x52, 0x47, 0x42, - 0x31, 0x35, 0x35, 0x35, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x41, 0x52, 0x47, - 0x42, 0x34, 0x34, 0x34, 0x34, 0x20, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x0a, 0x09, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x6f, - 0x66, 0x20, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x20, 0x69, 0x6d, 0x61, 0x67, - 0x65, 0x2e, 0x20, 0x49, 0x66, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x20, - 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x2c, 0x20, 0x52, 0x47, 0x42, 0x35, - 0x36, 0x35, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x2c, 0x0a, - 0x09, 0x09, 0x61, 0x6c, 0x6c, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, - 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x65, 0x69, 0x74, 0x68, 0x65, 0x72, - 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x6f, 0x70, 0x61, 0x71, 0x75, - 0x65, 0x20, 0x6f, 0x72, 0x20, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x20, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x0a, 0x09, - 0x09, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2c, 0x20, 0x41, 0x52, 0x47, 0x42, - 0x31, 0x35, 0x35, 0x35, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, - 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x69, 0x66, 0x20, 0x73, 0x6f, 0x6d, - 0x65, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x20, 0x68, 0x61, 0x76, - 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x66, 0x75, 0x6c, 0x6c, 0x79, 0x0a, - 0x09, 0x09, 0x6f, 0x70, 0x61, 0x71, 0x75, 0x65, 0x20, 0x6f, 0x72, 0x20, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x20, - 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x2c, 0x20, 0x41, 0x52, 0x47, 0x42, - 0x34, 0x34, 0x34, 0x34, 0x20, 0x69, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, - 0x2e, 0x0a, 0x09, 0x41, 0x55, 0x54, 0x4f, 0x59, 0x55, 0x56, 0x0a, 0x09, - 0x09, 0x53, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x73, 0x20, 0x41, 0x55, 0x54, - 0x4f, 0x2c, 0x20, 0x62, 0x75, 0x74, 0x20, 0x75, 0x73, 0x61, 0x67, 0x65, - 0x20, 0x6f, 0x66, 0x20, 0x52, 0x47, 0x42, 0x35, 0x36, 0x35, 0x20, 0x69, - 0x73, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x20, 0x77, - 0x69, 0x74, 0x68, 0x20, 0x59, 0x55, 0x56, 0x34, 0x32, 0x32, 0x2e, 0x0a, - 0x0a, 0x2d, 0x2d, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x5b, - 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5d, 0x2c, 0x20, 0x2d, - 0x70, 0x20, 0x5b, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x5d, - 0x0a, 0x09, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x73, 0x20, - 0x61, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x6f, 0x66, - 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x69, - 0x6e, 0x67, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x20, 0x66, - 0x69, 0x6c, 0x65, 0x2e, 0x20, 0x59, 0x6f, 0x75, 0x20, 0x63, 0x61, 0x6e, - 0x0a, 0x09, 0x73, 0x65, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x6f, 0x66, 0x20, 0x62, 0x69, 0x74, - 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x72, 0x65, 0x64, 0x75, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x64, 0x69, 0x74, 0x68, 0x65, 0x72, - 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x6d, 0x69, 0x70, 0x6d, 0x61, 0x70, 0x73, - 0x2c, 0x0a, 0x09, 0x61, 0x6e, 0x64, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, - 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x0a, 0x0a, 0x09, 0x54, 0x68, - 0x65, 0x20, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x20, 0x69, 0x73, - 0x20, 0x63, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x50, 0x4e, - 0x47, 0x2c, 0x20, 0x4a, 0x50, 0x47, 0x2c, 0x20, 0x42, 0x4d, 0x50, 0x2c, - 0x20, 0x6f, 0x72, 0x20, 0x54, 0x47, 0x41, 0x20, 0x66, 0x69, 0x6c, 0x65, ...<truncated>... hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-08-19 06:00:27
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via c2d45545e439c0624865b792a23653bb3dfd956b (commit) via 76326ab61332ac7f7257447b88f4ff2bbcbaa712 (commit) from fff864a476bc3096afc0de1b515f1a4453a6caa5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit c2d45545e439c0624865b792a23653bb3dfd956b Author: SiZiOUS <si...@gm...> Date: Mon Aug 19 06:59:56 2024 +0100 `utils`: adding `font2txf`, a tool to make TXF from TrueType/OpenType fonts (#704) * `utils`: adding `font2txf`, a tool to make TXF from TrueType/OpenType fonts. This tool is an updated version of the ttf2txf tool created by Chris Laurel for the Celestia project. TXF font format was created in 1997 by Mark J. Kilgard for the OpenGL Utility Toolkit (GLUT). TXF is supported using the `libdcplib` kos-port via the PLIB FNT component. * `utils`: don't build `font2txf` by default (at least for now) commit 76326ab61332ac7f7257447b88f4ff2bbcbaa712 Author: SiZiOUS <si...@gm...> Date: Mon Aug 19 06:25:26 2024 +0100 `LibADX`: adding an example for ADX playback (#715) This example was written by Josh 'PH3NOM' Pearson <ph3...@gm...> (@PH3NOM-PRO). ----------------------------------------------------------------------- Summary of changes: .../dreamcast/{2ndmix => sound/hello-adx}/Makefile | 12 +- examples/dreamcast/sound/hello-adx/libADXplay.c | 121 +++++++ examples/dreamcast/sound/hello-adx/readme.txt | 3 + .../dreamcast/sound/hello-adx/romdisk}/.keepme | 0 utils/font2txf/.gitignore | 40 +++ utils/font2txf/CHANGELOG.md | 35 ++ utils/font2txf/CREDITS | 6 + utils/{genromfs/COPYING => font2txf/LICENSE} | 64 +--- utils/{makeip => font2txf}/Makefile | 0 utils/font2txf/README.md | 169 ++++++++++ utils/font2txf/TODO.md | 10 + utils/font2txf/img/arial.png | Bin 0 -> 76428 bytes utils/font2txf/src/Makefile | 98 ++++++ utils/font2txf/src/Makefile.cfg | 46 +++ utils/font2txf/src/Makefile.hostdetect | 43 +++ utils/font2txf/src/charset.cpp | 32 ++ utils/font2txf/src/charset.h | 19 ++ utils/font2txf/src/global.cpp | 49 +++ utils/font2txf/src/global.h | 83 +++++ utils/font2txf/src/main.cpp | 360 +++++++++++++++++++++ utils/font2txf/src/preview.cpp | 186 +++++++++++ utils/font2txf/src/preview.h | 26 ++ utils/font2txf/src/txfbuild.cpp | 286 ++++++++++++++++ utils/font2txf/src/txfbuild.h | 27 ++ utils/font2txf/src/txfwrite.cpp | 148 +++++++++ utils/font2txf/src/txfwrite.h | 77 +++++ utils/font2txf/src/utils.cpp | 64 ++++ utils/font2txf/src/utils.h | 160 +++++++++ utils/gentexfont/readme.txt | 6 + 29 files changed, 2101 insertions(+), 69 deletions(-) copy examples/dreamcast/{2ndmix => sound/hello-adx}/Makefile (56%) create mode 100644 examples/dreamcast/sound/hello-adx/libADXplay.c create mode 100644 examples/dreamcast/sound/hello-adx/readme.txt copy {addons/lib => examples/dreamcast/sound/hello-adx/romdisk}/.keepme (100%) create mode 100644 utils/font2txf/.gitignore create mode 100644 utils/font2txf/CHANGELOG.md create mode 100644 utils/font2txf/CREDITS copy utils/{genromfs/COPYING => font2txf/LICENSE} (83%) copy utils/{makeip => font2txf}/Makefile (100%) create mode 100644 utils/font2txf/README.md create mode 100644 utils/font2txf/TODO.md create mode 100644 utils/font2txf/img/arial.png create mode 100644 utils/font2txf/src/Makefile create mode 100644 utils/font2txf/src/Makefile.cfg create mode 100644 utils/font2txf/src/Makefile.hostdetect create mode 100644 utils/font2txf/src/charset.cpp create mode 100644 utils/font2txf/src/charset.h create mode 100644 utils/font2txf/src/global.cpp create mode 100644 utils/font2txf/src/global.h create mode 100644 utils/font2txf/src/main.cpp create mode 100644 utils/font2txf/src/preview.cpp create mode 100644 utils/font2txf/src/preview.h create mode 100644 utils/font2txf/src/txfbuild.cpp create mode 100644 utils/font2txf/src/txfbuild.h create mode 100644 utils/font2txf/src/txfwrite.cpp create mode 100644 utils/font2txf/src/txfwrite.h create mode 100644 utils/font2txf/src/utils.cpp create mode 100644 utils/font2txf/src/utils.h diff --git a/examples/dreamcast/2ndmix/Makefile b/examples/dreamcast/sound/hello-adx/Makefile similarity index 56% copy from examples/dreamcast/2ndmix/Makefile copy to examples/dreamcast/sound/hello-adx/Makefile index 0e3b214d..218ef865 100644 --- a/examples/dreamcast/2ndmix/Makefile +++ b/examples/dreamcast/sound/hello-adx/Makefile @@ -1,11 +1,11 @@ -# KallistiOS ##version## # -# 2ndmix/Makefile -# Copyright (C)2003 Megan Potter +# LibADX Test +# Copyright (C) 2011-2013 Josh 'PH3NOM' Pearson <ph3...@gm...> +# Copyright (C) 2024 The KOS Team and contributors # -TARGET = 2ndmix.elf -OBJS = 2ndmix.o romdisk.o +TARGET = libADXplay.elf +OBJS = libADXplay.o romdisk.o KOS_ROMDISK_DIR = romdisk all: rm-elf $(TARGET) @@ -19,7 +19,7 @@ rm-elf: -rm -f $(TARGET) romdisk.* $(TARGET): $(OBJS) - kos-cc -o $(TARGET) $(OBJS) + kos-cc -o $(TARGET) $(OBJS) -lADX run: $(TARGET) $(KOS_LOADER) $(TARGET) diff --git a/examples/dreamcast/sound/hello-adx/libADXplay.c b/examples/dreamcast/sound/hello-adx/libADXplay.c new file mode 100644 index 00000000..8e220511 --- /dev/null +++ b/examples/dreamcast/sound/hello-adx/libADXplay.c @@ -0,0 +1,121 @@ +/* LibADX for KallistiOS ##version## + + libADXPlay.c + Simple "Hello World" style example of ADX playback. + + Copyright (C) 2012 Josh 'PH3NOM' Pearson <ph3...@gm...> + Copyright (C) 2024 The KOS Team and contributors +*/ + +#include <stdio.h> + +#include <kos/dbgio.h> + +#include <dc/maple.h> +#include <dc/maple/controller.h> +#include <dc/sound/stream.h> + +#include <kos/init.h> +#include <kos.h> + +#include <adx/adx.h> /* ADX Decoder Library */ +#include <adx/snddrv.h> /* Direct Access to Sound Driver */ + +#define CONT_RESUME 0x01 +#define CONT_PAUSE 0x02 +#define CONT_RESTART 0x03 +#define CONT_STOP 0x04 +#define CONT_VOLUP 0x05 +#define CONT_VOLDN 0x06 + +int check_cont() +{ + int ret=0; + maple_device_t *cont; + cont_state_t *state; + cont = maple_enum_type(0, MAPLE_FUNC_CONTROLLER); + + if(cont) + { + state = (cont_state_t *)maple_dev_status(cont); + if (!state) + ret = 0; + if (state->buttons & CONT_START) + ret = CONT_STOP; + if (state->buttons & CONT_X) + ret = CONT_RESTART; + if (state->buttons & CONT_A) + ret = CONT_PAUSE; + if (state->buttons & CONT_B) + ret = CONT_RESUME; + if (state->buttons & CONT_DPAD_UP) + ret = CONT_VOLUP; + if (state->buttons & CONT_DPAD_DOWN) + ret = CONT_VOLDN; + } + return ret; +} + +int main() +{ + /* Print some text to the screen */ + int o = 20*640+20; + bfont_set_encoding(BFONT_CODE_ISO8859_1); + bfont_draw_str(vram_s+o,640,1,"LibADX (C) PH3NOM 2012"); o+=640*48; + printf("LibADX (C) PH3NOM 2012\n"); + + /* Start the ADX stream, with looping enabled */ + if( adx_dec( "/rd/test.adx", 1 ) < 1 ) + { + printf("Invalid ADX file\n"); + return 0; + } + + /* Wait for the stream to start */ + while( snddrv.drv_status == SNDDRV_STATUS_NULL ) + thd_pass(); + + bfont_draw_str(vram_s+o,640,1,"Press Start to stop, press X to restart"); + o+=640*48; + bfont_draw_str(vram_s+o,640,1,"Press A to pause, press B to resume"); + o+=640*48; + bfont_draw_str(vram_s+o,640,1,"Press UP or Down to increase/decrease volume"); + + /* Check for user input and eof */ + while( snddrv.drv_status != SNDDRV_STATUS_NULL ) { + int vol; + switch (check_cont()) { + case CONT_RESTART: + if(adx_restart()) + printf("ADX streaming restarted\n"); + break; + case CONT_STOP: + if(adx_stop()) + printf("ADX streaming stopped\n"); + break; + case CONT_PAUSE: + if(adx_pause()) + printf("ADX streaming paused\n"); + break; + case CONT_RESUME: + if(adx_resume()) + printf("ADX streaming resumed\n"); + break; + case CONT_VOLUP: + vol = snddrv_volume_up(); + printf("SNDDRV: Volume set to %i%s\n", ((vol*100)/255), "%"); + break; + case CONT_VOLDN: + vol = snddrv_volume_down(); + printf("SNDDRV: Volume set to %i%s\n", ((vol*100)/255), "%"); + break; + default: + break; + } + thd_sleep(50); + } /* when (snddrv.drv_status == SNDDRV_STATUS_NULL) the stream is finished*/ + + printf( "LibADX Example Finished\n"); + + return 0; +} diff --git a/examples/dreamcast/sound/hello-adx/readme.txt b/examples/dreamcast/sound/hello-adx/readme.txt new file mode 100644 index 00000000..e08dcc08 --- /dev/null +++ b/examples/dreamcast/sound/hello-adx/readme.txt @@ -0,0 +1,3 @@ +This example expects a file called "test.adx" to exist in the root of the +romdisk. Put a relatively small adx file with the correct filename in the +romdisk directory before compiling if you want the example to work. ;) diff --git a/addons/lib/.keepme b/examples/dreamcast/sound/hello-adx/romdisk/.keepme similarity index 100% copy from addons/lib/.keepme copy to examples/dreamcast/sound/hello-adx/romdisk/.keepme diff --git a/utils/font2txf/.gitignore b/utils/font2txf/.gitignore new file mode 100644 index 00000000..5bcd548d --- /dev/null +++ b/utils/font2txf/.gitignore @@ -0,0 +1,40 @@ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +# Fonts +*.ttf +*.otf +*.txf + +# Other types +*.log diff --git a/utils/font2txf/CHANGELOG.md b/utils/font2txf/CHANGELOG.md new file mode 100644 index 00000000..1b2474ef --- /dev/null +++ b/utils/font2txf/CHANGELOG.md @@ -0,0 +1,35 @@ +# font2txf: Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.12.0] - 2024-08-xx + +### Added + +- Preview option (`-p`), used for displaying the generated TXF file at the + end of the process. This requires [Freeglut](https://freeglut.sourceforge.net/), + but it can be disabled if needed at compile time. +- Verbose option (`-v`), that display the original output from `ttf2txf`. + +### Changed + +- Complete redesign/refactoring of the whole code. Splitting code into many + small source files instead of a single `ttf2txf.cpp` file. +- Command-line options were updated a bit (exclusion between `-c` and `-f`, + `-q` is really quiet now, `-h` stands for help now but can be mapped to + height as originally if used with `-w`, etc.). +- Program is now licensed under the **GNU GPL 2 License** like the + [Celestia](https://celestiaproject.space/) project (previously this tool + wasn't clearly licensed). + +### Fixed + +- Some memory leaks while building the TXF font when an error occured. + +## [1.11.0] - 2001-10-20 + +### Added +- Initial release used for the [Celestia](https://celestiaproject.space/) project. diff --git a/utils/font2txf/CREDITS b/utils/font2txf/CREDITS new file mode 100644 index 00000000..9caa9721 --- /dev/null +++ b/utils/font2txf/CREDITS @@ -0,0 +1,6 @@ +font2txf: Credits + +- Mark J. Kilgard: Creator of the Texture Mapped Font (TXF) format. +- Chris Laurel and the Celestia project team: The initial authors of the original "ttf2txf" utility. + https://web.archive.org/web/20051104023112/http://www.shatters.net/~claurel/celestia/fonts/tt2txf/ +- Mickaël Cardoso (SiZiOUS): Complete refactoring of the project. diff --git a/utils/genromfs/COPYING b/utils/font2txf/LICENSE similarity index 83% copy from utils/genromfs/COPYING copy to utils/font2txf/LICENSE index dc63aaca..5ec43ee1 100644 --- a/utils/genromfs/COPYING +++ b/utils/font2txf/LICENSE @@ -1,9 +1,8 @@ - GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -277,64 +276,3 @@ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19yy name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/utils/makeip/Makefile b/utils/font2txf/Makefile similarity index 100% copy from utils/makeip/Makefile copy to utils/font2txf/Makefile diff --git a/utils/font2txf/README.md b/utils/font2txf/README.md new file mode 100644 index 00000000..29ce2581 --- /dev/null +++ b/utils/font2txf/README.md @@ -0,0 +1,169 @@ +# font2txf + +**font2txf** is an utility used for generating texture mapped font files, +also known as the `TXF` format, from a **TrueType** (`TTF`) or **OpenType** +(`OTF`) font file. + +`TXF` is a texture font which can be used in the context of **GLUT** (OpenGL +Utility Toolkit), created by [Mark J. Kilgard](https://en.wikipedia.org/wiki/Mark_Kilgard). +For the **Sega Dreamcast**, the `TXF` format is supported using the `libdcplib` +KallistiOS Port, using the `PLIB FNT` component. An example of source code, +including sample `TXF` fonts, is available here: + + $KOS_BASE/examples/dreamcast/cpp/dcplib + +For generating `TXF` files, you can use the provided `gentexfont` (originally +written by Mark himself), `ttf2txf` (from the [Celestia](https://celestiaproject.space/) +project) or this `font2txf` utility. + +Below you'll find an example of a `TXF` generated font, from the `Arial` +TrueType font: + +![Example](img/arial.png "Sample Arial TXF image") + +## Building + +This program is a standard C program which may be compiled with **GNU Make**. +It requires `FreeType` installed. +[Learn more about FreeType here](http://freetype.org/). + +1. Edit the `Makefile.cfg` and check if everything is OK for you; +2. Enter `make` (`gmake` on BSD systems). + +If you want to enable the **Preview** feature (as displayed in this +`README` file), you will have to install `freeglut`. +[Learn more about freeglut here](https://freeglut.sourceforge.net/). + +Please note that you can indeed make a static binary by setting up +the `STANDALONE_BINARY` flag to `1`. This was created with Microsoft +Windows in mind, but could work on other OS as well. + +## Usage + +To use this tool, the usage is nearly identical as the original `ttf2txf` +utility. The minimal command-line is: + + ./font2txf <fontfile.ttf> + +This will convert `fontfile.ttf` to the corresponding `fontfile.txf`, +using the defaults, which are a `256x256` texture size, using a `20pt` font +size and the default charset, which is: + + (space)(A..Z)1234567890(a..z)?.;,!*:"/+-|'@#$%^&<>()[]{}_ + +Of course, `(space)` means a blank space character (` `) and `(A..Z)` means +every characters, from `A` to `Z` (same for `(a..z)`). + +Example of a more complete command-line: + + ./ttf2txf -o revenant.txf -s 22 -w 256 -h 256 -c "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()-_=+[]{}|;:,.<>~ ?/" revenant.ttf + +The `revenant.txf` file will be generated from the `revenant.ttf` font, +in a `256x256` texture, using the charset passed with the `-c` switch, +and using the `22pt` size. + +### Available Options + +Available options are (displayed with the `-h` switch): + + -w <width> Texture width (default: 256) + -e <height> Texture height (default: 256); also `-h` for compatibility + -c <string> Override charset to convert; read from command-line + Cannot be mixed with `-f` + -f <filename.txt> Override charset to convert; read from a text file + Cannot be mixed with `-c` + -g <gap> Space between glyphs (default: 1) + -s <size> Font point size (default: 20) + -o <filename.txf> Output file for textured font (default: <fontfile>.txf) + -q Quiet; except error messages, cannot be mixed with `-v` + -v Verbose; display more info, cannot be mixed with `-q` + -p Preview; display the txf output at the end of the process + -h Usage information (you're looking at it); if `-w` not set + +### Altering the generated texture + +The `-w` (width) and `-e` (height) options are used for altering the size of the +generated texture. For compatibility reasons, `-e` can be replaced by `-h`, if +used with `-w`. Indeed in the original `ttf2txf` tool, `-h` was mapped to texture +height, but now it means displaying help. ...<truncated>... hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-08-19 05:00:49
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via fff864a476bc3096afc0de1b515f1a4453a6caa5 (commit) from 9d115023ffc10996601a8e12fdb809cff2c5804f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit fff864a476bc3096afc0de1b515f1a4453a6caa5 Author: jnmartin84 <jnm...@gm...> Date: Mon Aug 19 00:55:22 2024 -0400 Add an example of how to render lines with the PVR. (#714) * Add PVR-accelerated line-rendering example. * turns out the endpoint order condition check is simple * cleanup vert swapping * formatting and comments * one missed spaces-to-tab * remove copyright header until I figure out what is wanted * fix remaining stray tab issues * update comments and long lines ----------------------------------------------------------------------- Summary of changes: examples/dreamcast/pvr/Makefile | 3 + .../{network/dns-client => pvr/pvrline}/Makefile | 7 +- examples/dreamcast/pvr/pvrline/pvrline.c | 264 +++++++++++++++++++++ 3 files changed, 271 insertions(+), 3 deletions(-) copy examples/dreamcast/{network/dns-client => pvr/pvrline}/Makefile (82%) create mode 100644 examples/dreamcast/pvr/pvrline/pvrline.c diff --git a/examples/dreamcast/pvr/Makefile b/examples/dreamcast/pvr/Makefile index 24812cfe..3cb67d66 100644 --- a/examples/dreamcast/pvr/Makefile +++ b/examples/dreamcast/pvr/Makefile @@ -6,6 +6,7 @@ all: $(KOS_MAKE) -C plasma + $(KOS_MAKE) -C pvrline $(KOS_MAKE) -C pvrmark $(KOS_MAKE) -C pvrmark_strips $(KOS_MAKE) -C pvrmark_strips_direct @@ -18,6 +19,7 @@ all: clean: $(KOS_MAKE) -C plasma clean + $(KOS_MAKE) -C pvrline clean $(KOS_MAKE) -C pvrmark clean $(KOS_MAKE) -C pvrmark_strips clean $(KOS_MAKE) -C pvrmark_strips_direct clean @@ -30,6 +32,7 @@ clean: dist: $(KOS_MAKE) -C plasma dist + $(KOS_MAKE) -C pvrline dist $(KOS_MAKE) -C pvrmark dist $(KOS_MAKE) -C pvrmark_strips dist $(KOS_MAKE) -C pvrmark_strips_direct dist diff --git a/examples/dreamcast/network/dns-client/Makefile b/examples/dreamcast/pvr/pvrline/Makefile similarity index 82% copy from examples/dreamcast/network/dns-client/Makefile copy to examples/dreamcast/pvr/pvrline/Makefile index 0e010c5a..a834749b 100644 --- a/examples/dreamcast/network/dns-client/Makefile +++ b/examples/dreamcast/pvr/pvrline/Makefile @@ -1,8 +1,8 @@ # Put the filename of the output binary here -TARGET = dns-client.elf +TARGET = pvrline.elf # List all of your C files here, but change the extension to ".o" -OBJS = dns-client.o +OBJS = pvrline.o all: rm-elf $(TARGET) @@ -18,8 +18,9 @@ $(TARGET): $(OBJS) kos-cc -o $(TARGET) $(OBJS) run: $(TARGET) - $(KOS_LOADER) $(TARGET) -n + $(KOS_LOADER) $(TARGET) dist: $(TARGET) -rm -f $(OBJS) $(KOS_STRIP) $(TARGET) + diff --git a/examples/dreamcast/pvr/pvrline/pvrline.c b/examples/dreamcast/pvr/pvrline/pvrline.c new file mode 100644 index 00000000..ee6632fb --- /dev/null +++ b/examples/dreamcast/pvr/pvrline/pvrline.c @@ -0,0 +1,264 @@ +/* + * KallistiOS ##version## + * + * examples/dreamcast/pvr/pvrline/pvrline.c + * Copyright (C) 2024 Jason Martin + * + * This example demonstrates the use of the PVR to draw lines with quads + * (as triangle strips). + * It also demonstrates the use of pvr_list_prim, interleaving the drawing of + * OPAQUE and TRANSPARENT polygons. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + +#include <kos.h> + +/* 512 kb vertex buffer size */ +#define VERTBUF_SIZE (512*1024) + +KOS_INIT_FLAGS(INIT_DEFAULT); + +/* enable OP and TR lists */ +pvr_init_params_t pvr_params = { +{ PVR_BINSIZE_16, 0, PVR_BINSIZE_16, 0, 0 }, VERTBUF_SIZE, 1, 0, 0, 3 +}; + +uint8_t __attribute__((aligned(32))) op_buf[VERTBUF_SIZE]; +uint8_t __attribute__((aligned(32))) tr_buf[VERTBUF_SIZE]; + +/* + * given a vec3f_t representing the screen-space start of a line (x,y,z), + * a vec3f_t representing the screen-space end of a line (x,y,z), + * a color, a width, a pvr polygon list type and a pvr polygon header + * uses the PVR to draw a line with a triangle strip consisting of 4 vertices + * representing a quad +*/ +void draw_pvr_line(vec3f_t *v1, vec3f_t *v2, float width, int color, + int which_list, pvr_poly_hdr_t *which_hdr); + +int main(int argc, char **argv) +{ + pvr_poly_hdr_t op_hdr, tr_hdr; + pvr_poly_cxt_t op_cxt, tr_cxt; + + /* start and end points of a line in screen-space */ + vec3f_t v1, v2; + /* red, green, blue and alpha color components */ + int r, g, b, a; + /* packed color */ + int color; + /* line width */ + int width; + /* moving offset added or subtracted to x and y components of endpoints */ + int offset; + /* number of lines to draw per frame */ + int linecount = 1; + + maple_device_t *controller; + cont_state_t *cont; + + printf("---KallistiOS PVR Line-drawing Example---\n"); + printf("Press DPAD UP to increase line count\n\t(up to a maximum of 1536" + " lines).\n"); + printf("Press DPAD DOWN to decrease line count\n\t(down to a minimum of 1" + " line).\n"); + printf("Press A to reset line count to 1.\n"); + printf("Press Start to exit.\n"); + + srand(time(NULL)); + + vid_set_enabled(0); + vid_set_mode(DM_640x480, PM_RGB565); + pvr_init(&pvr_params); + vid_set_enabled(1); + + /* polygon header setup, OP lines */ + pvr_poly_cxt_col(&op_cxt, PVR_LIST_OP_POLY); + pvr_poly_compile(&op_hdr, &op_cxt); + + /* polygon header setup, TR lines */ + pvr_poly_cxt_col(&tr_cxt, PVR_LIST_TR_POLY); + pvr_poly_compile(&tr_hdr, &tr_cxt); + + offset = 0; + + while (true) { + controller = maple_enum_type(0, MAPLE_FUNC_CONTROLLER); + if (controller) { + cont = maple_dev_status(controller); + if (cont->buttons & CONT_DPAD_UP) { + if (linecount < 1536) { + linecount += 1; + } + } else if (cont->buttons & CONT_DPAD_DOWN) { + if (linecount > 1) { + linecount -= 1; + } + } else if (cont->buttons & CONT_A) { + linecount = 1; + } else if (cont->buttons & CONT_START) { + break; + } + } + + pvr_wait_ready(); + pvr_scene_begin(); + + /* set vertex buffers for pvr_list_prim use */ + pvr_set_vertbuf(PVR_LIST_OP_POLY, op_buf, VERTBUF_SIZE); + pvr_set_vertbuf(PVR_LIST_TR_POLY, tr_buf, VERTBUF_SIZE); + + /* + * incrementing offset added to endpoints + * make endpoints occasionally move to other side of screen + * from where they start + * force swaps in the line drawing routine + */ + offset = (offset + 5) % 360; + + for (int i = 0; i < linecount; i++) { + v1.x = rand() % 128; + v1.y = rand() % 64; + v1.z = 5; + + v2.x = 500 + (rand() % 96); + v2.y = 400 + (rand() % 48); + v2.z = 5; + + /* + * add an offset in the range [0,359] to v1 x and y + * x stays within [0,487] + * y stays within [0,422] + */ + v1.x += offset; + v1.y += offset; + + /* + * subtract an offset in the range [0,359] from v2 x and y + * x stays within [141,595] + * y stays within [40,447] + */ + v2.x -= offset; + v2.y -= offset; + + /* + * the above offset can move v2 to the left of v1 + * this demonstrates that lines will always render correctly + * regardless of vertex order + */ + + /* generate a random RGBA color */ + r = rand() % 256; + g = rand() % 256; + b = rand() % 256; + a = rand() % 256; + + color = PVR_PACK_COLOR((float)a / 255.0f, + (float)r / 255.0f, + (float)g / 255.0f, + (float)b / 255.0f); + + width = (rand() % 5) + 1; + + /* interleaved use of PVR polygon list types */ + if (a == 255) { + /* + * when alpha is fully opaque + * use the OP list + */ + draw_pvr_line(&v1, &v2, width, color, + PVR_LIST_OP_POLY, &op_hdr); + } else { + /* + * when alpha is transparent at all + * use the TR list + */ + draw_pvr_line(&v1, &v2, width, color, + PVR_LIST_TR_POLY, &tr_hdr); + } + } + + pvr_scene_finish(); + } +} + +void draw_pvr_line(vec3f_t *v1, vec3f_t *v2, float width, int color, + int which_list, pvr_poly_hdr_t *which_hdr) +{ + pvr_vertex_t __attribute__((aligned(32))) line_verts[4]; + pvr_vertex_t *vert = line_verts; + + vec3f_t *ov1; + vec3f_t *ov2; + + for (int i=0;i<4;i++) { + line_verts[i].flags = PVR_CMD_VERTEX; + line_verts[i].argb = color; + line_verts[i].oargb = 0; + } + line_verts[3].flags = PVR_CMD_VERTEX_EOL; + + /* + * when first vertex is to the left of or vertical with second vertex + * they are already ordered + * otherwise + * swap endpoints + */ + if(v1->x <= v2->x) { + ov1 = v1; + ov2 = v2; + } else { + ov1 = v2; + ov2 = v1; + } + + /* + * https://devcry.heiho.net/html/2017/20170820-opengl-line-drawing.html + * + * get the normal to the line segment running from v1 to v2 + * use normal to draw a quad covering the actual line segment + */ + float dx = ov2->x - ov1->x; + float dy = ov2->y - ov1->y; + + /* + * use the fast reciprocal square root function provided by KOS + * to get inverse of the magnitude of the normal + * multiply by half of the line width + * this scales the normal, making a quad with the requested line width + */ + float inverse_magnitude = frsqrt((dx*dx) + (dy*dy)) * + ((float)width*0.5f); + float nx = -dy * inverse_magnitude; + float ny = dx * inverse_magnitude; + + /* normal offset "down" from the first endpoint */ + vert->x = ov1->x + nx; + vert->y = ov1->y + ny; + vert->z = ov1->z; + vert++; + + /* normal offset "up" from the first endpoint */ + vert->x = ov1->x - nx; + vert->y = ov1->y - ny; + vert->z = ov2->z; + vert++; + + /* normal offset "down" from the second endpoint */ + vert->x = ov2->x + nx; + vert->y = ov2->y + ny; + vert->z = ov1->z; + vert++; + + /* normal offset "up" from the second endpoint */ + vert->x = ov2->x - nx; + vert->y = ov2->y - ny; + vert->z = ov2->z; + + /* submit the poly header and vertices to requested list */ + pvr_list_prim(which_list, which_hdr, sizeof(pvr_poly_hdr_t)); + pvr_list_prim(which_list, &line_verts, 4 * sizeof(pvr_vertex_t)); +} hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-08-19 04:27:20
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 9d115023ffc10996601a8e12fdb809cff2c5804f (commit) via 51b5cd64678d5c6e8446bed3f6ccf7365d06538b (commit) from 8f1db16e84dbbc968567f5bda8c6f96b012b74b1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 9d115023ffc10996601a8e12fdb809cff2c5804f Author: dfchil <dan...@gm...> Date: Mon Aug 19 06:26:56 2024 +0200 Add pvrtex utility (#602) * added pvrtex source files * handled compilation warnings added install target in makefile some minor formatting cleanup * bugfix makefile * fixed install target, further cleanup in nvmath.h for arm64 compilation * Added install target in Makefile Removed some dead code in nvmath.h that prevented compilation on ARM64 targets Added targets for generating header files from selected sections in the README file Added command line option --examples/-E which outputs the "Usage Examples" section of the README file Changed -h/--help option to output the "Command Line Options:" section of the README file Added this CHANGELOG file * Fixed bug with printing of non zero terminated char arrays from info/*.h files * Updated doc/CHANGELOG * Added pvrtex folder as a dependency in utils/Makefile * removed two unused variables * fixed make depency error improved error output * Added missing symbols in file_dctex.h by including <dc/pvr.h> * fixed header compile issues after upgrading gcc to 14.1.1-dev and kos to latest stable * allowed myself the liberty of patching init.mk in this PR as well, for my own convienience * removed dependency on kos/pvr.h, added generated info/*.h files --------- Co-authored-by: drxl <da...@vm...> Co-authored-by: Daniel Fairchild <da...@vi...> commit 51b5cd64678d5c6e8446bed3f6ccf7365d06538b Author: Paul Cercueil <pa...@cr...> Date: Mon Aug 19 06:20:37 2024 +0200 Iso9660: Read CD-ROM sectors using DMA (#659) * iso9660: Reduce number of allocations Reduce the number of allocations for the cache from 32 (16 icache/dcache buffers) to just 2: one for the icache/dcache structures, and one for the data buffers. This will later allow to allocate the data arrays all at once with a specific alignment. Signed-off-by: Paul Cercueil <pa...@cr...> * iso9660: Use DMA to read sectors from CD-ROM Use the DMA to read sectors from the CD-ROM instead of reading them using PIO. This frees the CPU to work on other tasks while the data transfer is ongoing. Signed-off-by: Paul Cercueil <pa...@cr...> --------- Signed-off-by: Paul Cercueil <pa...@cr...> ----------------------------------------------------------------------- Summary of changes: doc/CHANGELOG | 1 + kernel/arch/dreamcast/fs/fs_iso9660.c | 26 +- utils/Makefile | 2 +- utils/pvrtex/.gitignore | 2 + utils/pvrtex/CHANGELOG | 29 + utils/pvrtex/Makefile | 59 + utils/pvrtex/avstring.c | 462 ++ utils/pvrtex/bprint.c | 332 + utils/pvrtex/compat/va_copy.h | 34 + utils/pvrtex/crc.c | 413 ++ utils/pvrtex/dither.cpp | 478 ++ utils/pvrtex/elbg.c | 530 ++ utils/pvrtex/elbg.h | 59 + utils/pvrtex/file_common.c | 74 + utils/pvrtex/file_common.h | 22 + utils/pvrtex/file_dctex.c | 88 + utils/pvrtex/file_dctex.h | 565 ++ utils/pvrtex/file_pvr.c | 82 + utils/pvrtex/file_pvr.h | 21 + utils/pvrtex/file_tex.c | 76 + utils/pvrtex/file_tex.h | 8 + addons/lib/.keepme => utils/pvrtex/info/.gitkeep | 0 utils/pvrtex/info/examples.h | 175 + utils/pvrtex/info/options.h | 1030 +++ utils/pvrtex/lfg.c | 87 + utils/pvrtex/libavcodec/elbg.h | 59 + utils/pvrtex/libavutil/attributes.h | 173 + utils/pvrtex/libavutil/attributes_internal.h | 34 + utils/pvrtex/libavutil/avassert.h | 75 + utils/pvrtex/libavutil/avconfig.h | 6 + utils/pvrtex/libavutil/avstring.h | 429 ++ utils/pvrtex/libavutil/avutil.h | 371 + utils/pvrtex/libavutil/bprint.h | 251 + utils/pvrtex/libavutil/bswap.h | 111 + utils/pvrtex/libavutil/common.h | 578 ++ utils/pvrtex/libavutil/crc.h | 102 + utils/pvrtex/libavutil/dynarray.h | 70 + utils/pvrtex/libavutil/error.h | 128 + utils/pvrtex/libavutil/internal.h | 188 + utils/pvrtex/libavutil/intfloat.h | 77 + utils/pvrtex/libavutil/intreadwrite.h | 644 ++ utils/pvrtex/libavutil/lfg.c | 87 + utils/pvrtex/libavutil/lfg.h | 81 + utils/pvrtex/libavutil/libm.h | 472 ++ utils/pvrtex/libavutil/log.h | 387 ++ utils/pvrtex/libavutil/macros.h | 80 + utils/pvrtex/libavutil/mathematics.c | 319 + utils/pvrtex/libavutil/mathematics.h | 300 + utils/pvrtex/libavutil/md5.h | 89 + utils/pvrtex/libavutil/mem.c | 568 ++ utils/pvrtex/libavutil/mem.h | 609 ++ utils/pvrtex/libavutil/pixfmt.h | 699 ++ utils/pvrtex/libavutil/rational.c | 193 + utils/pvrtex/libavutil/rational.h | 221 + utils/pvrtex/libavutil/thread.h | 202 + utils/pvrtex/libavutil/version.h | 128 + utils/pvrtex/log.c | 490 ++ utils/pvrtex/main.c | 455 ++ utils/pvrtex/md5.c | 208 + utils/pvrtex/mem.c | 566 ++ utils/pvrtex/mycommon.c | 32 + utils/pvrtex/mycommon.h | 40 + utils/pvrtex/nvmath.h | 722 ++ utils/pvrtex/optparse.h | 403 ++ utils/pvrtex/optparse_impl.c | 2 + utils/pvrtex/pixel.h | 492 ++ utils/pvrtex/pvr_texture.c | 476 ++ utils/pvrtex/pvr_texture.h | 115 + utils/pvrtex/pvr_texture_encoder.c | 932 +++ utils/pvrtex/pvr_texture_encoder.h | 226 + utils/pvrtex/readme_unformatted.txt | 309 + utils/pvrtex/stb_image.h | 7897 ++++++++++++++++++++++ utils/pvrtex/stb_image_impl.c | 3 + utils/pvrtex/stb_image_resize.h | 2634 ++++++++ utils/pvrtex/stb_image_resize_impl.c | 3 + utils/pvrtex/stb_image_write.h | 1724 +++++ utils/pvrtex/stb_image_write_impl.c | 3 + utils/pvrtex/tddither.c | 231 + utils/pvrtex/tddither.h | 13 + utils/pvrtex/vqcompress.c | 154 + utils/pvrtex/vqcompress.h | 38 + 81 files changed, 30542 insertions(+), 12 deletions(-) create mode 100644 utils/pvrtex/.gitignore create mode 100644 utils/pvrtex/CHANGELOG create mode 100644 utils/pvrtex/Makefile create mode 100644 utils/pvrtex/avstring.c create mode 100644 utils/pvrtex/bprint.c create mode 100644 utils/pvrtex/compat/va_copy.h create mode 100644 utils/pvrtex/crc.c create mode 100644 utils/pvrtex/dither.cpp create mode 100644 utils/pvrtex/elbg.c create mode 100644 utils/pvrtex/elbg.h create mode 100644 utils/pvrtex/file_common.c create mode 100644 utils/pvrtex/file_common.h create mode 100644 utils/pvrtex/file_dctex.c create mode 100644 utils/pvrtex/file_dctex.h create mode 100644 utils/pvrtex/file_pvr.c create mode 100644 utils/pvrtex/file_pvr.h create mode 100644 utils/pvrtex/file_tex.c create mode 100644 utils/pvrtex/file_tex.h copy addons/lib/.keepme => utils/pvrtex/info/.gitkeep (100%) create mode 100644 utils/pvrtex/info/examples.h create mode 100644 utils/pvrtex/info/options.h create mode 100644 utils/pvrtex/lfg.c create mode 100644 utils/pvrtex/libavcodec/elbg.h create mode 100644 utils/pvrtex/libavutil/attributes.h create mode 100644 utils/pvrtex/libavutil/attributes_internal.h create mode 100644 utils/pvrtex/libavutil/avassert.h create mode 100644 utils/pvrtex/libavutil/avconfig.h create mode 100644 utils/pvrtex/libavutil/avstring.h create mode 100644 utils/pvrtex/libavutil/avutil.h create mode 100644 utils/pvrtex/libavutil/bprint.h create mode 100644 utils/pvrtex/libavutil/bswap.h create mode 100644 utils/pvrtex/libavutil/common.h create mode 100644 utils/pvrtex/libavutil/crc.h create mode 100644 utils/pvrtex/libavutil/dynarray.h create mode 100644 utils/pvrtex/libavutil/error.h create mode 100644 utils/pvrtex/libavutil/internal.h create mode 100644 utils/pvrtex/libavutil/intfloat.h create mode 100644 utils/pvrtex/libavutil/intreadwrite.h create mode 100644 utils/pvrtex/libavutil/lfg.c create mode 100644 utils/pvrtex/libavutil/lfg.h create mode 100644 utils/pvrtex/libavutil/libm.h create mode 100644 utils/pvrtex/libavutil/log.h create mode 100644 utils/pvrtex/libavutil/macros.h create mode 100644 utils/pvrtex/libavutil/mathematics.c create mode 100644 utils/pvrtex/libavutil/mathematics.h create mode 100644 utils/pvrtex/libavutil/md5.h create mode 100644 utils/pvrtex/libavutil/mem.c create mode 100644 utils/pvrtex/libavutil/mem.h create mode 100644 utils/pvrtex/libavutil/pixfmt.h create mode 100644 utils/pvrtex/libavutil/rational.c create mode 100644 utils/pvrtex/libavutil/rational.h create mode 100644 utils/pvrtex/libavutil/thread.h create mode 100644 utils/pvrtex/libavutil/version.h create mode 100644 utils/pvrtex/log.c create mode 100644 utils/pvrtex/main.c create mode 100644 utils/pvrtex/md5.c create mode 100644 utils/pvrtex/mem.c create mode 100644 utils/pvrtex/mycommon.c create mode 100644 utils/pvrtex/mycommon.h create mode 100644 utils/pvrtex/nvmath.h create mode 100644 utils/pvrtex/optparse.h create mode 100644 utils/pvrtex/optparse_impl.c create mode 100644 utils/pvrtex/pixel.h create mode 100644 utils/pvrtex/pvr_texture.c create mode 100644 utils/pvrtex/pvr_texture.h create mode 100644 utils/pvrtex/pvr_texture_encoder.c create mode 100644 utils/pvrtex/pvr_texture_encoder.h create mode 100644 utils/pvrtex/readme_unformatted.txt create mode 100644 utils/pvrtex/stb_image.h create mode 100644 utils/pvrtex/stb_image_impl.c create mode 100644 utils/pvrtex/stb_image_resize.h create mode 100644 utils/pvrtex/stb_image_resize_impl.c create mode 100644 utils/pvrtex/stb_image_write.h create mode 100644 utils/pvrtex/stb_image_write_impl.c create mode 100644 utils/pvrtex/tddither.c create mode 100644 utils/pvrtex/tddither.h create mode 100644 utils/pvrtex/vqcompress.c create mode 100644 utils/pvrtex/vqcompress.h diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 251ed0bf..f3da1509 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -228,6 +228,7 @@ KallistiOS version 2.1.0 ----------------------------------------------- - *** Added thread support for tracking CPU time + updated clock_gettime() [FG] - *** Added support for one-shot timers [PC] - DC Use one-shot timers for timeout and a proper polling mechanism in modem [PC] +- *** Added pvrtex utility by TapamN to utils [DF == Daniel Fairchild] - *** Added full support for <time.h> additions from C23 standard. [FG] - *** Fixes mutexes not working properly [PC] - DC fs_dcload: Set errno on error in dcload_stat() [PC] diff --git a/kernel/arch/dreamcast/fs/fs_iso9660.c b/kernel/arch/dreamcast/fs/fs_iso9660.c index f8445cad..6f3f5273 100644 --- a/kernel/arch/dreamcast/fs/fs_iso9660.c +++ b/kernel/arch/dreamcast/fs/fs_iso9660.c @@ -197,8 +197,8 @@ static uint32 iso_733(const uint8 *from) { this cache. As the cache fills up, sectors are removed from the end of it. */ typedef struct { + uint8 *data; /* Sector data */ uint32 sector; /* CD sector */ - uint8 data[2048]; /* Sector data */ } cache_block_t; /* List of cache blocks (ordered least recently used to most recently) */ @@ -206,6 +206,9 @@ typedef struct { static cache_block_t *icache[NUM_CACHE_BLOCKS]; /* inode cache */ static cache_block_t *dcache[NUM_CACHE_BLOCKS]; /* data cache */ +static unsigned char *cache_data; +static cache_block_t *caches; + /* Cache modification mutex */ static mutex_t cache_mutex; @@ -268,7 +271,7 @@ static int bread_cache(cache_block_t **cache, uint32 sector) { } /* Load the requested block */ - j = cdrom_read_sectors(cache[i]->data, sector + 150, 1); + j = cdrom_read_sectors_ex(cache[i]->data, sector + 150, 1, CDROM_READ_DMA); if(j < 0) { //dbglog(DBG_ERROR, "fs_iso9660: can't read_sectors for %d: %d\n", @@ -1084,11 +1087,16 @@ void fs_iso9660_init(void) { mutex_init(&cache_mutex, MUTEX_TYPE_NORMAL); mutex_init(&fh_mutex, MUTEX_TYPE_NORMAL); - /* Allocate cache block space */ + /* Allocate cache block space, properly aligned for DMA access */ + cache_data = memalign(32, 2 * NUM_CACHE_BLOCKS * 2048); + caches = malloc(2 * NUM_CACHE_BLOCKS * sizeof(cache_block_t)); + for(i = 0; i < NUM_CACHE_BLOCKS; i++) { - icache[i] = malloc(sizeof(cache_block_t)); + icache[i] = &caches[i * 2]; + icache[i]->data = &cache_data[i * 2 * 2048]; icache[i]->sector = -1; - dcache[i] = malloc(sizeof(cache_block_t)); + dcache[i] = &caches[i * 2 + 1]; + dcache[i]->data = &cache_data[i * 2 * 2048 + 2048]; dcache[i]->sector = -1; } @@ -1104,16 +1112,12 @@ void fs_iso9660_init(void) { /* De-init the file system */ void fs_iso9660_shutdown(void) { - int i; - /* De-register with vblank */ vblank_handler_remove(iso_vblank_hnd); /* Dealloc cache block space */ - for(i = 0; i < NUM_CACHE_BLOCKS; i++) { - free(icache[i]); - free(dcache[i]); - } + free(cache_data); + free(caches); /* Free muteces */ mutex_destroy(&cache_mutex); diff --git a/utils/Makefile b/utils/Makefile index f3045bd7..19988ecb 100644 --- a/utils/Makefile +++ b/utils/Makefile @@ -4,7 +4,7 @@ # Copyright (C) 2001 Megan Potter # -DIRS = bin2c bincnv dcbumpgen genromfs kmgenc makeip scramble vqenc wav2adpcm +DIRS = bin2c bincnv dcbumpgen genromfs kmgenc makeip scramble vqenc wav2adpcm pvrtex ifeq ($(KOS_SUBARCH), naomi) DIRS += naomibintool naominetboot diff --git a/utils/pvrtex/.gitignore b/utils/pvrtex/.gitignore new file mode 100644 index 00000000..1d3690fa --- /dev/null +++ b/utils/pvrtex/.gitignore @@ -0,0 +1,2 @@ +pvrtex +README diff --git a/utils/pvrtex/CHANGELOG b/utils/pvrtex/CHANGELOG new file mode 100644 index 00000000..7c51f43c --- /dev/null +++ b/utils/pvrtex/CHANGELOG @@ -0,0 +1,29 @@ +Based on code by TapamN +Source released here: https://dcemulation.org/phpBB/viewtopic.php?t=106138 + + Version 1.0 + Initial release + + Version 1.01 + Program now displays error message when an error occurs loading a source image. Previously, the program would hit an assertion. + + Fixed "--resize down" option. Previously, the program would round down sizes that were already a power-of-two, now sizes that are already POT are left unchanged. + + Included a missing FFmpeg header file. + +--------------------------- + +Adaption into KOS by Daniel Fairchild, 2024 + +Version 1.0.2 + Added install target in Makefile + + Removed some dead code in nvmath.h that prevented compilation on ARM64 targets + + Added targets for generating header files from selected sections in the README file + + Added command line option --examples/-E which outputs the "Usage Examples" section of the README file + + Changed -h/--help option to output the "Command Line Options:" section of the README file + + Added this CHANGELOG file diff --git a/utils/pvrtex/Makefile b/utils/pvrtex/Makefile new file mode 100644 index 00000000..40e17a3e --- /dev/null +++ b/utils/pvrtex/Makefile @@ -0,0 +1,59 @@ +#Uncomment when debugging +#DEBUGBUILD = true + +TARGET = pvrtex +OBJS = elbg.o mem.o log.o bprint.o avstring.o lfg.o crc.o md5.o stb_image_impl.o \ + stb_image_write_impl.o stb_image_resize_impl.o optparse_impl.o pvr_texture.o \ + dither.o tddither.o vqcompress.o mycommon.o file_common.o \ + file_pvr.o file_tex.o file_dctex.o pvr_texture_encoder.o main.o + +ifdef $(DEBUGBUILD) + OPTMODE= -Og -pg -g +else + OPTMODE= -O3 -flto +endif + +MYFLAGS=-flto=auto -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Ilibavutil -I. -DCONFIG_MEMORY_POISONING=0 -DHAVE_FAST_UNALIGNED=0 -I${KOS_INC_PATHS} +MYCPPFLAGS=$(MYFLAGS) +MYCFLAGS=$(MYFLAGS) -Wno-pointer-sign + + +define textSegment2Header + awk '/$1/,/--------------------------------------------------------------------------/' README|xxd -i -n $2_$3 > $2/$3.h +endef + + +TOOLINSTALLDIR=$(KOS_BASE)/../bin + +.PHONY: all clean + + +$(TARGET): $(OBJS) + gcc $(OPTMODE) -o $(TARGET) \ + $(OBJS) $(PROGMAIN) -lm -lstdc++ + +main.o: main.c info/options.h info/examples.h + gcc $(CFLAGS) $(MYCFLAGS) $(OPTMODE) -c $< -o $@ + +%.o: %.c + gcc $(CFLAGS) $(MYCFLAGS) $(OPTMODE) -c $< -o $@ + +%.o: %.cpp + gcc $(CFLAGS) $(MYCPPFLAGS) $(CXXFLAGS) $(OPTMODE) -c $< -o $@ + +clean: + rm -f $(TARGET) $(OBJS) README + +README: readme_unformatted.txt + fmt -s readme_unformatted.txt > README + +all: $(TARGET) README + +install: all + install -m 755 $(TARGET) $(TOOLINSTALLDIR)/ + +info/options.h: README + $(call textSegment2Header,Command Line Options:,info,options) + +info/examples.h: README + $(call textSegment2Header,Usage Examples:,info,examples) diff --git a/utils/pvrtex/avstring.c b/utils/pvrtex/avstring.c new file mode 100644 index 00000000..99f06690 --- /dev/null +++ b/utils/pvrtex/avstring.c @@ -0,0 +1,462 @@ +/* + * Copyright (c) 2000, 2001, 2002 Fabrice Bellard + * Copyright (c) 2007 Mans Rullgard + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <limits.h> +#include <stdarg.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> + +#include "mem.h" +#include "avassert.h" +#include "avstring.h" +#include "bprint.h" +#include "error.h" +#include "macros.h" +#include "version.h" + +int av_strstart(const char *str, const char *pfx, const char **ptr) +{ + while (*pfx && *pfx == *str) { + pfx++; + str++; + } + if (!*pfx && ptr) + *ptr = str; + return !*pfx; +} + +int av_stristart(const char *str, const char *pfx, const char **ptr) +{ + while (*pfx && av_toupper((unsigned)*pfx) == av_toupper((unsigned)*str)) { + pfx++; + str++; + } + if (!*pfx && ptr) + *ptr = str; + return !*pfx; +} + +char *av_stristr(const char *s1, const char *s2) +{ + if (!*s2) + return (char*)(intptr_t)s1; + + do + if (av_stristart(s1, s2, NULL)) + return (char*)(intptr_t)s1; + while (*s1++); + + return NULL; +} + +char *av_strnstr(const char *haystack, const char *needle, size_t hay_length) +{ + size_t needle_len = strlen(needle); + if (!needle_len) + return (char*)haystack; + while (hay_length >= needle_len) { + hay_length--; + if (!memcmp(haystack, needle, needle_len)) + return (char*)haystack; + haystack++; + } + return NULL; +} + +size_t av_strlcpy(char *dst, const char *src, size_t size) +{ + size_t len = 0; + while (++len < size && *src) + *dst++ = *src++; + if (len <= size) + *dst = 0; + return len + strlen(src) - 1; +} + +size_t av_strlcat(char *dst, const char *src, size_t size) +{ + size_t len = strlen(dst); + if (size <= len + 1) + return len + strlen(src); + return len + av_strlcpy(dst + len, src, size - len); +} + +size_t av_strlcatf(char *dst, size_t size, const char *fmt, ...) +{ + size_t len = strlen(dst); + va_list vl; + + va_start(vl, fmt); + len += vsnprintf(dst + len, size > len ? size - len : 0, fmt, vl); + va_end(vl); + + return len; +} + +char *av_asprintf(const char *fmt, ...) +{ + char *p = NULL; + va_list va; + int len; + + va_start(va, fmt); + len = vsnprintf(NULL, 0, fmt, va); + va_end(va); + if (len < 0) + goto end; + + p = av_malloc(len + 1); + if (!p) + goto end; + + va_start(va, fmt); + len = vsnprintf(p, len + 1, fmt, va); + va_end(va); + if (len < 0) + av_freep(&p); + +end: + return p; +} + ...<truncated>... hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-08-19 04:15:26
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 8f1db16e84dbbc968567f5bda8c6f96b012b74b1 (commit) via 3d61838a3ee4c93ad4aa83efe3cd0025376e20d6 (commit) via f9f426bae33fa886039aab1f85a6744225aaaa0c (commit) from 3c99eb588dd1ae664b0e42481b15ba8c57381cf3 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8f1db16e84dbbc968567f5bda8c6f96b012b74b1 Author: Paul Cercueil <pa...@cr...> Date: Mon Aug 19 06:15:09 2024 +0200 Support chained LBA28 DMA transfers in IDE and DMA transfers in FAT (#662) * g1ata: Factorize code Factorize the code that sets the sector LBA and length of the next transfer, into a dedicated function. Signed-off-by: Paul Cercueil <pa...@cr...> * g1ata: Support chained LBA28 DMA transfers Add support for transferring more than 256 sectors worth of data using DMA on devices that don't support LBA48. This works by cutting the DMA transfer into chunks of 256 sectors, that are transferred automatically: every time a 256-sectors transfer is done, the DMA complete IRQ will start the next one. Signed-off-by: Paul Cercueil <pa...@cr...> * libkosfat: Align buffers to 32 bytes to support DMA Use memalign() to allocate buffers aligned to 32 bytes for those that need it; and also align buffers on the stack when needed. This makes it possible to mount a FAT filesystem on a IDE drive using DMA accesses for faster and CPU-free transfers. Signed-off-by: Paul Cercueil <pa...@cr...> --------- Signed-off-by: Paul Cercueil <pa...@cr...> commit 3d61838a3ee4c93ad4aa83efe3cd0025376e20d6 Author: Paul Cercueil <pa...@cr...> Date: Mon Aug 19 06:09:27 2024 +0200 Fix 24-bit / 32-bit video modes (#697) * video: Configure PVR video mode in vid_set_mode() Also configure the pixel mode at which the PVR will render, instead of only configuring the framebuffer mode. This makes the 24-bit and 32-bit video modes usable with the PVR. Signed-off-by: Paul Cercueil <pa...@cr...> * pvr: Fix PVR rendering for 24/32-bit video modes Replace hardcoded x2 with the corresponding multiplier for the pixel mode. Signed-off-by: Paul Cercueil <pa...@cr...> --------- Signed-off-by: Paul Cercueil <pa...@cr...> commit f9f426bae33fa886039aab1f85a6744225aaaa0c Author: Andy Barajas <and...@gm...> Date: Sun Aug 18 21:06:05 2024 -0700 Make FD_SETSIZE configurable (#703) * Reduce FD_SETSIZE from 1024 => 64 The maximum amount of files that can be opened at once is 64. We can save 11.25 KB if we reduce FD_SETSIZE to 64. * Allow FD_SETSIZE value to be overwritten Move all the #define FD_SETSIZE definitions to one file, opts.h. Add an option to environ.sh to allow FD_SETSIZE to be configured. Add an printf message if opening a file fails and FD_SETSIZE is not set to the default. * Updated documenation comment ----------------------------------------------------------------------- Summary of changes: addons/libkosfat/bpb.c | 6 +- addons/libkosfat/bpb.h | 4 +- addons/libkosfat/fatfs.c | 5 +- doc/environ.sh.sample | 15 ++ include/kos/fs.h | 6 +- include/kos/opts.h | 6 + include/sys/_types.h | 4 - include/sys/select.h | 6 +- kernel/arch/dreamcast/hardware/g1ata.c | 220 +++++++++------------ kernel/arch/dreamcast/hardware/pvr/pvr_buffers.c | 2 +- .../dreamcast/hardware/pvr/pvr_init_shutdown.c | 2 +- kernel/arch/dreamcast/hardware/pvr/pvr_misc.c | 2 +- kernel/arch/dreamcast/hardware/video.c | 19 ++ kernel/fs/fs.c | 7 +- 14 files changed, 154 insertions(+), 150 deletions(-) diff --git a/addons/libkosfat/bpb.c b/addons/libkosfat/bpb.c index b34eece0..740a64e0 100644 --- a/addons/libkosfat/bpb.c +++ b/addons/libkosfat/bpb.c @@ -4,6 +4,7 @@ Copyright (C) 2012, 2019 Lawrence Sebald */ +#include <malloc.h> #include <stdio.h> #include <errno.h> #include <stdlib.h> @@ -18,7 +19,7 @@ static int fat_read_raw_boot(fat_bootblock_t *sb, kos_blockdev_t *bd) { if(bd->l_block_size > 9) { uint8_t *buf; - if(!(buf = (uint8_t *)malloc(1 << bd->l_block_size))) + if(!(buf = (uint8_t *)memalign(32, 1 << bd->l_block_size))) return -ENOMEM; if(bd->read_blocks(bd, 0, 1, buf)) @@ -28,9 +29,6 @@ static int fat_read_raw_boot(fat_bootblock_t *sb, kos_blockdev_t *bd) { free(buf); return 0; } - else if(bd->l_block_size == 9) { - return bd->read_blocks(bd, 0, 1, sb); - } else { return bd->read_blocks(bd, 0, 512 >> bd->l_block_size, sb); } diff --git a/addons/libkosfat/bpb.h b/addons/libkosfat/bpb.h index bc57f9b7..b7ac1e95 100644 --- a/addons/libkosfat/bpb.h +++ b/addons/libkosfat/bpb.h @@ -64,7 +64,7 @@ typedef struct fat_bootblock { fat16_ebpb_t fat16; fat32_ebpb_t fat32; } ebpb; -} __attribute__((packed)) fat_bootblock_t; +} __attribute__((packed,aligned(32))) fat_bootblock_t; typedef struct fat32_fsinfo { uint32_t fsinfo_sig1; @@ -74,7 +74,7 @@ typedef struct fat32_fsinfo { uint32_t last_alloc_cluster; uint8_t reserved2[12]; uint32_t fsinfo_sig3; -} __attribute__((packed)) fat32_fsinfo_t; +} __attribute__((packed,aligned(32))) fat32_fsinfo_t; #define FAT32_FSINFO_SIG1 0x41615252 #define FAT32_FSINFO_SIG2 0x61417272 diff --git a/addons/libkosfat/fatfs.c b/addons/libkosfat/fatfs.c index 3e458806..438ba739 100644 --- a/addons/libkosfat/fatfs.c +++ b/addons/libkosfat/fatfs.c @@ -4,6 +4,7 @@ Copyright (C) 2012, 2013, 2019 Lawrence Sebald */ +#include <malloc.h> #include <stdio.h> #include <errno.h> #include <stdint.h> @@ -315,7 +316,7 @@ fat_fs_t *fat_fs_init_ex(kos_blockdev_t *bd, uint32_t flags, int cache_sz, } for(j = 0; j < cache_sz; ++j) { - if(!(rv->bcache[j]->data = (uint8_t *)malloc(cluster_size))) { + if(!(rv->bcache[j]->data = (uint8_t *)memalign(32, cluster_size))) { goto out_bcache; } @@ -337,7 +338,7 @@ fat_fs_t *fat_fs_init_ex(kos_blockdev_t *bd, uint32_t flags, int cache_sz, } for(j = 0; j < fcache_sz; ++j) { - if(!(rv->fcache[j]->data = (uint8_t *)malloc(block_size))) { + if(!(rv->fcache[j]->data = (uint8_t *)memalign(32, block_size))) { goto out_fcache2; } diff --git a/doc/environ.sh.sample b/doc/environ.sh.sample index f1a0989d..ad12f47e 100644 --- a/doc/environ.sh.sample +++ b/doc/environ.sh.sample @@ -144,6 +144,21 @@ export KOS_CFLAGS="${KOS_CFLAGS} -O2" # #export KOS_CFLAGS="${KOS_CFLAGS} -freorder-blocks-algorithm=simple -flto=auto" +# RAM-Saving Optimization +# +# Uncomment the line below to reduce the default size of FD_SETSIZE from the +# default value of 1024 to 64. FD_SETSIZE defines the maximum number of files +# that can be opened simultaneously, including files on the ramdisk, romdisk, +# CD, VMU, network sockets, etc. The default setting allows 1024 files to be +# opened at once, which is typically more than most use cases require. +# +# By reducing this value, you can save approximately ~11.25 KB of RAM, which +# can be particularly useful when porting large games to the Dreamcast that +# are strapped for memory. However, be cautious not to set it too low, as this +# may limit the number of files and sockets that can be opened simultaneously. +# +# export KOS_CFLAGS="${KOS_CFLAGS} -DFD_SETSIZE=64" + # Frame Pointers # # Controls whether frame pointers are emitted or not. Disabled by diff --git a/include/kos/fs.h b/include/kos/fs.h index d3e58b90..2cc3924d 100644 --- a/include/kos/fs.h +++ b/include/kos/fs.h @@ -29,6 +29,7 @@ __BEGIN_DECLS #include <sys/types.h> #include <kos/limits.h> +#include <kos/opts.h> #include <time.h> #include <sys/queue.h> #include <stdarg.h> @@ -205,11 +206,6 @@ typedef struct vfs_handler { int (*fstat)(void *hnd, struct stat *st); } vfs_handler_t; -/** \brief The number of distinct file descriptors that can be in use at a - time. -*/ -#define FD_SETSIZE 1024 - /** \cond */ /* This is the private struct that will be used as raw file handles underlying descriptors. */ diff --git a/include/kos/opts.h b/include/kos/opts.h index 888e428a..fe005278 100644 --- a/include/kos/opts.h +++ b/include/kos/opts.h @@ -129,6 +129,12 @@ __BEGIN_DECLS #define FS_RAMDISK_MAX_FILES 8 #endif +/** \brief The number of distinct file descriptors that can be in use at a + time. This value can be overwritten in environ.sh */ +#ifndef FD_SETSIZE +#define FD_SETSIZE 1024 +#endif + /** @} */ __END_DECLS diff --git a/include/sys/_types.h b/include/sys/_types.h index 4e3df568..2cbc2027 100644 --- a/include/sys/_types.h +++ b/include/sys/_types.h @@ -159,10 +159,6 @@ typedef _TIMER_T_ __timer_t; typedef _CLOCK_T_ __clock_t; -// This part inserted to fix newlib brokenness. -/** \brief Size of an fd_set. */ -#define FD_SETSIZE 1024 - /* The architecture should define the macro BYTE_ORDER in <arch/types.h> to equal one of these macros for code that looks for these BSD-style macros. */ /** \brief Little Endian test macro */ diff --git a/include/sys/select.h b/include/sys/select.h index bcc78eec..9d12ed14 100644 --- a/include/sys/select.h +++ b/include/sys/select.h @@ -26,6 +26,7 @@ __BEGIN_DECLS #include <newlib.h> +#include <kos/opts.h> #if __NEWLIB__ > 2 || (__NEWLIB__ == 2 && __NEWLIB_MINOR__ > 2) #include <sys/_timeval.h> @@ -41,11 +42,6 @@ __BEGIN_DECLS #define _SYS_TYPES_FD_SET -#ifndef FD_SETSIZE -/* This matches fs.h. */ -#define FD_SETSIZE 1024 -#endif - #define NFDBITS 32 /** \brief Represents a set of file descriptors */ diff --git a/kernel/arch/dreamcast/hardware/g1ata.c b/kernel/arch/dreamcast/hardware/g1ata.c index 5d4e3fcc..7faa8c0a 100644 --- a/kernel/arch/dreamcast/hardware/g1ata.c +++ b/kernel/arch/dreamcast/hardware/g1ata.c @@ -170,6 +170,9 @@ static uint8_t orig_dev = 0x00; /* Variables related to DMA. */ static int dma_in_progress = 0; static int dma_blocking = 0; +static uint8_t dma_cmd = 0; +static size_t dma_nb_sectors = 0; +static uint64_t dma_sector = 0; static semaphore_t dma_done = SEM_INITIALIZER(0); static kthread_t *dma_thd = NULL; @@ -211,12 +214,47 @@ inline int g1_ata_mutex_unlock(void) { return mutex_unlock(&_g1_ata_mutex); } +static void g1_ata_set_sector_and_count(uint64_t sector, uint32_t count, int lba28) { + if(!lba28) { + OUT8(G1_ATA_SECTOR_COUNT, (uint8_t)(count >> 8)); + OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 24) & 0xFF)); + OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 32) & 0xFF)); + OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 40) & 0xFF)); + } + + /* Write out the number of sectors we want and the lower 24-bits of + the LBA we're looking for. Note that putting 0 into the sector count + register returns 256 sectors. */ + OUT8(G1_ATA_SECTOR_COUNT, (uint8_t)count); + OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 0) & 0xFF)); + OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 8) & 0xFF)); + OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 16) & 0xFF)); +} + static void g1_dma_irq_hnd(uint32 code, void *data) { + unsigned int nb_sectors; + /* XXXX: Probably should look at the code to make sure it isn't an error. */ (void)code; (void)data; - if(dma_in_progress) { + if(dma_in_progress && dma_nb_sectors > 256) { + dma_sector += 256; + dma_nb_sectors -= 256; + nb_sectors = dma_nb_sectors <= 256 ? dma_nb_sectors : 256; + + /* Set the DMA parameters for the next transfer. */ + g1_ata_set_sector_and_count(dma_sector, nb_sectors, 1); + OUT32(G1_ATA_DMA_ADDRESS, IN32(G1_ATA_DMA_ADDRESS) + 256 * 512); + OUT32(G1_ATA_DMA_LENGTH, nb_sectors * 512); + + /* Write out the command to the device. */ + OUT8(G1_ATA_COMMAND_REG, dma_cmd); + + /* Re-start the DMA transfer. */ + OUT32(G1_ATA_DMA_STATUS, 1); + } + else if(dma_in_progress) { /* Signal the calling thread to continue, if it is blocking. */ if(dma_blocking) { sem_signal(&dma_done); @@ -283,6 +321,8 @@ static int dma_common(uint8_t cmd, size_t nsects, uint32_t addr, int dir, int block) { uint8_t status; + dma_cmd = cmd; + /* Set the thread ID that initiated this DMA. */ dma_thd = thd_current; @@ -489,6 +529,7 @@ int g1_ata_read_lba(uint64_t sector, size_t count, void *buf) { uint8_t nsects = (uint8_t)count; uint16_t word; uint8_t *ptr = (uint8_t *)buf; + int lba28, cmd; /* Make sure that we've been initialized and there's a disk attached. */ if(!devices) { @@ -520,44 +561,26 @@ int g1_ata_read_lba(uint64_t sector, size_t count, void *buf) { count -= nsects; /* Which mode are we using: LBA28 or LBA48? */ - if((sector + nsects) <= 0x0FFFFFFF) { + lba28 = (sector + nsects) <= 0x0FFFFFFF; + if(lba28) { g1_ata_select_device(G1_ATA_SLAVE | G1_ATA_LBA_MODE | ((sector >> 24) & 0x0F)); - - /* Write out the number of sectors we want and the lower 24-bits of - the LBA we're looking for. */ - OUT8(G1_ATA_SECTOR_COUNT, nsects); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 0) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 8) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 16) & 0xFF)); - - /* Wait until the drive is ready to accept the command. */ - g1_ata_wait_nbsy(); - g1_ata_wait_drdy(); - - /* Write out the command to the device. */ - OUT8(G1_ATA_COMMAND_REG, ATA_CMD_READ_SECTORS); + cmd = ATA_CMD_READ_SECTORS; } else { g1_ata_select_device(G1_ATA_SLAVE | G1_ATA_LBA_MODE); + cmd = ATA_CMD_READ_SECTORS_EXT; + } - /* Write out the number of sectors we want and the LBA. */ - OUT8(G1_ATA_SECTOR_COUNT, 0); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 24) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 32) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 40) & 0xFF)); - OUT8(G1_ATA_SECTOR_COUNT, nsects); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 0) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 8) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 16) & 0xFF)); - - /* Wait until the drive is ready to accept the command. */ - g1_ata_wait_nbsy(); - g1_ata_wait_drdy(); + /* Write out the number of sectors we want and the LBA. */ + g1_ata_set_sector_and_count(sector, nsects, lba28); - /* Write out the command to the device. */ - OUT8(G1_ATA_COMMAND_REG, ATA_CMD_READ_SECTORS_EXT); - } + /* Wait until the drive is ready to accept the command. */ + g1_ata_wait_nbsy(); + g1_ata_wait_drdy(); + + /* Write out the command to the device. */ + OUT8(G1_ATA_COMMAND_REG, cmd); /* Now, wait for the drive to give us back each sector. */ for(i = 0; i < nsects; ++i, ++sector) { @@ -589,9 +612,9 @@ out: int g1_ata_read_lba_dma(uint64_t sector, size_t count, void *buf, int block) { - int rv = 0; + int lba28, old, can_lba48 = CAN_USE_LBA48(); uint32_t addr; - int old, can_lba48 = CAN_USE_LBA48(); + uint8_t cmd; /* Make sure we're actually being asked to do work... */ if(!count) @@ -621,7 +644,7 @@ int g1_ata_read_lba_dma(uint64_t sector, size_t count, void *buf, } /* Chaining isn't done yet, so make sure we don't need to. */ - if(count > 65536 || (!can_lba48 && count > 256)) { + if(count > 65536) { errno = EOVERFLOW; return -1; } @@ -663,56 +686,41 @@ int g1_ata_read_lba_dma(uint64_t sector, size_t count, void *buf, /* Set the settings for this transfer and re-enable IRQs. */ dma_blocking = block; dma_in_progress = 1; + dma_nb_sectors = count; + dma_sector = sector; irq_restore(old); + if(!can_lba48 && count > 256) + count = 256; + /* Wait for the device to signal it is ready. */ g1_ata_wait_bsydrq(); /* Which mode are we using: LBA28 or LBA48? */ - if(!can_lba48 || use_lba28(sector, count)) { + lba28 = !can_lba48 || use_lba28(sector, count); + if(lba28) { g1_ata_select_device(G1_ATA_SLAVE | G1_ATA_LBA_MODE | ((sector >> 24) & 0x0F)); - - /* Write out the number of sectors we want and the lower 24-bits of - the LBA we're looking for. Note that putting 0 into the sector count - register returns 256 sectors. */ - OUT8(G1_ATA_SECTOR_COUNT, (uint8_t)count); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 0) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 8) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 16) & 0xFF)); - - /* Do the rest of the work... */ - rv = dma_common(ATA_CMD_READ_DMA, count, addr, G1_DMA_TO_MEMORY, block); + cmd = ATA_CMD_READ_DMA; } else { g1_ata_select_device(G1_ATA_SLAVE | G1_ATA_LBA_MODE); - - /* Write out the number of sectors we want and the LBA. Note that in - LBA48 mode, putting 0 into the sector count register returns 65536 - sectors (not that we have that much RAM on the Dreamcast). */ - OUT8(G1_ATA_SECTOR_COUNT, (uint8_t)(count >> 8)); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 24) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 32) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 40) & 0xFF)); - OUT8(G1_ATA_SECTOR_COUNT, (uint8_t)count); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 0) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 8) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 16) & 0xFF)); - - /* Do the rest of the work... */ - rv = dma_common(ATA_CMD_READ_DMA_EXT, count, addr, G1_DMA_TO_MEMORY, - block); + cmd = ATA_CMD_READ_DMA_EXT; } - return rv; + /* Write out the number of sectors we want and the LBA. */ + g1_ata_set_sector_and_count(sector, count, lba28); + + /* Do the rest of the work... */ + return dma_common(cmd, count, addr, G1_DMA_TO_MEMORY, block); } int g1_ata_write_lba(uint64_t sector, size_t count, const void *buf) { - int rv = 0; unsigned int i, j; uint8_t nsects = (uint8_t)count; uint16_t word; uint8_t *ptr = (uint8_t *)buf; + int cmd, lba28; /* Make sure that we've been initialized and there's a disk attached. */ if(!devices) { @@ -744,37 +752,23 @@ int g1_ata_write_lba(uint64_t sector, size_t count, const void *buf) { count -= nsects; /* Which mode are we using: LBA28 or LBA48? */ - if((sector + nsects) <= 0x0FFFFFFF) { + lba28 = (sector + nsects) <= 0x0FFFFFFF; + if(lba28) { g1_ata_select_device(G1_ATA_SLAVE | G1_ATA_LBA_MODE | ((sector >> 24) & 0x0F)); - - /* Write out the number of sectors we want and the lower 24-bits of - the LBA we're looking for. */ - OUT8(G1_ATA_SECTOR_COUNT, nsects); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 0) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 8) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 16) & 0xFF)); - - /* Write out the command to the device. */ - OUT8(G1_ATA_COMMAND_REG, ATA_CMD_WRITE_SECTORS); + cmd = ATA_CMD_WRITE_SECTORS; } else { g1_ata_select_device(G1_ATA_SLAVE | G1_ATA_LBA_MODE); - - /* Write out the number of sectors we want and the LBA. */ - OUT8(G1_ATA_SECTOR_COUNT, 0); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 24) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 32) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 40) & 0xFF)); - OUT8(G1_ATA_SECTOR_COUNT, nsects); - OUT8(G1_ATA_LBA_LOW, (uint8_t)((sector >> 0) & 0xFF)); - OUT8(G1_ATA_LBA_MID, (uint8_t)((sector >> 8) & 0xFF)); - OUT8(G1_ATA_LBA_HIGH, (uint8_t)((sector >> 16) & 0xFF)); - - /* Write out the command to the device. */ - OUT8(G1_ATA_COMMAND_REG, ATA_CMD_WRITE_SECTORS_EXT); + cmd = ATA_CMD_WRITE_SECTORS_EXT; } + /* Write out the number of sectors we want and the LBA. */ + g1_ata_set_sector_and_count(sector, nsects, lba28); + + /* Write out the command to the device. */ + OUT8(G1_ATA_COMMAND_REG, cmd); + /* Now, send the drive each sector. */ for(i = 0; i < nsects; ++i, ++sector) { /* Wait for the device to signal it is ready. */ @@ -792,18 +786,15 @@ int g1_ata_write_lba(uint64_t sector, size_t count, const void *buf) { /* Wait for the device to signal that it has finished writing the data. */ g1_ata_wait_bsydrq(); - rv = 0; - g1_ata_mutex_unlock(); - return rv; + return 0; } int g1_ata_write_lba_dma(uint64_t sector, size_t count, const void *buf, int block) { - int rv = 0; + int cmd, lba28, old, can_lba48 = CAN_USE_LBA48(); uint32_t addr; - int old, can_lba48 = CAN_USE_LBA48(); /* Make sure we're actually being asked to do work... */ if(!count) @@ -875,49 +866,30 @@ int g1_ata_write_lba_dma(uint64_t sector, size_t count, const void *buf, /* Set the settings for this transfer and re-enable IRQs. */ dma_blocking = block; dma_in_progress = 1; + dma_nb_sectors = count; + dma_sector = sector; irq_restore(old); ...<truncated>... hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-08-19 03:52:45
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 3c99eb588dd1ae664b0e42481b15ba8c57381cf3 (commit) via 253b193654d8b0d794c56f4520e97ec9d4364957 (commit) from 63c8b0c0b174af2762fa7f00cb34048bfaa5235b (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 3c99eb588dd1ae664b0e42481b15ba8c57381cf3 Author: Paul Cercueil <pa...@cr...> Date: Mon Aug 19 05:51:39 2024 +0200 vmu: Add function vmu_printf() (#699) This function can be used to print a string to every connect VMU, using the built-in VMU font. Signed-off-by: Paul Cercueil <pa...@cr...> commit 253b193654d8b0d794c56f4520e97ec9d4364957 Author: Andy Barajas <and...@gm...> Date: Sun Aug 18 20:47:59 2024 -0700 Fix kos doxygen warnings (#711) ----------------------------------------------------------------------- Summary of changes: include/netinet/in.h | 2 +- include/poll.h | 6 +- kernel/arch/dreamcast/include/arch/byteorder.h | 5 +- kernel/arch/dreamcast/include/dc/video.h | 2 +- kernel/arch/dreamcast/include/dc/vmu_fb.h | 11 ++ kernel/arch/dreamcast/util/Makefile | 2 +- kernel/arch/dreamcast/util/vmu_printf.c | 147 +++++++++++++++++++++++++ 7 files changed, 169 insertions(+), 6 deletions(-) create mode 100644 kernel/arch/dreamcast/util/vmu_printf.c diff --git a/include/netinet/in.h b/include/netinet/in.h index ad614083..5fb23321 100644 --- a/include/netinet/in.h +++ b/include/netinet/in.h @@ -208,7 +208,7 @@ extern const struct in6_addr in6addr_loopback; #define IPPROTO_UDP 17 /** \brief Internet Protocol Version 6. - \ingroup networking_ipv + \ingroup networking_ip */ #define IPPROTO_IPV6 41 diff --git a/include/poll.h b/include/poll.h index aa7acf3f..bdf6e83d 100644 --- a/include/poll.h +++ b/include/poll.h @@ -6,7 +6,7 @@ /** \file poll.h \brief Definitions for the poll() function. - \ingroup threading_posix + \ingroup threading_polling This file contains the definitions needed for using the poll() function, as directed by the POSIX 2008 standard (aka The Open Group Base Specifications @@ -27,7 +27,9 @@ __BEGIN_DECLS -/** \addtogroup threading_posix +/** \defgroup threading_polling Polling + \brief Implementation of POSIX polling. + \ingroup threading_posix @{ */ diff --git a/kernel/arch/dreamcast/include/arch/byteorder.h b/kernel/arch/dreamcast/include/arch/byteorder.h index aae54433..2585f247 100644 --- a/kernel/arch/dreamcast/include/arch/byteorder.h +++ b/kernel/arch/dreamcast/include/arch/byteorder.h @@ -32,7 +32,10 @@ __BEGIN_DECLS #undef BYTE_ORDER #endif -/** \addtogroup arch +/** \defgroup system_arch Byte Order + \brief Byte-order management for the SH4 architecture + \ingroup arch + @{ */ diff --git a/kernel/arch/dreamcast/include/dc/video.h b/kernel/arch/dreamcast/include/dc/video.h index de8dc1b0..04b59984 100644 --- a/kernel/arch/dreamcast/include/dc/video.h +++ b/kernel/arch/dreamcast/include/dc/video.h @@ -318,7 +318,7 @@ uint32_t vid_border_color(uint8_t r, uint8_t g, uint8_t b); void vid_clear(uint8_t r, uint8_t g, uint8_t b); /** \brief Clear VRAM. - \ingroup video_vram + \ingroup video_fb This function is essentially a memset() for the whole of VRAM that will clear it all to 0 bytes. diff --git a/kernel/arch/dreamcast/include/dc/vmu_fb.h b/kernel/arch/dreamcast/include/dc/vmu_fb.h index 8f440ca7..ae38a21d 100644 --- a/kernel/arch/dreamcast/include/dc/vmu_fb.h +++ b/kernel/arch/dreamcast/include/dc/vmu_fb.h @@ -136,4 +136,15 @@ vmufb_print_string(vmufb_t *fb, const vmufb_font_t *font, const char *str) { vmufb_print_string_into(fb, font, 0, 0, 48, 32, 0, str); } +/** \brief Render a string to attached VMUs using the built-in font + + Uses the built-in VMU font to render a string to all VMUs connected to the + system. + + \param fmt The format string, optionally followed by extra + arguments. + */ +__attribute__ ((format (printf, 1, 2))) +void vmu_printf(const char *fmt, ...); + #endif /* __DC_VMU_FB_H */ diff --git a/kernel/arch/dreamcast/util/Makefile b/kernel/arch/dreamcast/util/Makefile index 3bcc7111..37d94f7b 100644 --- a/kernel/arch/dreamcast/util/Makefile +++ b/kernel/arch/dreamcast/util/Makefile @@ -4,7 +4,7 @@ # Copyright (C) 2001 Megan Potter # -OBJS = vmu_fb.o vmu_pkg.o screenshot.o minifont.o +OBJS = vmu_fb.o vmu_pkg.o vmu_printf.o screenshot.o minifont.o SUBDIRS = ifneq ($(KOS_SUBARCH), naomi) diff --git a/kernel/arch/dreamcast/util/vmu_printf.c b/kernel/arch/dreamcast/util/vmu_printf.c new file mode 100644 index 00000000..6024415c --- /dev/null +++ b/kernel/arch/dreamcast/util/vmu_printf.c @@ -0,0 +1,147 @@ +/* KallistiOS ##version## + + util/vmu_fb.c + Copyright (C) 2024 Paul Cercueil +*/ + +#include <stdarg.h> +#include <stdio.h> + +#include <dc/vmu_fb.h> + +static vmufb_t vmufb; + +/* Linux 4x6 font: lib/fonts/font_mini_4x6.c + * + * Created by Kenneth Albanowski. + * No rights reserved, released to the public domain. + */ +static const char fontdata_4x6[] = { + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0x00, 0x00, 0x00, 0x44, 0x40, 0x40, 0xaa, 0x00, + 0x00, 0xaf, 0xfa, 0x00, 0x46, 0xec, 0x40, 0xa2, + 0x48, 0xa0, 0x69, 0x6a, 0xd0, 0x24, 0x00, 0x00, + 0x24, 0x44, 0x20, 0x42, 0x22, 0x40, 0x0e, 0xee, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x04, 0x80, 0x00, + 0xe0, 0x00, 0x00, 0x00, 0x40, 0x02, 0x48, 0x00, + 0x4a, 0xaa, 0x40, 0x4c, 0x44, 0xe0, 0xc2, 0x48, + 0xe0, 0xe2, 0x62, 0xe0, 0xaa, 0xe2, 0x20, 0xe8, + 0xe2, 0xe0, 0xe8, 0xea, 0xe0, 0xe2, 0x22, 0x20, + 0xea, 0xea, 0xe0, 0xea, 0xe2, 0x20, 0x00, 0x40, + 0x40, 0x00, 0x40, 0x48, 0x24, 0x84, 0x20, 0x0e, + 0x0e, 0x00, 0x84, 0x24, 0x80, 0xe2, 0x60, 0x40, + 0x4e, 0xe8, 0x40, 0x4a, 0xea, 0xa0, 0xca, 0xca, + 0xc0, 0x68, 0x88, 0x60, 0xca, 0xaa, 0xc0, 0xe8, + 0xe8, 0xe0, 0xe8, 0xe8, 0x80, 0x68, 0xea, 0x60, + 0xaa, 0xea, 0xa0, 0xe4, 0x44, 0xe0, 0x22, 0x2a, + 0x40, 0xaa, 0xca, 0xa0, 0x88, 0x88, 0xe0, 0xae, + 0xea, 0xa0, 0xae, 0xee, 0xa0, 0x4a, 0xaa, 0x40, + 0xca, 0xc8, 0x80, 0x4a, 0xae, 0x60, 0xca, 0xec, + 0xa0, 0x68, 0x42, 0xc0, 0xe4, 0x44, 0x40, 0xaa, + 0xaa, 0x60, 0xaa, 0xa4, 0x40, 0xaa, 0xee, 0xa0, + 0xaa, 0x4a, 0xa0, 0xaa, 0x44, 0x40, 0xe2, 0x48, + 0xe0, 0x64, 0x44, 0x60, 0x08, 0x42, 0x00, 0x62, + 0x22, 0x60, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x0f, + 0x84, 0x00, 0x00, 0x00, 0x6a, 0xe0, 0x88, 0xca, + 0xc0, 0x00, 0x68, 0x60, 0x22, 0x6a, 0x60, 0x0e, + 0xe8, 0x60, 0x24, 0xe4, 0x40, 0x06, 0xa6, 0xe0, + 0x88, 0xca, 0xa0, 0x40, 0x44, 0x40, 0x40, 0x44, + 0x80, 0x08, 0xac, 0xa0, 0x0c, 0x44, 0xe0, 0x00, + 0xee, 0xa0, 0x00, 0xca, 0xa0, 0x04, 0xaa, 0x40, + 0x00, 0xca, 0xc8, 0x00, 0x6a, 0x62, 0x0c, 0xa8, + 0x80, 0x06, 0xc2, 0xc0, 0x04, 0xe4, 0x40, 0x00, + 0xaa, 0x60, 0x00, 0xae, 0x40, 0x00, 0xae, 0xe0, + 0x00, 0xa4, 0xa0, 0x00, 0xae, 0x2c, 0x0e, 0x6c, + 0xe0, 0x24, 0xc4, 0x20, 0x44, 0x44, 0x40, 0x84, + 0x64, 0x80, 0x5a, 0x00, 0x00, 0x4a, 0xae, 0x00, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0x06, 0xc6, 0x00, 0x0c, 0x6c, 0x00, + 0x82, 0x82, 0x82, 0xa5, 0xa5, 0xa5, 0xdb, 0xdb, + 0xdb, 0x44, 0x44, 0x44, 0x44, 0xc4, 0x44, 0x44, + 0xcc, 0x44, 0x66, 0xe6, 0x66, 0x00, 0xe6, 0x66, + 0x00, 0xcc, 0x44, 0x66, 0xee, 0x66, 0x66, 0x66, + 0x66, 0x00, 0xee, 0x66, 0x66, 0xee, 0x00, 0x66, + 0xe0, 0x00, 0x44, 0xcc, 0x00, 0x00, 0xc4, 0x44, + 0x44, 0x70, 0x00, 0x44, 0xf0, 0x00, 0x00, 0xf4, + 0x44, 0x44, 0x74, 0x44, 0x00, 0xf0, 0x00, 0x44, + 0xf4, 0x44, 0x44, 0x77, 0x44, 0x66, 0x76, 0x66, + 0x66, 0x77, 0x00, 0x00, 0x77, 0x66, 0x66, 0xff, + 0x00, 0x00, 0xff, 0x66, 0x66, 0x77, 0x66, 0x00, + 0xff, 0x00, 0x66, 0xff, 0x66, 0x44, 0xff, 0x00, + 0x66, 0xf0, 0x00, 0x00, 0xff, 0x44, 0x00, 0xf6, + 0x66, 0x66, 0x70, 0x00, 0x44, 0x77, 0x00, 0x00, + 0x77, 0x44, 0x00, 0x76, 0x66, 0x66, 0xf6, 0x66, + 0x44, 0xff, 0x44, 0x44, 0xc0, 0x00, 0x00, 0x74, + 0x44, 0xff, 0xff, 0xff, 0x00, 0x0f, 0xff, 0xcc, + 0xcc, 0xcc, 0x33, 0x33, 0x33, 0xff, 0xf0, 0x00, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, + 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, + 0xe0, 0xee, 0xee, 0xe0, 0xee, 0xee, 0xe0, 0xee, + 0xee, 0xe0, 0x00, 0x66, 0x00, 0xee, 0xee, 0xe0, +}; + +static const vmufb_font_t vmufb_font4x6 = { + .w = 4, + .h = 6, + .stride = 3, + .fontdata = fontdata_4x6, +}; + +void vmu_printf(const char *fmt, ...) +{ + maple_device_t *dev; + unsigned int vmu; + char buf[256]; + va_list va; + + buf[sizeof(buf) - 1] = '\0'; + + va_start(va, fmt); + vsnprintf(buf, sizeof(buf), fmt, va); + va_end(va); + + vmufb_print_string(&vmufb, &vmufb_font4x6, buf); + + for (vmu = 0; ; vmu++) { + dev = maple_enum_type(vmu, MAPLE_FUNC_LCD); + if (!dev) + break; + + vmufb_present(&vmufb, dev); + } +} hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-08-19 03:47:08
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 63c8b0c0b174af2762fa7f00cb34048bfaa5235b (commit) from 084658a4859a9e29da6dbaa43f05ba0fceade10f (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 63c8b0c0b174af2762fa7f00cb34048bfaa5235b Author: Tchan0 <617...@us...> Date: Mon Aug 19 05:46:43 2024 +0200 Naomi: examples Makefile: exclude network, modem & g1ata (#713) * Naomi: examples Makefile: exclude modem & g1ata Exclude examples /modem & /g1ata when building for Naomi, as the corresponding functions do not exist for Naomi * Naomi: examples Makefile: exclude network Exclude network examples, as network is also excluded when building KallistiOS for Naomi ----------------------------------------------------------------------- Summary of changes: examples/dreamcast/Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/dreamcast/Makefile b/examples/dreamcast/Makefile index 8afe9ad9..221b371c 100644 --- a/examples/dreamcast/Makefile +++ b/examples/dreamcast/Makefile @@ -5,10 +5,14 @@ # Copyright (C) 2024 Andy Barajas # -DIRS = 2ndmix basic libdream kgl hello sound png network vmu conio pvr video \ - lua parallax modem dreameye filesystem sd g1ata lightgun keyboard sdl dev rumble \ +DIRS = 2ndmix basic libdream kgl hello sound png vmu conio pvr video \ + lua parallax dreameye filesystem sd lightgun keyboard sdl dev rumble \ micropython +ifneq ($(KOS_SUBARCH), naomi) + DIRS += network modem g1ata +endif + ifdef KOS_CCPLUS DIRS += cpp tsunami endif hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-08-19 03:45:46
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 084658a4859a9e29da6dbaa43f05ba0fceade10f (commit) from 41528fef656ffbbdfe16663e895c01c912f71b43 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 084658a4859a9e29da6dbaa43f05ba0fceade10f Author: Andy Barajas <and...@gm...> Date: Sun Aug 18 20:44:40 2024 -0700 Cleanup documentation. Rearrange error checking code. Remove unused symbol. (#716) ----------------------------------------------------------------------- Summary of changes: kernel/arch/dreamcast/hardware/sq.c | 8 ++++++-- kernel/arch/dreamcast/hardware/sq_fast_cpy.s | 3 +-- kernel/arch/dreamcast/sound/snd_pcm_split.s | 1 - kernel/arch/dreamcast/sound/snd_stream.c | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/kernel/arch/dreamcast/hardware/sq.c b/kernel/arch/dreamcast/hardware/sq.c index 10ef13bd..41dc3ee2 100644 --- a/kernel/arch/dreamcast/hardware/sq.c +++ b/kernel/arch/dreamcast/hardware/sq.c @@ -123,11 +123,15 @@ void *sq_set16(void *dest, uint32_t c, size_t n) { void *sq_set32(void *dest, uint32_t c, size_t n) { uint32_t *d = SQ_MASK_DEST(dest); - sq_lock(dest); - /* Write them as many times necessary */ n >>= 5; + /* Exit early if we dont have enough data to set */ + if(n == 0) + return dest; + + sq_lock(dest); + while(n--) { /* Fill both store queues with c */ d[0] = d[1] = d[2] = d[3] = d[4] = d[5] = d[6] = d[7] = c; diff --git a/kernel/arch/dreamcast/hardware/sq_fast_cpy.s b/kernel/arch/dreamcast/hardware/sq_fast_cpy.s index 134ee374..b58544ab 100644 --- a/kernel/arch/dreamcast/hardware/sq_fast_cpy.s +++ b/kernel/arch/dreamcast/hardware/sq_fast_cpy.s @@ -1,6 +1,6 @@ ! KallistiOS ##version## ! -! arch/dreamcast/hardware/sq_fast_path.s +! arch/dreamcast/hardware/sq_fast_cpy.s ! Copyright (C) 2024 Andy Barajas ! ! Optimized SH4 assembler function for copying 32 bytes of data @@ -43,4 +43,3 @@ _sq_fast_cpy: .exit: rts fschg - diff --git a/kernel/arch/dreamcast/sound/snd_pcm_split.s b/kernel/arch/dreamcast/sound/snd_pcm_split.s index fa27a159..089b568c 100644 --- a/kernel/arch/dreamcast/sound/snd_pcm_split.s +++ b/kernel/arch/dreamcast/sound/snd_pcm_split.s @@ -9,7 +9,6 @@ .section .text .globl _snd_pcm16_split -.globl _snd_pcm16_split_sq_start .globl _snd_pcm8_split .globl _snd_adpcm_split diff --git a/kernel/arch/dreamcast/sound/snd_stream.c b/kernel/arch/dreamcast/sound/snd_stream.c index e499c909..d79ff314 100644 --- a/kernel/arch/dreamcast/sound/snd_stream.c +++ b/kernel/arch/dreamcast/sound/snd_stream.c @@ -237,7 +237,7 @@ void snd_pcm16_split_sq(uint32_t *data, uintptr_t left, uintptr_t right, size_t /* Make sure the FIFOs are empty */ g2_fifo_wait(); - /* Separating channels and do fill/write queues as many times necessary. */ + /* Separating channels and fill/write queues as many times as necessary. */ for(; remain >= 128; remain -= 128) { /* Fill SQ0 */ hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: darcagn <da...@us...> - 2024-08-16 00:45:02
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 41528fef656ffbbdfe16663e895c01c912f71b43 (commit) via 5f3e39dc6f69aeac2a29abe59a924137a4a0f12a (commit) via a85d2f28840b6b1e95c6d6d472305535d6e52697 (commit) from 2751f20f40083c856e767b90eff4c64206987b68 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 41528fef656ffbbdfe16663e895c01c912f71b43 Merge: a85d2f28 5f3e39dc Author: darcagn <da...@pr...> Date: Thu Aug 15 19:44:47 2024 -0500 Merge pull request #712 from Tchan0/gitignore_add_vscode gitignore: add .vscode folders commit 5f3e39dc6f69aeac2a29abe59a924137a4a0f12a Author: Tchan0 <617...@us...> Date: Thu Aug 15 19:50:42 2024 +0200 gitignore: add .vscode folders Add .vscode folders that could be added in the examples by the users, when using Visual Studio Code commit a85d2f28840b6b1e95c6d6d472305535d6e52697 Author: darcagn <da...@pr...> Date: Mon Aug 12 07:17:13 2024 -0500 dc-chain: Fix ARM toolchain build error when JIT is enabled for SH toolchain (#709) ----------------------------------------------------------------------- Summary of changes: .gitignore | 1 + utils/dc-chain/doc/CHANGELOG.md | 6 ++++++ utils/dc-chain/scripts/gcc-pass1.mk | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 02d16d33..107e5e4f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ *~ .*.swp .DS_Store +.vscode/ doc/reference/ environ.sh romdisk.img diff --git a/utils/dc-chain/doc/CHANGELOG.md b/utils/dc-chain/doc/CHANGELOG.md index 75c15e5d..498ee2c9 100644 --- a/utils/dc-chain/doc/CHANGELOG.md +++ b/utils/dc-chain/doc/CHANGELOG.md @@ -2,6 +2,12 @@ | Date<br/>_____________ | Author(s)<br/>_____________ | Changes<br/>_____________ | |:-----------------------|:----------------------------|---------------------------| +| 2024-08-11 | Eric Fradella | Fix ARM toolchain build error when JIT is enabled for SH toolchain. | +| 2024-08-07 | Eric Fradella | Updated binutils to 2.43. Updated GCC 11 profile with support for GCC 11.5.0. | +| 2024-08-01 | Eric Fradella | Updated GCC 14 profile with support for GCC 14.2.0. | +| 2024-07-15 | Eric Fradella | Updated profiles for GDB 15.1. | +| 2024-06-26 | Eric Fradella | Updated GCC 12 profile with support for GCC 12.4.0. | +| 2024-05-24 | Eric Fradella | Added support for GCC 13.3.0. | | 2024-05-08 | Falco Girgis | Added configuration option for libstdc++'s timezone database. | | 2024-05-02 | Eric Fradella | Deprecated GCC 4.7.4 profile. Revamped configuration system into separate profiles and Makefile.cfg. Revised configuration options and documentation. | | 2024-05-01 | Falco Girgis | Added config option for enabling the Ada langauge. | diff --git a/utils/dc-chain/scripts/gcc-pass1.mk b/utils/dc-chain/scripts/gcc-pass1.mk index 5958a858..4cfbf87c 100644 --- a/utils/dc-chain/scripts/gcc-pass1.mk +++ b/utils/dc-chain/scripts/gcc-pass1.mk @@ -2,7 +2,9 @@ # This file is part of KallistiOS. build-sh4-gcc-pass1: build = build-gcc-$(target)-$(gcc_ver)-pass1 +build-sh4-gcc-pass1: enabled_languages = $(pass1_languages) build-arm-gcc-pass1: build = build-gcc-$(target)-$(gcc_ver) +build-arm-gcc-pass1: enabled_languages = c $(build_gcc_pass1) $(build_gcc_pass2): src_dir = gcc-$(gcc_ver) $(build_gcc_pass1) $(build_gcc_pass2): log = $(logdir)/$(build).log $(build_gcc_pass1): logdir @@ -17,7 +19,7 @@ $(build_gcc_pass1): logdir --with-gnu-ld \ --without-headers \ --with-newlib \ - --enable-languages=$(pass1_languages) \ + --enable-languages=$(enabled_languages) \ --disable-libssp \ --enable-checking=release \ $(cpu_configure_args) \ hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: falcovorbis <fal...@us...> - 2024-08-11 15:36:59
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 2751f20f40083c856e767b90eff4c64206987b68 (commit) from 002de35db2462e7d2d78713b2a954ff2d0c8a756 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 2751f20f40083c856e767b90eff4c64206987b68 Author: José Ribeiro <602...@us...> Date: Sun Aug 11 16:36:21 2024 +0100 Expanded VFS documentation (#684) * Reworking FS driver explanation and size warning * Update include/kos/fs_romdisk.h Co-authored-by: Andy Barajas <and...@gm...> * Update include/kos/fs_romdisk.h Co-authored-by: Andy Barajas <and...@gm...> * Update include/kos/fs_romdisk.h Co-authored-by: Andy Barajas <and...@gm...> * Update include/kos/fs_romdisk.h Co-authored-by: Andy Barajas <and...@gm...> * Update include/kos/fs_romdisk.h Co-authored-by: Falco Girgis <gyr...@gm...> * Explain how to build and embed fs image * Rewworking the line sizes * Update include/kos/fs_romdisk.h Co-authored-by: Falco Girgis <gyr...@gm...> --------- Co-authored-by: Andy Barajas <and...@gm...> Co-authored-by: Falco Girgis <gyr...@gm...> ----------------------------------------------------------------------- Summary of changes: include/kos/fs_romdisk.h | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/include/kos/fs_romdisk.h b/include/kos/fs_romdisk.h index c322bbb5..274d00a5 100644 --- a/include/kos/fs_romdisk.h +++ b/include/kos/fs_romdisk.h @@ -15,9 +15,33 @@ with the genromfs program that is included in the utils portion of the tree. You can choose to automount one ROMFS image by embedding it into your binary - and using the appropriate KOS_INIT_FLAGS() setting. The embedded ROMFS will - mount itself on /rd. You can also mount additional images that you load - from some other source on whatever mountpoint you want. + and using the appropriate flags (INIT_DEFAULT by itself or INIT_FS_ROMDISK with other flags) + when calling the KOS_INIT_FLAGS() macro with a custom flag selection. The embedded ROMFS + will mount itself on /rd. + + \warning + An embedded romdisk image is linked to your executable and cannot be evicted from + system RAM! + + Mounting additional images that you load from some other sources (such as a modified BIOS) + on whatever mountpoint you want, is also possible. Using fs_romdisk_mount() and passing a + pointer to the location of a romdisk image will mount it. + + \remark + Mounted images will reside in system RAM for as long as your program is running + or until you unmount them with fs_romdisk_unmount(). The size of your generated + ROMFS image must be kept below 16MB, with 14MB being the maximum recommended size, + as your binary will also reside in RAM and you need to leave some memory available + for it. Generating files larger than the available RAM will lead to system crashes. + + A romdisk filesystem image can be created by adding "KOS_ROMDISK_DIR=" to your Makefile + and pointing it to the directory contaning all the resources you wish to have embeded in + filesystem image. A rule to create the image is provided in the rules provided in Makefile.rules, + the created object file must be linked with your binary file by adding romdisk.o to your + list of objects. + + \see INIT_FS_ROMDISK + \see KOS_INIT_FLAGS() \author Megan Potter */ hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: darcagn <da...@us...> - 2024-08-11 06:34:22
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "A pseudo Operating System for the Dreamcast.". The branch, master has been updated via 002de35db2462e7d2d78713b2a954ff2d0c8a756 (commit) via e8dfbf4db231e4d90dea0bcc91664e760c45db7e (commit) via 0bc7d702180a9fcf7f3759a3a739856536c5477c (commit) from cca9753dc0e3f58fca4a36d1d4ab0f1a89754b52 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 002de35db2462e7d2d78713b2a954ff2d0c8a756 Merge: cca9753d e8dfbf4d Author: darcagn <da...@pr...> Date: Sun Aug 11 01:33:03 2024 -0500 Merge pull request #529 from pcercuei/libc-fix-lto Fix atomics with LTO commit e8dfbf4db231e4d90dea0bcc91664e760c45db7e Author: Paul Cercueil <pa...@cr...> Date: Thu Aug 8 16:08:00 2024 +0200 thread: Mark thd_pass() as __used This fixes atomics when building with LTO. Signed-off-by: Paul Cercueil <pa...@cr...> commit 0bc7d702180a9fcf7f3759a3a739856536c5477c Author: Paul Cercueil <pa...@cr...> Date: Thu Aug 8 16:06:13 2024 +0200 init: Mark arch_init() as __used And add the __noreturn that was missing to the implementation. Without the __used and when using LTO, some programs may have undefined references to arch_init(). Signed-off-by: Paul Cercueil <pa...@cr...> ----------------------------------------------------------------------- Summary of changes: kernel/arch/dreamcast/kernel/init.c | 1 + kernel/thread/thread.c | 1 + 2 files changed, 2 insertions(+) diff --git a/kernel/arch/dreamcast/kernel/init.c b/kernel/arch/dreamcast/kernel/init.c index 6c71b278..ed90b7f1 100644 --- a/kernel/arch/dreamcast/kernel/init.c +++ b/kernel/arch/dreamcast/kernel/init.c @@ -388,6 +388,7 @@ void arch_menu(void) { /* Called to shut down non-gracefully; assume the system is in peril and don't try to call the dtors */ +__used __noreturn void arch_abort(void) { /* Disable the WDT, if active */ wdt_disable(); diff --git a/kernel/thread/thread.c b/kernel/thread/thread.c index 5fe46097..319149de 100644 --- a/kernel/thread/thread.c +++ b/kernel/thread/thread.c @@ -828,6 +828,7 @@ void thd_sleep(unsigned int ms) { } /* Manually cause a re-schedule */ +__used void thd_pass(void) { /* Makes no sense inside int */ if(irq_inside_int()) return; hooks/post-receive -- A pseudo Operating System for the Dreamcast. |
From: quzar <qu...@us...> - 2024-08-11 00:52:21
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "The KallistiOS port of OpenGL.". The branch, master has been updated via 8374cbee6c350612f38aeedf9a0af541e83aae76 (commit) from 8a4be75e53e7520ff558df1e2b2736db0f4abbb4 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit 8374cbee6c350612f38aeedf9a0af541e83aae76 Author: Falco Girgis <gyr...@gm...> Date: Sat Aug 10 16:05:53 2024 -0500 Correct KGL header usage (#3) * Ensure pointing to <KGL/GL.h> rather than the <GL/GL.h> which will pick up GLdc. * Roll back enabling of DMA from (#2) ----------------------------------------------------------------------- Summary of changes: gl-sh4.h | 2 -- include/glu.h | 2 +- include/glut.h | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/gl-sh4.h b/gl-sh4.h index a669995..1ca91ed 100644 --- a/gl-sh4.h +++ b/gl-sh4.h @@ -11,8 +11,6 @@ #include <arch/args.h> -#define GL_KOS_USE_DMA 1 - typedef float vector3f[3]; /* 3 float vector */ typedef float matrix4f[4][4]; /* 4x4 float matrix */ diff --git a/include/glu.h b/include/glu.h index 6397441..c740dec 100644 --- a/include/glu.h +++ b/include/glu.h @@ -17,7 +17,7 @@ __BEGIN_DECLS #ifndef BUILD_LIBGL -#include <GL/gl.h> +#include <KGL/gl.h> #endif #define GLU_FALSE 0 diff --git a/include/glut.h b/include/glut.h index 91e4b04..b115bc2 100644 --- a/include/glut.h +++ b/include/glut.h @@ -13,7 +13,7 @@ __BEGIN_DECLS #ifndef BUILD_LIBGL -#include <GL/gl.h> +#include <KGL/gl.h> #endif /* Flush the Submitted Primitive Data to the GPU for render */ hooks/post-receive -- The KallistiOS port of OpenGL. |