Build Capital Quest for CoCo 3 with maps and emulator tests
This commit is contained in:
commit
9f7d6f4786
44 files changed
+6238
No files matched your search
@@ -0,0 +1,562 @@
|
||||
hirestxt 0.5.1
|
||||
|
||||
Public domain (upstream dedication)
|
||||
|
||||
|
||||
--- README.md ---
|
||||
hirestxt
|
||||
========
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
|
||||
This library is in the public domain.
|
||||
|
||||
It implements a software 51x24 or 42x24 black-on-green PMODE 4 text
|
||||
screen (256x192x2), or a 64x24 16-color text screen in the CoCo 3's
|
||||
320x200x16 graphics mode. It redirects printf() to that screen.
|
||||
|
||||
Useful to get true lowercase, including Latin-1 accented characters,
|
||||
on all CoCos, on the Dragon, and on NitrOS-9.
|
||||
|
||||
Optionally supports several VT52 terminal sequences.
|
||||
|
||||
A sample program is included. See the *Demo* section in this file.
|
||||
|
||||
This library is intended to be compiled by CMOC.
|
||||
|
||||
See the [CMOC home page](http://sarrazip.com/dev/cmoc.html).
|
||||
|
||||
|
||||
## Setup
|
||||
|
||||
The instructions apply when targetting the Color Basic environment.
|
||||
|
||||
Do the following to initialize the 51x24 text screen at $0E00 on a CoCo
|
||||
or Dragon.
|
||||
|
||||
Put this directive somewhere at the beginning of the C file in question:
|
||||
|
||||
#include "hirestxt.h"
|
||||
|
||||
Then set up PMODE 4 green/black graphics, like this:
|
||||
|
||||
width(32); /* PMODE graphics will only appear from 32x16 (does nothing on CoCo 1&2) */
|
||||
pmode(4, (byte *) 0x0E00);
|
||||
pcls(255);
|
||||
screen(1, 0); /* green/black */
|
||||
|
||||
Then define a `HiResTextScreenInit` object:
|
||||
|
||||
struct HiResTextScreenInit init =
|
||||
{
|
||||
51, /* characters per row */
|
||||
writeCharAt_51cols, /* must be consistent with previous field */
|
||||
0x0E00,
|
||||
TRUE /* redirects printf() to the 51x24 text screen */
|
||||
(word *) 0x112, /* pointer to a 60 Hz async counter (Color Basic's TIMER) */
|
||||
0, /* default cursor blinking rate */
|
||||
NULL, /* use inkey(), i.e., Color Basic's INKEY$ */
|
||||
NULL, /* no sound on '\a' */
|
||||
};
|
||||
|
||||
Then call `initHiResTextScreen()` with the address of this object:
|
||||
|
||||
initHiResTextScreen(&init);
|
||||
|
||||
To use the 42x24 mode, replace 51 and `writeCharAt_51cols` with 42 and
|
||||
`writeCharAt_42cols`.
|
||||
|
||||
Optionally, to get the screen address from Basic instead of assuming
|
||||
$0E00, use this expression in the `HiResTextScreenInit` struct initializer:
|
||||
|
||||
(byte *) * (byte *) 0x00BC << 8
|
||||
|
||||
Then, see hirestxt.h for the available functions.
|
||||
|
||||
To compile with this library, pass `-I <dir>` to cmoc, where `<dir>` is
|
||||
the directory where hirestxt.h is.
|
||||
|
||||
To link with this library, specify `-L <dir> -lhirestxt` to the cmoc
|
||||
invocation that does the linking. This specifies where the libhirestxt.a
|
||||
file can be found.
|
||||
|
||||
|
||||
## Demo
|
||||
|
||||
The demo is compiled as `hirestxt.bin` for the CoCo and Dragon Basic
|
||||
environments, and `hirestxt` for OS-9.
|
||||
|
||||
Under OS-9, the demo must be executed from a 32x16 terminal.
|
||||
|
||||
|
||||
## Dragon support
|
||||
|
||||
To compile for the Dragon, pass `TARGET=dragon` to make.
|
||||
|
||||
|
||||
## OS-9 support
|
||||
|
||||
To compile for OS-9, pass `TARGET=os9` to make.
|
||||
|
||||
This generates a demo in an OS-9 executable named `hirestxt`. Use the
|
||||
[ToolShed](https://sourceforge.net/projects/toolshed/) `os9` command
|
||||
to transfer this executable to an OS-9 virtual hard-disk (for example)
|
||||
and to give it the execution attributes:
|
||||
|
||||
os9 copy -r hirestxt the-disk.vhd,/CMDS/
|
||||
os9 attr -epe the-disk.vhd,/CMDS/hirestxt
|
||||
|
||||
Under OS-9, the demo must be executed from a 32x16 terminal.
|
||||
|
||||
This has been tested with [NitrOS-9](http://www.nitros9.org/battle.html)
|
||||
EOU 1.0.1 and [CMOC](http://sarrazip.com/dev/cmoc.html) 0.1.89.
|
||||
The /nil driver must be present.
|
||||
|
||||
|
||||
## VT52 Support
|
||||
|
||||
A subset of [VT52](https://en.wikipedia.org/wiki/VT52) terminal sequences
|
||||
are supported by the code in function processConsoleOutChar() of
|
||||
processConsoleOutChar.c.
|
||||
|
||||
If this support is not needed, the code for it can be omitted by compiling
|
||||
the library with HIRESTEXT_NO_VT52.
|
||||
|
||||
|
||||
## License
|
||||
|
||||
This library is in the public domain.
|
||||
|
||||
|
||||
## Version history
|
||||
|
||||
0.1.0 - 2016-05-01 - First public release.
|
||||
0.1.1 - 2016-09-12 - Adapted to CMOC 0.1.31 re: inline asm.
|
||||
0.1.2 - 2016-12-26 - HIRESTEXT_NO_VT52 to avoid VT52 code.
|
||||
0.2.0 - 2017-12-01 - Adapted to modular compilation under CMOC 0.1.43.
|
||||
0.2.1 - 2018-04-03 - Adapted to modular compilation under CMOC 0.1.51.
|
||||
0.3.0 - 2018-09-20 - Added 42x24 text screen and 5x8 font.
|
||||
Adapted to CMOC 0.1.53.
|
||||
0.3.1 - 2018-11-25 - Fixed linking error re: putBitmaskInScreenWord() in 42x24 mode.
|
||||
Now compilable for the Dragon (make TARGET=dragon).
|
||||
0.4.0 - 2023-08-19 - initHiResTextScreen() and closeHiResTextScreen() do not change the
|
||||
screen mode themselves anymore -- see the next section.
|
||||
The HiResTextScreenInit struct must now receive a pointer
|
||||
to a timer word.
|
||||
It may also receive a pointer to an inkey-like function.
|
||||
Replaced textScreenPageNum in struct HiResTextScreenInit with
|
||||
the textScreenBuffer field, which removes a dependency on the SAM chip --
|
||||
see the next section.
|
||||
Stopped exporting the global textScreenBuffer variable.
|
||||
Removed the setTextScreenAddress() function.
|
||||
Fixed typo in the name of the internal oldCHROUT global variable.
|
||||
Merged all library code into a single .a file.
|
||||
Most functions are now in their own file, to optimize the final executable size.
|
||||
Most global variables are now fields of a single global struct instance.
|
||||
Now usable under OS-9 (assumes that the /nil driver is installed).
|
||||
Slightly optimized character writing routine.
|
||||
0.4.1 - 2023-09-02 - Added setInverseVideoMode() and setBoldMode() which allow writing
|
||||
characters in inverted colors and/or in bold.
|
||||
Added support for VT52 sequences <ESC> p and <ESC> q to turn inverse
|
||||
video on of off, and <ESC> E to home the cursor and clear the screen.
|
||||
0.4.2 - 2024-11-28 - Added showOS9PMode4Screen(), quitOS9Graphics(), OS9Timer_init(),
|
||||
OS9Timer_shutdown() and OS9Timer_getTimerAddress() under OS-9.
|
||||
Fixed a bug in the demo where the column of letters was displayed
|
||||
too slowly.
|
||||
0.5.0 - 2025-03-14 - Added support for writing to a 64x24 text screen on a CoCo 3 320x192x16
|
||||
graphics screen. See initHiResTextScreen2(), setForegroundColor() et al.
|
||||
hirestxt-demo.c gives an example.
|
||||
The screen is now cleared from top to bottom instead of bottom up.
|
||||
The demo now plays an audible bell character.
|
||||
0.5.1 - 2025-09-27 - Removed UTF-8 non-breaking space character from hirestxt-demo.c and
|
||||
hirestxt.h, to resolve a compilation issue with GCC 14.2.0.
|
||||
|
||||
|
||||
## Using version 0.5.x
|
||||
|
||||
Version 0.5.0 introduced support for a 64x24 text mode in the CoCo 3 320x192x16 graphics mode.
|
||||
This text mode is slower than using the CoCo 3's hardware 40- or 80-column text screens, but it
|
||||
allows:
|
||||
|
||||
* using the same hirestxt-based code to display text on a CoCo 1, 2 or 3, on a Dragon, or
|
||||
on NitrOS-9;
|
||||
* mixing text and graphics on the same screen, using a narrower font than the byte-aligned
|
||||
font used by Basic's HPRINT command.
|
||||
|
||||
The hirestxt-demo.c program shows examples of how to use both the CoCo 3 64x24 mode and the
|
||||
original 51x24 and 42x24 modes on a 256x192x2 (PMODE 4) screen.
|
||||
|
||||
|
||||
## Adapting to version 0.4.x
|
||||
|
||||
The instructions apply when targetting the Color Basic environment.
|
||||
|
||||
- Where the `HiResTextScreenInit` is initialized, add these values:
|
||||
|
||||
- A value for the `timer` field, which must be the address of a 16-bit word that
|
||||
gets incremented 60 times per second.
|
||||
|
||||
- A zero for the `cursorAnimationLowTimerByteMask` field.
|
||||
|
||||
- A NULL value for the `inkeyFuncPtr` field, to have the library use `inkey()`,
|
||||
as before, to poll the keyboard.
|
||||
|
||||
- A NULL value for the `bellFuncPtr` field, to have a call to Color Basic's
|
||||
SOUND 1,1, as before, when character 7 is sent to the screen.
|
||||
|
||||
- Execute this code before calling `initHiResTextScreen()`:
|
||||
|
||||
initCoCoSupport();
|
||||
width(32);
|
||||
pmode(4, A);
|
||||
pcls(255);
|
||||
screen(1, 0);
|
||||
|
||||
Replace `A` with the address put in the `textScreenBuffer` field of struct
|
||||
`HiResTextScreenInit`.
|
||||
|
||||
To use the current address where ECB would draw PMODE 4 graphics, use this
|
||||
expression: `(byte *) * (byte *) 0x00BC << 8`
|
||||
|
||||
(This takes $BC, sees it as a byte pointer, gets that byte, sees it as a
|
||||
16-bit address, then shifts this address 8 bits left, to form the actual
|
||||
address of the screen buffer.)
|
||||
|
||||
Under other platforms, execute platform-specific code to set up a 256x192
|
||||
green/black 2-color graphics mode, then put its buffer address in
|
||||
`textScreenBuffer`.
|
||||
|
||||
- Execute this code after calling `closeHiResTextScreen()`:
|
||||
|
||||
pmode(0, 0);
|
||||
cls(255);
|
||||
screen(0, 0);
|
||||
|
||||
- If the program was using the `textScreenBuffer` global variable, it
|
||||
should now stop using it and use the address that it puts in the
|
||||
`textScreenBuffer` field of `HiResTextScreenInit` instead.
|
||||
|
||||
- Similarly, the `hiResWidth` global variable has been replaced with
|
||||
the `numColumns` field of `HiResTextScreenInit`.
|
||||
|
||||
- The `textPosX` and `textPosY` global variables have been removed from
|
||||
the public interface. Functions `getCursorColumn()` and `getCursorRow()`
|
||||
have been added. The cursor can be moved with `moveCursor()`.
|
||||
|
||||
|
||||
--- animateCursor.c ---
|
||||
/* animateCursor.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- clear.c ---
|
||||
/* clear.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- clearRowsToEOS.c ---
|
||||
/* clearRowsToEOS.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- closeHiResTextScreen.c ---
|
||||
/* closeHiResTextScreen.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- clrscr.c ---
|
||||
/* clrscr.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- clrtobot.c ---
|
||||
/* clrtobot.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- clrtoeol.c ---
|
||||
/* clrtoeol.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- fillNybbles.c ---
|
||||
/* initHiResTextScreen2.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- font4x8.c ---
|
||||
/* font4x8.c - ISO-8859-1 font for a 51x24 software text screen.
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- font4x8.h ---
|
||||
/* font4x8.h - ISO-8859-1 font for a 51x24 software text screen.
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- font5x8.c ---
|
||||
/* font5x8.c - ISO-8859-1 font for a 42x24 software text screen.
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- font5x8.h ---
|
||||
/* font5x8.h - ISO-8859-1 font for a 42x24 software text screen.
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- getCursorColumn.c ---
|
||||
/* getCursorColumn.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- getCursorRow.c ---
|
||||
/* getCursorRow.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- hirestxt-demo.c ---
|
||||
/* hirestxt-demo.c - Example program that uses hirestxt.h.
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
|
||||
This demo uses VT52 sequences.
|
||||
The library must NOT have been compiled with HIRESTEXT_NO_VT52.
|
||||
*/
|
||||
|
||||
--- hirestxt.h ---
|
||||
/* hirestxt.h - 51x24 black-on-green PMODE 4 text screen.
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
|
||||
Quick Guide:
|
||||
- Call initHiResTextScreen() first.
|
||||
- End with a call to closeHiResTextScreen().
|
||||
- #define HIRESTEXT_NO_VT52 to avoid compiling the VT52 code.
|
||||
*/
|
||||
|
||||
--- hirestxt_private.h ---
|
||||
/* hirestxt_private.h - 51x24 black-on-green PMODE 4 text screen.
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
|
||||
*/
|
||||
|
||||
--- init.c ---
|
||||
/* init.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- initHiResTextScreen.c ---
|
||||
/* initHiResTextScreen.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- initHiResTextScreen2.c ---
|
||||
/* initHiResTextScreen2.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- initVT52.c ---
|
||||
/* initVT52.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- invertPixelsAtCursor.c ---
|
||||
/* invertPixelsAtCursor.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- moveCursor.c ---
|
||||
/* moveCursor.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- os9timer.c ---
|
||||
/* os9timer.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- processConsoleOutChar.c ---
|
||||
/* processConsoleOutChar.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- putBitmaskInScreenWord.c ---
|
||||
/* putBitmaskInScreenWord.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- quitOS9Graphics.c ---
|
||||
/* quitOS9Graphics.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- removeCursor.c ---
|
||||
/* removeCursor.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- scrollTextScreenUp.c ---
|
||||
/* scrollTextScreenUp.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- setBackgroundColor.c ---
|
||||
/* setBackgroundColor.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- setBoldMode.c ---
|
||||
/* setBoldMode.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- setForegroundBoldColor.c ---
|
||||
/* setForegroundBoldColor.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- setForegroundColor.c ---
|
||||
/* setForegroundColor.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- setInverseVideoMode.c ---
|
||||
/* setInverseVideoMode.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- showOS9PMode4Screen.c ---
|
||||
/* showOS9PMode4Screen.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- waitKeyBlinkingCursor.c ---
|
||||
/* waitKeyBlinkingCursor.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- writeCenteredLine.c ---
|
||||
/* writeCenteredLine.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- writeChar.c ---
|
||||
/* writeChar.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- writeCharAt.c ---
|
||||
/* writeCharAt.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- writeCharAt_320x16.c ---
|
||||
/* writeCharAt_320x16.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- writeCharAt_42cols.c ---
|
||||
/* writeCharAt_42cols.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- writeCharAt_51cols.c ---
|
||||
/* writeCharAt_51cols.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- writeDecWord.c ---
|
||||
/* writeDecWord.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
|
||||
--- writeString.c ---
|
||||
/* writeString.c
|
||||
|
||||
By Pierre Sarrazin <http://sarrazip.com/>
|
||||
This file is in the public domain.
|
||||
*/
|
||||
Reference in new issue
Block a user