Hi Folks,I have just posted the latest pre-release of RomWBW v2.9.2 on GitHub at https://github.com/wwarthen/RomWBW/releases. This happens quite frequently, but this particular pre-release includes a couple of changes that will cause you trouble if you are not expecting them. So, I wanted to briefly post something to highlight them here:
Enter code here...RetroBrew HBIOS v2.9.1-pre.5, 2018-06-11Enter code here...B>D:RC2014You should definitely update the system tracks on your boot disks. Use SYSCOPY to do that. Something like:B>SYSCOPY C:=ZSYS.SYSThis assume C: is the boot disk you want to update and that you are booting into ZSystem.-Wayne
Excellent. I love to get reports of success!
RetroBrew HBIOS v2.9.2-pre.27, 2020-01-28
RC2014 Z80 @ 7.372MHz0 MEM W/S, 1 I/O W/S, INT MODE 1512KB ROM, 512KB RAM
SIO0: IO=0x80 SIO MODE=115200,8,N,1SIO1: IO=0x82 SIO MODE=115200,8,N,1ACIA0: IO=0x80 ACIA MODE=115200,8,N,1DSRTC: MODE=STD IO=0xC0 NOT PRESENTMD: UNITS=2 ROMDISK=384KB RAMDISK=384KBIDE: IO=0x10 DEVICES=1IDE0: 8BIT LBA BLOCKS=0x0001F400 SIZE=62MBPPIDE: IO=0x20 DEVICES=2PPIDE0: LBA BLOCKS=0x0001F480 SIZE=62MBPPIDE1: NO MEDIA
Unit Device Type Capacity/Mode---------- ---------- ---------------- --------------------Char 0 SIO0: RS-232 115200,8,N,1Char 1 SIO1: RS-232 115200,8,N,1Char 2 ACIA0: RS-232 115200,8,N,1Disk 0 MD1: RAM Disk 384KB,LBADisk 1 MD0: ROM Disk 384KB,LBADisk 2 IDE0: CompactFlash 62MB,LBADisk 3 PPIDE0: CompactFlash 62MB,LBADisk 4 PPIDE1: Hard Disk --Hi Wayne, Ive used some extra address decoding from the spares available in the CF module and made the ACIA appear at 0xA0, I can now write bytes in and out using the monitor.The ROMwbw 'finds' the ACIA at 0xA0 thinkig it must really be at 0x80 but still tries to use it at 0x80, doh.I'll try 0x40 but I think it may cause problems ...ALternativly I'll rebuild the ROM, dont know just what to change though.Can I poke something into ram to change the ACIA address in the bios table?cheers, David.
On Saturday, 1 February 2020 20:28:35 UTC, Wayne Warthen wrote:Yes, it looks like a port conflict. The official SIO module will conflict with the official ACIA module if built normally.RomWBW will find the ACIA at either 0x80 or 0x40. If you modify the ACIA hardware so that is at port address 0x40, that should work (as long 0x40-0x7F does not conflict with anything else).-Wayne
/* * Arfon speach synthesizer driver * uses RC2014 sound card i/o ports * Compiled to .com file with z88dk - sdcc * PS C:\z88dk\rc2014> zcc +rc2014 -subtype=hbios -v --list -m -SO3 --c-code-in-asm --opt-code-size -clib=sdcc_iy --max-allocs-per-node200000 iotest.c -o iotest -create-app * * D. Richards, Feb 2020*/
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <z80.h>
char * spk_dictionary[] = { "Digitalker", /* 0 */ "One", /* 1 */ "Two", /* 2 */ "Three", /* 3 */ "Four", /* 4 */ "Five", /* 5 */ "Six", /* 6 */ "Seven", /* 7 */ "Eight", /* 8 */ "Nine", /* 9 */
"Ten", /* 10 */ "Eleven", /* 11 */ "Twelve", /* 12 */ "Thirteen", /* 13 */ "Fourteen", /* 14 */ "Fifteen", /* 15 */ "Sizteen", /* 16 */ "Seventeen", /* 17 */ "Eighteen", /* 18 */ "Ninteen", /* 19 */
"Twenty", /* 20 */ "Thirty", /* 21 */ "Fourty", /* 22 */ "Fifty", /* 23 */ "Sixty", /* 24 */ "Seventy", /* 25 */ "Eighty", /* 26 */ "Ninety", /* 27 */ "Hundred", /* 28 */ "Thousand", /* 29 */
"Million", /* 30 */ "Zero", /* 31 */ "A", /* 32 */ "B", /* 33 */ "C", /* 34 */ "D", /* 35 */ "E", /* 36 */ "F", /* 37 */ "G", /* 38 */ "H", /* 39 */
"I", /* 40 */ "J", /* 41 */ "K", /* 42 */ "L", /* 43 */ "M", /* 44 */ "N", /* 45 */ "O", /* 46 */ "P", /* 47 */ "Q", /* 48 */ "R", /* 49 */
"S", /* 50 */ "T", /* 51 */ "U", /* 52 */ "V", /* 53 */ "W", /* 54 */ "X", /* 55 */ "Y", /* 56 */ "Z", /* 57 */ "Again", /* 58 */ "Ampere", /* 59 */
"And", /* 60 */ "At", /* 61 */ "Cancel", /* 62 */ "Case", /* 63 */ "Cent", /* 64 */ "400Hz", /* 65 */ "80Hz", /* 66 */ " ", /* 67 */ " ", /* 68 */ " ", /* 69 */
" ", /* 70 */ " ", /* 71 */ "Centi", /* 72 */ "Check", /* 73 */ "Comma", /* 74 */ "Control", /* 75 */ "Danger", /* 76 */ "Degree", /* 77 */ "Dollar", /* 78 */ "Down", /* 79 */
"Equal", /* 80 */ "Error", /* 81 */ "Feet", /* 82 */ "Flow", /* 83 */ "Fuel", /* 84 */ "Gallon", /* 85 */ "Go", /* 86 */ "Gram", /* 87 */ "Great", /* 88 */ "Greater", /* 89 */
"Have", /* 90 */ "High", /* 91 */ "Higher", /* 92 */ "Hour", /* 93 */ "In", /* 94 */ "Inches", /* 95 */ "Is", /* 96 */ "It", /* 97 */ "Kilo", /* 98 */ "Left", /* 99 */
"Less", /* 100 */ "Lesser", /* 101 */ "Limit", /* 102 */ "Low", /* 103 */ "Lower", /* 104 */ "Mark", /* 105 */ "Meter", /* 106 */ "Mile", /* 107 */ "Milli", /* 108 */ "Minus", /* 109 */
"Minute", /* 110 */ "Near", /* 111 */ "Number", /* 112 */ "Of", /* 113 */ "Off", /* 114 */ "On", /* 115 */ "Out", /* 116 */ "Over", /* 117 */ "Parenthesis", /* 118 */ "Percent", /* 119 */
"Please", /* 120 */ "Plus", /* 121 */ "Point", /* 122 */ "Pound", /* 123 */ "Pulses", /* 124 */ "Rate", /* 125 */ "Re", /* 126 */ "Ready", /* 127 */ "Right", /* 128 */ "s", /* 129 */
"Second", /* 130 */ "Set", /* 131 */ "Space", /* 132 */ "Speed", /* 133 */ "Star", /* 134 */ "Start", /* 135 */ "Stop", /* 136 */ "Than", /* 137 */ "The", /* 138 */ "Time", /* 139 */
"Try", /* 140 */ "Up", /* 141 */ "Volt", /* 142 */ "Weight" /* 143 */
};
#define SPK_DICTIONARY_COUNT ( sizeof( spk_dictionary ) / sizeof( char * ) )
void init(void){ z80_outp(0xd8,0x07); // a & b outputs z80_outp(0xd0,0xc0);
z80_outp(0xd8,0x0f); // clear b z80_outp(0xd0,0x00);
z80_outp(0xd8,0x0e); // clear a z80_outp(0xd0,0x00);}
void wait(void) // wait for Int after speach is finished{ int wd=0; int ia;
z80_outp(0xd8,0x07); // select ddr register z80_outp(0xd0,0x80); // set a inputs, b outputs
for(wd=0; wd<32000; wd++) { z80_outp(0xd8,0x0e); // select a ia=z80_inp(0xd8); // read a
if(ia&0x80) // check for int high { break; } } z80_outp(0xd8,0x07); // restor a & b as outputs z80_outp(0xd0,0xc0); return;}
void say(int i) // send speach index, then strobe{ z80_outp(0xd8,0x0e); // select a z80_outp(0xd0,0x00); // set low
z80_outp(0xd8,0x0f); // select b z80_outp(0xd0,i); // set key
z80_outp(0xd8,0x0e); // select a z80_outp(0xd0,0x01); // set strobe
wait();}
int find(char * inword, int *key) // lookup index for word to say{ int i; int value; for(i=0; i<SPK_DICTIONARY_COUNT; i++) { // try to convert text to non zero integer value = (int) strtol(inword, (char **)NULL, 10); if(value != 0) { *key = value; return 1; } // try to find word in dictionary if(strcmp(spk_dictionary[i], inword)==0) { *key = i; return 1; } } return 0;}
void main(void){ char buffer[80]; char * pch; int key=-1;
init(); do { printf("Words? "); scanf ("%s",buffer); pch = strtok (buffer,", .-"); while (pch != NULL) { if(find(pch, &key) == 1) { say(key); } pch = strtok (NULL, ", .-"); } } while (key != 0); }Off topic... now I have the serial ports working I was keen to try the sdcc compiler.
I wanted to make this a command line tool to play the words given as arguments, but it seems that this isnt a feature available in the RC2014 sdcc crt (runtime) library.There may be an enhanced crt version to allow the usual argc, argv parameters but I have not found it if it exists, or perhaps another target is needed.
#include <input.h>
void INPUT(char *p, char *fmt, ...)
{
va_list arg;
va_start(arg, fmt);
printf("%s", p);
in_wait_nokey();
fflush(stdin);
vscanf(fmt, arg);
}
do
{
INPUT("Instructions? (y/n) ", "%2s", buf);
*buf = toupper(*buf);
}
while ((*buf != 'Y') && (*buf != 'N'));
do { INPUT("How many people are playing? ", "%d", &NP); } while ((NP < 0) || (NP > 6));
It looks like the C compiler will be quite useful for the RC2014.
--
You received this message because you are subscribed to a topic in the Google Groups "RC2014-Z80" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/rc2014-z80/xUT8f5MvcQw/unsubscribe.
To unsubscribe from this group and all its topics, send an email to rc2014-z80+...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/rc2014-z80/5d7b8be6-9415-45fa-814e-f9ff6d394a7d%40googlegroups.com.
To unsubscribe from this group and all its topics, send an email to rc2014-z80+unsubscribe@googlegroups.com.
C:\Users\Jose Luis\Downloads\RomWBW\Source\Images>Build:: Cleaning...::: Building Floppy Disk Images...:Generating Floppy Disk cpm22...Adding System Image ..\cpm22\cpm_wbw.sys...mkfs.cpm -f wbw_fd144 -b ..\cpm22\cpm_wbw.sys fd_cpm22.imgmkfs.cpm: can not open ..\cpm22\cpm_wbw.sys: No such file or directorycpmcp -f wbw_fd144 fd_cpm22.img d_cpm22/u0/*.* 0:cpmcp -f wbw_fd144 fd_cpm22.img d_cpm22/u1/*.* 1:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/assign.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/fat.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/fdu.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/format.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/mode.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/osldr.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/rtc.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/survey.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/syscopy.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/sysgen.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/talk.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/timer.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/xm.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/inttest.com 0:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/tune.com 3:cpmcp -f wbw_fd144 fd_cpm22.img ../../Binary/Apps/Tunes/*.* 3:Moving image fd_cpm22.img into output directory...