mirror of https://github.com/zxdos/zxuno.git
6208 lines
250 KiB
HTML
6208 lines
250 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="generator" content="Asciidoctor 2.0.10">
|
||
<meta name="description" content="English Manual of ZXDOS+ and gomaDOS+">
|
||
<meta name="keywords" content="Manual, English, ZXDOS+, gomaDOS+">
|
||
<meta name="author" content="kounch">
|
||
<title>ZXDOS+ and gomaDOS+ Manual</title>
|
||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700">
|
||
<style>
|
||
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
|
||
/* Uncomment @import statement to use as custom stylesheet */
|
||
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/
|
||
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}
|
||
audio,video{display:inline-block}
|
||
audio:not([controls]){display:none;height:0}
|
||
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}
|
||
a{background:none}
|
||
a:focus{outline:thin dotted}
|
||
a:active,a:hover{outline:0}
|
||
h1{font-size:2em;margin:.67em 0}
|
||
abbr[title]{border-bottom:1px dotted}
|
||
b,strong{font-weight:bold}
|
||
dfn{font-style:italic}
|
||
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}
|
||
mark{background:#ff0;color:#000}
|
||
code,kbd,pre,samp{font-family:monospace;font-size:1em}
|
||
pre{white-space:pre-wrap}
|
||
q{quotes:"\201C" "\201D" "\2018" "\2019"}
|
||
small{font-size:80%}
|
||
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
|
||
sup{top:-.5em}
|
||
sub{bottom:-.25em}
|
||
img{border:0}
|
||
svg:not(:root){overflow:hidden}
|
||
figure{margin:0}
|
||
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}
|
||
legend{border:0;padding:0}
|
||
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}
|
||
button,input{line-height:normal}
|
||
button,select{text-transform:none}
|
||
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}
|
||
button[disabled],html input[disabled]{cursor:default}
|
||
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}
|
||
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}
|
||
textarea{overflow:auto;vertical-align:top}
|
||
table{border-collapse:collapse;border-spacing:0}
|
||
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}
|
||
html,body{font-size:100%}
|
||
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}
|
||
a:hover{cursor:pointer}
|
||
img,object,embed{max-width:100%;height:auto}
|
||
object,embed{height:100%}
|
||
img{-ms-interpolation-mode:bicubic}
|
||
.left{float:left!important}
|
||
.right{float:right!important}
|
||
.text-left{text-align:left!important}
|
||
.text-right{text-align:right!important}
|
||
.text-center{text-align:center!important}
|
||
.text-justify{text-align:justify!important}
|
||
.hide{display:none}
|
||
img,object,svg{display:inline-block;vertical-align:middle}
|
||
textarea{height:auto;min-height:50px}
|
||
select{width:100%}
|
||
.center{margin-left:auto;margin-right:auto}
|
||
.stretch{width:100%}
|
||
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em}
|
||
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr}
|
||
a{color:#2156a5;text-decoration:underline;line-height:inherit}
|
||
a:hover,a:focus{color:#1d4b8f}
|
||
a img{border:0}
|
||
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility}
|
||
p aside{font-size:.875em;line-height:1.35;font-style:italic}
|
||
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em}
|
||
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0}
|
||
h1{font-size:2.125em}
|
||
h2{font-size:1.6875em}
|
||
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em}
|
||
h4,h5{font-size:1.125em}
|
||
h6{font-size:1em}
|
||
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0}
|
||
em,i{font-style:italic;line-height:inherit}
|
||
strong,b{font-weight:bold;line-height:inherit}
|
||
small{font-size:60%;line-height:inherit}
|
||
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)}
|
||
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit}
|
||
ul,ol{margin-left:1.5em}
|
||
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em}
|
||
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit}
|
||
ul.square{list-style-type:square}
|
||
ul.circle{list-style-type:circle}
|
||
ul.disc{list-style-type:disc}
|
||
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0}
|
||
dl dt{margin-bottom:.3125em;font-weight:bold}
|
||
dl dd{margin-bottom:1.25em}
|
||
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help}
|
||
abbr{text-transform:none}
|
||
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd}
|
||
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)}
|
||
blockquote cite::before{content:"\2014 \0020"}
|
||
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)}
|
||
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)}
|
||
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2}
|
||
h1{font-size:2.75em}
|
||
h2{font-size:2.3125em}
|
||
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em}
|
||
h4{font-size:1.4375em}}
|
||
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede}
|
||
table thead,table tfoot{background:#f7f8f7}
|
||
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left}
|
||
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)}
|
||
table tr.even,table tr.alt{background:#f8f8f7}
|
||
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6}
|
||
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em}
|
||
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400}
|
||
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table}
|
||
.clearfix::after,.float-group::after{clear:both}
|
||
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word}
|
||
:not(pre)>code.nobreak{word-wrap:normal}
|
||
:not(pre)>code.nowrap{white-space:nowrap}
|
||
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed}
|
||
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit}
|
||
pre>code{display:block}
|
||
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal}
|
||
em em{font-style:normal}
|
||
strong strong{font-weight:400}
|
||
.keyseq{color:rgba(51,51,51,.8)}
|
||
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap}
|
||
.keyseq kbd:first-child{margin-left:0}
|
||
.keyseq kbd:last-child{margin-right:0}
|
||
.menuseq,.menuref{color:#000}
|
||
.menuseq b:not(.caret),.menuref{font-weight:inherit}
|
||
.menuseq{word-spacing:-.02em}
|
||
.menuseq b.caret{font-size:1.25em;line-height:.8}
|
||
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em}
|
||
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400}
|
||
b.button::before{content:"[";padding:0 3px 0 2px}
|
||
b.button::after{content:"]";padding:0 2px 0 3px}
|
||
p a>code:hover{color:rgba(0,0,0,.9)}
|
||
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em}
|
||
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table}
|
||
#header::after,#content::after,#footnotes::after,#footer::after{clear:both}
|
||
#content{margin-top:1.25em}
|
||
#content::before{content:none}
|
||
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0}
|
||
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf}
|
||
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px}
|
||
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap}
|
||
#header .details span:first-child{margin-left:-.125em}
|
||
#header .details span.email a{color:rgba(0,0,0,.85)}
|
||
#header .details br{display:none}
|
||
#header .details br+span::before{content:"\00a0\2013\00a0"}
|
||
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)}
|
||
#header .details br+span#revremark::before{content:"\00a0|\00a0"}
|
||
#header #revnumber{text-transform:capitalize}
|
||
#header #revnumber::after{content:"\00a0"}
|
||
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem}
|
||
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em}
|
||
#toc>ul{margin-left:.125em}
|
||
#toc ul.sectlevel0>li>a{font-style:italic}
|
||
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0}
|
||
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none}
|
||
#toc li{line-height:1.3334;margin-top:.3334em}
|
||
#toc a{text-decoration:none}
|
||
#toc a:active{text-decoration:underline}
|
||
#toctitle{color:#7a2518;font-size:1.2em}
|
||
@media screen and (min-width:768px){#toctitle{font-size:1.375em}
|
||
body.toc2{padding-left:15em;padding-right:0}
|
||
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto}
|
||
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em}
|
||
#toc.toc2>ul{font-size:.9em;margin-bottom:0}
|
||
#toc.toc2 ul ul{margin-left:0;padding-left:1em}
|
||
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em}
|
||
body.toc2.toc-right{padding-left:0;padding-right:15em}
|
||
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}}
|
||
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0}
|
||
#toc.toc2{width:20em}
|
||
#toc.toc2 #toctitle{font-size:1.375em}
|
||
#toc.toc2>ul{font-size:.95em}
|
||
#toc.toc2 ul ul{padding-left:1.25em}
|
||
body.toc2.toc-right{padding-left:0;padding-right:20em}}
|
||
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px}
|
||
#content #toc>:first-child{margin-top:0}
|
||
#content #toc>:last-child{margin-bottom:0}
|
||
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em}
|
||
#footer-text{color:rgba(255,255,255,.8);line-height:1.44}
|
||
#content{margin-bottom:.625em}
|
||
.sect1{padding-bottom:.625em}
|
||
@media screen and (min-width:768px){#content{margin-bottom:1.25em}
|
||
.sect1{padding-bottom:1.25em}}
|
||
.sect1:last-child{padding-bottom:0}
|
||
.sect1+.sect1{border-top:1px solid #e7e7e9}
|
||
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400}
|
||
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em}
|
||
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible}
|
||
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none}
|
||
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221}
|
||
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em}
|
||
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em}
|
||
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic}
|
||
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0}
|
||
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)}
|
||
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit}
|
||
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%}
|
||
.admonitionblock>table td.icon{text-align:center;width:80px}
|
||
.admonitionblock>table td.icon img{max-width:none}
|
||
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase}
|
||
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)}
|
||
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0}
|
||
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px}
|
||
.exampleblock>.content>:first-child{margin-top:0}
|
||
.exampleblock>.content>:last-child{margin-bottom:0}
|
||
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px}
|
||
.sidebarblock>:first-child{margin-top:0}
|
||
.sidebarblock>:last-child{margin-bottom:0}
|
||
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center}
|
||
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0}
|
||
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em}
|
||
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}}
|
||
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}}
|
||
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8}
|
||
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)}
|
||
.listingblock>.content{position:relative}
|
||
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5}
|
||
.listingblock:hover code[data-lang]::before{display:block}
|
||
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5}
|
||
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"}
|
||
.listingblock pre.highlightjs{padding:0}
|
||
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px}
|
||
.listingblock pre.prettyprint{border-width:0}
|
||
.prettyprint{background:#f7f7f8}
|
||
pre.prettyprint .linenums{line-height:1.45;margin-left:2em}
|
||
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0}
|
||
pre.prettyprint li code[data-lang]::before{opacity:1}
|
||
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none}
|
||
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none}
|
||
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal}
|
||
table.linenotable td.code{padding-left:.75em}
|
||
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em}
|
||
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em}
|
||
pre.pygments .lineno::before{content:"";margin-right:-.125em}
|
||
.quoteblock{margin:0 1em 1.25em 1.5em;display:table}
|
||
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em}
|
||
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify}
|
||
.quoteblock blockquote{margin:0;padding:0;border:0}
|
||
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)}
|
||
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0}
|
||
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right}
|
||
.verseblock{margin:0 1em 1.25em}
|
||
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility}
|
||
.verseblock pre strong{font-weight:400}
|
||
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex}
|
||
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic}
|
||
.quoteblock .attribution br,.verseblock .attribution br{display:none}
|
||
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)}
|
||
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none}
|
||
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0}
|
||
.quoteblock.abstract{margin:0 1em 1.25em;display:block}
|
||
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center}
|
||
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf}
|
||
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0}
|
||
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem}
|
||
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0}
|
||
table.tableblock{max-width:100%;border-collapse:separate}
|
||
p.tableblock:last-child{margin-bottom:0}
|
||
td.tableblock>.content>:last-child{margin-bottom:-1.25em}
|
||
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0}
|
||
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede}
|
||
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0}
|
||
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0}
|
||
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0}
|
||
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px}
|
||
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0}
|
||
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0}
|
||
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0}
|
||
table.frame-all{border-width:1px}
|
||
table.frame-sides{border-width:0 1px}
|
||
table.frame-topbot,table.frame-ends{border-width:1px 0}
|
||
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
|
||
th.halign-left,td.halign-left{text-align:left}
|
||
th.halign-right,td.halign-right{text-align:right}
|
||
th.halign-center,td.halign-center{text-align:center}
|
||
th.valign-top,td.valign-top{vertical-align:top}
|
||
th.valign-bottom,td.valign-bottom{vertical-align:bottom}
|
||
th.valign-middle,td.valign-middle{vertical-align:middle}
|
||
table thead th,table tfoot th{font-weight:bold}
|
||
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7}
|
||
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold}
|
||
p.tableblock>code:only-child{background:none;padding:0}
|
||
p.tableblock{font-size:1em}
|
||
ol{margin-left:1.75em}
|
||
ul li ol{margin-left:1.5em}
|
||
dl dd{margin-left:1.125em}
|
||
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0}
|
||
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em}
|
||
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none}
|
||
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em}
|
||
ul.unstyled,ol.unstyled{margin-left:0}
|
||
ul.checklist{margin-left:.625em}
|
||
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em}
|
||
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em}
|
||
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em}
|
||
ul.inline>li{margin-left:1.25em}
|
||
.unstyled dl dt{font-weight:400;font-style:normal}
|
||
ol.arabic{list-style-type:decimal}
|
||
ol.decimal{list-style-type:decimal-leading-zero}
|
||
ol.loweralpha{list-style-type:lower-alpha}
|
||
ol.upperalpha{list-style-type:upper-alpha}
|
||
ol.lowerroman{list-style-type:lower-roman}
|
||
ol.upperroman{list-style-type:upper-roman}
|
||
ol.lowergreek{list-style-type:lower-greek}
|
||
.hdlist>table,.colist>table{border:0;background:none}
|
||
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none}
|
||
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em}
|
||
td.hdlist1{font-weight:bold;padding-bottom:1.25em}
|
||
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em}
|
||
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top}
|
||
.colist td:not([class]):first-child img{max-width:none}
|
||
.colist td:not([class]):last-child{padding:.25em 0}
|
||
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd}
|
||
.imageblock.left{margin:.25em .625em 1.25em 0}
|
||
.imageblock.right{margin:.25em 0 1.25em .625em}
|
||
.imageblock>.title{margin-bottom:0}
|
||
.imageblock.thumb,.imageblock.th{border-width:6px}
|
||
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em}
|
||
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0}
|
||
.image.left{margin-right:.625em}
|
||
.image.right{margin-left:.625em}
|
||
a.image{text-decoration:none;display:inline-block}
|
||
a.image object{pointer-events:none}
|
||
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super}
|
||
sup.footnote a,sup.footnoteref a{text-decoration:none}
|
||
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline}
|
||
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em}
|
||
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0}
|
||
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em}
|
||
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em}
|
||
#footnotes .footnote:last-of-type{margin-bottom:0}
|
||
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0}
|
||
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0}
|
||
.gist .file-data>table td.line-data{width:99%}
|
||
div.unbreakable{page-break-inside:avoid}
|
||
.big{font-size:larger}
|
||
.small{font-size:smaller}
|
||
.underline{text-decoration:underline}
|
||
.overline{text-decoration:overline}
|
||
.line-through{text-decoration:line-through}
|
||
.aqua{color:#00bfbf}
|
||
.aqua-background{background:#00fafa}
|
||
.black{color:#000}
|
||
.black-background{background:#000}
|
||
.blue{color:#0000bf}
|
||
.blue-background{background:#0000fa}
|
||
.fuchsia{color:#bf00bf}
|
||
.fuchsia-background{background:#fa00fa}
|
||
.gray{color:#606060}
|
||
.gray-background{background:#7d7d7d}
|
||
.green{color:#006000}
|
||
.green-background{background:#007d00}
|
||
.lime{color:#00bf00}
|
||
.lime-background{background:#00fa00}
|
||
.maroon{color:#600000}
|
||
.maroon-background{background:#7d0000}
|
||
.navy{color:#000060}
|
||
.navy-background{background:#00007d}
|
||
.olive{color:#606000}
|
||
.olive-background{background:#7d7d00}
|
||
.purple{color:#600060}
|
||
.purple-background{background:#7d007d}
|
||
.red{color:#bf0000}
|
||
.red-background{background:#fa0000}
|
||
.silver{color:#909090}
|
||
.silver-background{background:#bcbcbc}
|
||
.teal{color:#006060}
|
||
.teal-background{background:#007d7d}
|
||
.white{color:#bfbfbf}
|
||
.white-background{background:#fafafa}
|
||
.yellow{color:#bfbf00}
|
||
.yellow-background{background:#fafa00}
|
||
span.icon>.fa{cursor:default}
|
||
a span.icon>.fa{cursor:inherit}
|
||
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default}
|
||
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c}
|
||
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111}
|
||
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900}
|
||
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400}
|
||
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000}
|
||
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold}
|
||
.conum[data-value] *{color:#fff!important}
|
||
.conum[data-value]+b{display:none}
|
||
.conum[data-value]::after{content:attr(data-value)}
|
||
pre .conum[data-value]{position:relative;top:-.125em}
|
||
b.conum *{color:inherit!important}
|
||
.conum:not([data-value]):empty{display:none}
|
||
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility}
|
||
h1,h2,p,td.content,span.alt{letter-spacing:-.01em}
|
||
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em}
|
||
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem}
|
||
p{margin-bottom:1.25rem}
|
||
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em}
|
||
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc}
|
||
.print-only{display:none!important}
|
||
@page{margin:1.25cm .75cm}
|
||
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important}
|
||
html{font-size:80%}
|
||
a{color:inherit!important;text-decoration:underline!important}
|
||
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important}
|
||
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em}
|
||
abbr[title]::after{content:" (" attr(title) ")"}
|
||
pre,blockquote,tr,img,object,svg{page-break-inside:avoid}
|
||
thead{display:table-header-group}
|
||
svg{max-width:100%}
|
||
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3}
|
||
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid}
|
||
#toc,.sidebarblock,.exampleblock>.content{background:none!important}
|
||
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important}
|
||
body.book #header{text-align:center}
|
||
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em}
|
||
body.book #header .details{border:0!important;display:block;padding:0!important}
|
||
body.book #header .details span:first-child{margin-left:0!important}
|
||
body.book #header .details br{display:block}
|
||
body.book #header .details br+span::before{content:none!important}
|
||
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important}
|
||
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always}
|
||
.listingblock code[data-lang]::before{display:block}
|
||
#footer{padding:0 .9375em}
|
||
.hide-on-print{display:none!important}
|
||
.print-only{display:block!important}
|
||
.hide-for-print{display:none!important}
|
||
.show-for-print{display:inherit!important}}
|
||
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem}
|
||
.sect1{padding:0!important}
|
||
.sect1+.sect1{border:0}
|
||
#footer{background:none}
|
||
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}}
|
||
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}}
|
||
</style>
|
||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
||
</head>
|
||
<body class="book toc2 toc-left">
|
||
<div id="header">
|
||
<h1>ZXDOS+ and gomaDOS+ Manual</h1>
|
||
<div class="details">
|
||
<span id="author" class="author">kounch</span><br>
|
||
<span id="email" class="email"><a href="mailto:kounch@users.noreply.github.com">kounch@users.noreply.github.com</a></span><br>
|
||
<span id="revnumber">version 1.3.5</span>
|
||
</div>
|
||
<div id="toc" class="toc2">
|
||
<div id="toctitle">Index</div>
|
||
<ul class="sectlevel1">
|
||
<li><a href="#_introduction">Introduction</a>
|
||
<ul class="sectlevel2">
|
||
<li><a href="#_ports_and_connectors">Ports and Connectors</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_zxdos">ZXDOS+</a></li>
|
||
<li><a href="#_gomados">gomaDOS+</a></li>
|
||
<li><a href="#_description">Description</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_initial_setup">Initial Setup</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_formatting">microSD card formatting</a>
|
||
<ul class="sectlevel4">
|
||
<li><a href="#_windows">Windows</a></li>
|
||
<li><a href="#_macos">MacOS</a></li>
|
||
<li><a href="#_linux">Linux</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_esxdos">esxdos</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_gomados_keyboard_modes">GomaDOS+ keyboard modes</a></li>
|
||
<li><a href="#_bios">BIOS</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_main">Main</a></li>
|
||
<li><a href="#_roms">ROMs</a></li>
|
||
<li><a href="#_upgrade">Upgrade</a></li>
|
||
<li><a href="#_boot">Boot</a></li>
|
||
<li><a href="#_advanced">Advanced</a></li>
|
||
<li><a href="#_exit">Exit</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_zx_spectrum">ZX Spectrum</a>
|
||
<ul class="sectlevel2">
|
||
<li><a href="#_microsd_advanced_format_3e">microSD advanced format (+3e)</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_windows_2">Windows</a></li>
|
||
<li><a href="#_macos_2">MacOS</a></li>
|
||
<li><a href="#_linux_2">Linux</a></li>
|
||
<li><a href="#_3e">+3e</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_keyboard">Keyboard</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_spanish">Spanish</a></li>
|
||
<li><a href="#_english">English</a></li>
|
||
<li><a href="#_spectrum">Spectrum</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_special_keys_and_buttons">Special keys and buttons</a></li>
|
||
<li><a href="#_roms_2">ROMs</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_derbypro">DerbyPro</a></li>
|
||
<li><a href="#_cargandoleches">CargandoLeches</a>
|
||
<ul class="sectlevel4">
|
||
<li><a href="#_pokes">POKEs</a></li>
|
||
<li><a href="#_preparing_ultrafast_loading_tapes">Preparing ultrafast loading tapes</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_other_roms">Other ROMs</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_esxdos_2">esxdos</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_basic_guide">Basic Guide</a></li>
|
||
<li><a href="#_zxdos_commands">ZXDOS+ Commands</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_wi_fi">Wi-Fi</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_network_tools_for_zx_uno_pack">Network tools for ZX-Uno pack</a></li>
|
||
<li><a href="#_ftp_uno">FTP-Uno</a></li>
|
||
<li><a href="#_uart_terminal">UART Terminal</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_making_rdm_radastan_movie_files">Making RDM (RaDastan Movie) files</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_upgrade_2">Upgrade</a>
|
||
<ul class="sectlevel2">
|
||
<li><a href="#_bios_2">BIOS</a></li>
|
||
<li><a href="#_roms_3">ROMs</a></li>
|
||
<li><a href="#_cores">Cores</a></li>
|
||
<li><a href="#_esxdos_3">esxdos</a></li>
|
||
<li><a href="#_flash_memory">Flash Memory</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_other_cores">Other cores</a>
|
||
<ul class="sectlevel2">
|
||
<li><a href="#_zx_spectrum_48k_kyp">ZX Spectrum 48K (Kyp)</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format">microSD card format</a></li>
|
||
<li><a href="#_keyboard_2">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_2">Special keys and buttons</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_zx_spectrum_next">ZX Spectrum Next</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format_2">microSD card format</a></li>
|
||
<li><a href="#_keyboard_3">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_3">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_2">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_msx">MSX</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_format">microSD format</a></li>
|
||
<li><a href="#_keyboard_4">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_4">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_3">Basic Guide</a>
|
||
<ul class="sectlevel4">
|
||
<li><a href="#_msxctrl">MSXCTRL</a></li>
|
||
<li><a href="#_other">Other</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_amstrad_cpc">Amstrad CPC</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format_3">microSD card format</a></li>
|
||
<li><a href="#_keyboard_5">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_5">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_4">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_acorn_atom">Acorn Atom</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format_4">microSD card format</a></li>
|
||
<li><a href="#_keyboard_6">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_6">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_5">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_commodore_64">Commodore 64</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format_5">microSD card format</a></li>
|
||
<li><a href="#_keyboard_7">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_7">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_6">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_phoenix">Phoenix</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_format_2">microSD format</a></li>
|
||
<li><a href="#_keyboard_8">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_8">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_7">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_pong">Pong</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_format_3">microSD format</a></li>
|
||
<li><a href="#_keyboard_9">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_9">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_8">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_nes">NES</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format_6">microSD card format</a></li>
|
||
<li><a href="#_keyboard_10">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_10">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_9">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_colecovision">ColecoVision</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format_7">microSD card format</a></li>
|
||
<li><a href="#_keyboard_11">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_11">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_10">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_atari_2600">Atari 2600</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format_8">microSD card format</a></li>
|
||
<li><a href="#_keyboard_12">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_12">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_11">Basic Guide</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_videopac">Videopac</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_microsd_card_format_9">microSD card format</a></li>
|
||
<li><a href="#_keyboard_13">Keyboard</a></li>
|
||
<li><a href="#_special_keys_and_buttons_13">Special keys and buttons</a></li>
|
||
<li><a href="#_basic_guide_12">Basic Guide</a>
|
||
<ul class="sectlevel4">
|
||
<li><a href="#_change_vdc_rom_charset">Change VDC ROM charset</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_other_hardware">Other Hardware</a>
|
||
<ul class="sectlevel2">
|
||
<li><a href="#_rotary_encoders">Rotary Encoders</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_connection">Connection</a></li>
|
||
<li><a href="#_pong_core_configuration">Pong Core Configuration</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_loading_from_tape">Loading from tape</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_cassette_player">Cassette Player</a></li>
|
||
<li><a href="#_computer">Computer</a>
|
||
<ul class="sectlevel4">
|
||
<li><a href="#_playtzx">PlayTZX</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_mobile_phone_tablet_mp3_player_etc">Mobile phone, tablet, MP3 player, etc.</a>
|
||
<ul class="sectlevel4">
|
||
<li><a href="#_audio_file_conversion">Audio file conversion</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_miniduino">Miniduino</a>
|
||
<ul class="sectlevel4">
|
||
<li><a href="#_ports_and_buttons">Ports and buttons</a></li>
|
||
<li><a href="#_configuration">Configuration</a></li>
|
||
<li><a href="#_use">Use</a></li>
|
||
<li><a href="#_maxduino_firmware_upgrade">Maxduino firmware upgrade</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_troubleshooting">Troubleshooting</a>
|
||
<ul class="sectlevel2">
|
||
<li><a href="#_firmware_images_management">Firmware images management</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_zx123_tool">zx123_tool</a></li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_firmware_recovery">Firmware recovery</a>
|
||
<ul class="sectlevel3">
|
||
<li><a href="#_jtag_cable_connections">JTAG cable connections</a></li>
|
||
<li><a href="#_recovery_using_a_raspberry_pi">Recovery using a Raspberry Pi</a></li>
|
||
<li><a href="#_recovery_using_macos_and_usb_blaster_cable">Recovery using MacOS and USB-Blaster cable</a></li>
|
||
<li><a href="#_recovery_using_windows_and_usb_blaster_cable">Recovery using Windows and USB-Blaster cable</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li><a href="#_references">References</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="content">
|
||
<div id="preamble">
|
||
<div class="sectionbody">
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_introduction">Introduction</h2>
|
||
<div class="sectionbody">
|
||
<div class="paragraph">
|
||
<p>ZXDOS+ and gomaDOS+ are the continuation of <a href="http://zxuno.speccy.org">ZX-Uno</a> a hardware and software project based on an FPGA board programmed to work like a ZX Spectrum computer, and created by the ZX-Uno team: Superfo, AVillena, McLeod, Quest and Hark0.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Over time, the project has been growing, and now it is possible to install different software configurations (cores) in the flash memory of the FPGA, which work like different systems than the ZX Spectrum, and you can choose to start the ZXDOS+ with the desired configuration among all those installed.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>ZXDOS+ and gomaDOS+ official web page is <a href="http://zxdos.forofpga.es" class="bare">http://zxdos.forofpga.es</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Most of the functions and features of ZXDOS+ and gomaDOS+ are the same, so this document will generally talk about ZXDOS+, indicating the differences with gomaDOS+ where necessary.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="sect2">
|
||
<h3 id="_ports_and_connectors">Ports and Connectors</h3>
|
||
<div class="sect3">
|
||
<h4 id="_zxdos">ZXDOS+</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/ZXDOSfront.jpg" alt="ZXDOSfront"></span></p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/ZXDOSback.jpg" alt="ZXDOSback"></span></p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_gomados">gomaDOS+</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/gomaDosBack.jpg" alt="gomaDosBack"></span></p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_description">Description</h4>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 50%;">
|
||
<col style="width: 50%;">
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Power Switch</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">microSD Card Slot</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">JTAG and Joystick</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Audio Out</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Audio In</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">RGB/VGA Out</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">7</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Power Socket</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Expansion Port</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">9</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Left Joystick Port</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">10</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Right Joystick Port</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">11</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">PS/2 Keyboard Port</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">12</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">PS/2 Mouse Port</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">USB (PS/2) Port</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_initial_setup">Initial Setup</h3>
|
||
<div class="paragraph">
|
||
<p>In order to be able to set up and use a ZXDOS+ or gomaDOS+ you need, at least, the following:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>A USB charger or a TV or other device that offers USB power</p>
|
||
</li>
|
||
<li>
|
||
<p>VGA cable and monitor</p>
|
||
</li>
|
||
<li>
|
||
<p>PS/2 keyboard (in the case of ZXDOS +)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In order to take advantage of its full potential, you may also have:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>A microSD card, not necessarily very large</p>
|
||
</li>
|
||
<li>
|
||
<p>PC speakers to connect to the audio output, or a stereo jack cable to two red/white RCA connectors to connect to the TV (this is optional on gomaDOS+, as it has a beeper inside)</p>
|
||
</li>
|
||
<li>
|
||
<p>A standard Atari joystick, such as a Megadrive DB9 gamepad (gomadOS+ needs a joystick adapter)</p>
|
||
</li>
|
||
<li>
|
||
<p>A PS/2 mouse (USB to PS/2 adapter is needed when using a gomaDOS+)</p>
|
||
</li>
|
||
<li>
|
||
<p>An audio cable with a stereo 3.5 mm jack on one side, and both audio channels split into two mono outputs on the other side, if you want to use an audio player and/or recorder, like, for example, a Miniduino (<a href="#_miniduino">see more info later</a>)., a PC/Mac/Raspberry PI, etc. or a <a href="https://en.wikipedia.org/wiki/Cassette_tape">cassette tape</a> recorder/player. The right sound channel is used as input (EAR) and the left channel can be used as output (MIC).</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_formatting">microSD card formatting</h4>
|
||
<div class="paragraph">
|
||
<p>In order to use a microSD card, it has to be formatted with, at least, one FAT16 or FAT32 format (depending on the case, one or the other format is recommended for compatibility with different third-party cores). It must be the first partition if there are more than one, except for the Spectrum core wich can have <a href="#_microsd_advanced_format_3e">the first partition in +3DOS format, and then the second one in FAT16 or FAT32 format</a> to use with a +3e ROM.</p>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>FAT16 partitions have a maximum size of 4GB</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_windows">Windows</h5>
|
||
<div class="paragraph">
|
||
<p>For simple configurations, and cards of the correct size (less than 2GB for FAT16 or less than 32GB for FAT32), you can use <a href="https://www.sdcard.org/downloads/formatter/">the official formatting tool of the SD Association </a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For other, more complex, configurations, and depending on operating system version, you may use the command line tool <code>diskpart</code> or Windows Disk Managemente GUI.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_macos">MacOS</h5>
|
||
<div class="paragraph">
|
||
<p>For simple configurations, and cards of the correct size (less than 2GB for FAT16 or less than 32GB for FAT32), you can use <a href="https://www.sdcard.org/downloads/formatter/">the official formatting tool of the SD Association </a> or Disk Utility, which is included with the operating system.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In other case, you should use the command line.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For example, to format a card, shown as <code>disk6</code>, with only one FAT16 partition (if the card size is less than 2GB):</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">diskutil unmountDisk /dev/disk6
|
||
diskutil partitionDisk /dev/disk6 MBR <span class="s2">"MS-DOS FAT16"</span> ZXDOSPLUS R</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To split it into two FAT16 partitions of the same size (if the card size is 4GB or less):</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">diskutil unmountDisk /dev/disk6
|
||
diskutil partitionDisk /dev/disk6 MBR <span class="s2">"MS-DOS FAT16"</span> ZXDOSPLUS 50% <span class="s2">"MS-DOS FAT16"</span> EXTRA 50%</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To create two FAT 16 partitions (e.g. to use MSX core) and have the rest of space as another FAT32 partition (for cards more than 8GB in size):</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">diskutil unmountDisk /dev/disk6
|
||
diskutil partitionDisk /dev/disk6 MBR %DOS_FAT_16% ZXDOSPLUS 4G %DOS_FAT_16% EXTRA 4G <span class="s2">"MS-DOS FAT32"</span> DATA R
|
||
<span class="nb">sudo </span>newfs_msdos <span class="nt">-F</span> 16 <span class="nt">-v</span> ZXDOSPLUS <span class="nt">-c</span> 128 /dev/rdisk6s1
|
||
<span class="nb">sudo </span>newfs_msdos <span class="nt">-F</span> 16 <span class="nt">-v</span> EXTRA <span class="nt">-b</span> 4096 <span class="nt">-c</span> 128 /dev/rdisk6s2</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p><code>diskutil</code> cannot create FAT16 partitions which are bigger than 2G and also format them. That’s why, in this example, after only creating the partitions, we have to format them.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To create one FAT32 4GB partition (e.g. to use with Amstrad CPC core), and then have the rest of space available as a second FAT32 partition (for cards of more than 4GB):</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">diskutil unmountDisk /dev/disk6
|
||
diskutil partitionDisk /dev/disk6 MBR <span class="s2">"MS-DOS FAT32"</span> ZXDOSPLUS 4G <span class="s2">"MS-DOS FAT32"</span> EXTRA R</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_linux">Linux</h5>
|
||
<div class="paragraph">
|
||
<p>There are a lot of tools for Linux that can format and/or partition an SD card (<code>fdisk</code>, <code>parted</code>, <code>cfdisk</code>, <code>sfdisk</code> or <code>GParted</code> to name a few). It should only be taken into account that the partition scheme must always be MBR, and the first partition (the one that will be used for esxdos) must be primary partition.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_esxdos">esxdos</h4>
|
||
<div class="paragraph">
|
||
<p><a href="https://esxdos.org/index.html">esxdos</a> is a firmware for the DivIDE/DivMMC hardware interfaces (which ZXDOS+ implements). This allows access to storage devices such as a microSD card. It includes commands similar to those of UNIX, although to use them you must precede them with a period, for example <code>.ls</code>,` .cd`, <code>.mv</code>, etc.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For it to work, it is necessary to include the corresponding files in the first partition of the microSD card.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>At the time of writing this document, the version included with ZXDOS+ is 0.8.6, and it can be downloaded from the official website <a href="http://www.esxdos.org/files/esxdos086.zip">at this link</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Once downloaded and extracted, you have to copy the directories <code>BIN</code>, <code>SYS</code> and <code>TMP</code>, and all of their content, to the root of first partition of the microSD card.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If everything has been done correctly, when you turn on the ZXDOS+ Spectrum core, you will see how esxdos detects the card and loads the necessary components to work.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="./img/esxdos.png" alt="esxdos"></span></p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>It is also recommended to add the specific esxdos commands for ZXDOS+. These can be obtained from the project source page (<a href="https://github.com/zxdos/zxuno/tree/master/SD">here</a>, <a href="https://github.com/zxdos/zxuno/tree/master/">here</a> and <a href="https://guest:zxuno@svn.zxuno.com/svn/zxuno/software/upgrade">here</a>), and are as follows:</p>
|
||
</div>
|
||
<div class="literalblock">
|
||
<div class="content">
|
||
<pre>back16m
|
||
backzx2
|
||
backzxd
|
||
corebios
|
||
dmaplayw
|
||
esprst
|
||
iwconfig
|
||
joyconf
|
||
keymap
|
||
loadpzx
|
||
playmid
|
||
playrmov
|
||
romsback
|
||
romsupgr
|
||
upgr16m
|
||
upgrzx2
|
||
upgrzxd
|
||
zxuc
|
||
zxunocfg</pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><<#_zxdos+_commands,It is explained later> what each of them does.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_gomados_keyboard_modes">GomaDOS+ keyboard modes</h3>
|
||
<div class="paragraph">
|
||
<p>gomaDOS+ keyboard, being similar to the original ZX Spectrum keyboard, lacks some of the existing keys on a modern PC keyboard. The keyboard membrane is connected to an Arduino board, which manages the transformation key presses to PS/2 keyboard protocol. The board is programmed so it can behave in different modes according to your needs.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The default is ZX Spectrum mode. To change to a different mode, you must press <code>Caps Shift+Symbol Shift+U</code> and then the key for the desired mode. After doing that, some text is automatically typed, to show the selected mode (for example <code>.zx</code> if you press <code>Caps Shift+Symbol Shift+U</code> and theno <code>0</code>).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>This table shows the available modes and activation keys:</p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 50%;">
|
||
<col style="width: 50%;">
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th class="tableblock halign-left valign-top">Mode</th>
|
||
<th class="tableblock halign-left valign-top">Key</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">ZX Spectrum</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Amstrad CPC</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">MSX</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Commodore 64</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>3</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Atari 800XL</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>4</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">BBC Micro</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>5</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Acorn Electron</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>6</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Apple (I and II)</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Commodore VIC 20</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>8</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">PC XT</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>9</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Oric Atmos</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>A</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">SAM Coupé</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>B</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Jupiter ACE</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>C</code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>ZX Spectrum mode key assignment, with the corresponding keypress when used simultaneouly with <code>Caps Shift+Symbol Shift</code>:</p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
<col style="width: 10%;">
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>1</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>2</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>3</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>4</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>5</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>6</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>7</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>8</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>9</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>0</strong></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F1</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F2</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F3</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F4</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F5</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F6</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F7</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F8</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F9</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F1</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>Q</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>W</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>E</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>R</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>T</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>Y</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>U</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>I</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>O</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>P</strong></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F11</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>F12</code></p></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>Mode</code></p></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>A</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>S</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>D</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>F</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>G</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>H</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>J</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>K</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>L</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>Enter</strong></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>ScrLk</code></p></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>CShift</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>Z</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>X</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>C</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>V</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>B</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>N</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>M</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>SShift</strong></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><strong>Space</strong></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>Save</code></p></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>Vers</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>hRes</code></p></td>
|
||
<td class="tableblock halign-center valign-top"><p class="tableblock"><code>sRes</code></p></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
<td class="tableblock halign-center valign-top"></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div class="paragraph">
|
||
<p>Where:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>ScrLk</code>: <code>Scroll Lock</code> changes betweein composite and VGA video mode (on Next Core, you must use <code>Caps Shift+Symbol Shift+2</code> or`F2` instead)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Save</code>: Sets the current mode as the default one</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Vers</code>: Shows (types) current firmware version</p>
|
||
</li>
|
||
<li>
|
||
<p><code>hRes</code>: Hard Reset</p>
|
||
</li>
|
||
<li>
|
||
<p><code>sRes</code>: Soft Reset</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>The full list of key combinations (and compatible modes) is as follows:</p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 33.3333%;">
|
||
<col style="width: 33.3333%;">
|
||
<col style="width: 33.3334%;">
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th class="tableblock halign-left valign-top">Caps S.+Symbol S.</th>
|
||
<th class="tableblock halign-left valign-top">Mode</th>
|
||
<th class="tableblock halign-left valign-top">Action</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F1</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F2</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F3</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F4</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F5</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F6</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">7</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F7</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">8</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F8</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">9</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F9</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F10</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Q</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F11</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">W</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>F12</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">S</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">C64</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Ctrl+F12</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">E</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Acorn/CPC</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>PgUp</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">R</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Acorn</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>PgDown</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">U</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Mode</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">G</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">ZX/MSX/C64</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ScrLk</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">X</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Save</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">C</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">PC</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>OPQA</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">V</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">All</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Version</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">B</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">ZX</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Ctrl+Alt+Bcksp</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">N</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">ZX</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>Ctrl+Alt+Supr</code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_bios">BIOS</h3>
|
||
<div class="paragraph">
|
||
<p>Pressing the <code>F2</code> key (<code>Caps Shift+1</code> on gomaDOS+) during boot will access the BIOS setup. The BIOS firmware is the first program that runs when the ZXDOS+ is turned on. The main purpose of BIOS is to start and test the hardware and load one of the installed cores.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Using left and right cursor keys (<code>Caps Shift+5</code> and <code>Caps Shift+8</code> on gomaDOS+), you can navigate through the BIOS setup screens. With up and down keys (<code>Caps Shift+7</code> and <code>Caps Shift+6</code> on gomaDOS+) you can choose the different elements of each screen and, with the <code>Enter</code> key, it is possible to activate and choose the options for each of these. <code>Esc</code> key (<code>Caps Shift+Espacio</code> ongomaDOS+) is used to close open option windows without applying any action.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_main">Main</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/bios.png" alt="bios"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In the first configuration screen, in addition to being able to run several tests, you can define the default behavior for the following:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Boot Timer: Sets how long the boot screen is available (or hiding it completely)</p>
|
||
</li>
|
||
<li>
|
||
<p>Check CRC: Check ROM integrity when loading (more secure) or bypassing it (faster)</p>
|
||
</li>
|
||
<li>
|
||
<p>Keyboard</p>
|
||
</li>
|
||
<li>
|
||
<p>Timing: ULA Behaviour (48K, 128K, Pentagon Modes)</p>
|
||
</li>
|
||
<li>
|
||
<p>Contended</p>
|
||
</li>
|
||
<li>
|
||
<p>DivMMC</p>
|
||
</li>
|
||
<li>
|
||
<p>DivMMC NMI Support</p>
|
||
</li>
|
||
<li>
|
||
<p>New Graphic Modes Support (ULAPlus, Timex, Radastan)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>More technical information can be found on <a href="http://www.zxuno.com/wiki/index.php/ZX_Spectrum">de ZX-Uno Wiki</a>.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_roms">ROMs</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/bios2.png" alt="bios2"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The second screen shows the installed ZX Spectrum ROMs. You can reorder (Move Up, Move Down), rename or delete each of them, as well as choose the one that will be loaded by default at startup (Set Active ).</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_upgrade">Upgrade</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/bios3.png" alt="bios3"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><em>Upgrade</em> screen is used to perform the different updates of the Flash memory content: esxdos, BIOS, Cores, etc. (see <a href="#_updates">the section corresponding to updates</a> for more information).</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_boot">Boot</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/bios4.png" alt="bios4"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In the <em>Boot</em> screen you can choose which one of the installed cores is loaded by default at startup.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_advanced">Advanced</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/bios5.png" alt="bios5"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The Advanced configuration screen is used to edit the following settings:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Keyboard layout (Keyb Layout): See <a href="#_keyboard">the corresponding section</a> for more information)</p>
|
||
</li>
|
||
<li>
|
||
<p>Joystick behavior when emulated with the numeric keypad (Joy Keypad): Kempston, Sinclair Joystick 1, Sinclair Joystick 2, Protek or Fuller</p>
|
||
</li>
|
||
<li>
|
||
<p>Behavior of a joystick connected to the port (Joy DB9): Kempston, Sinclair Joystick 1, Sinclair Joystick 2, Protek, Fuller or simulate the keys <code>Q</code>,` A`, <code>O</code>,` P`, <code>Space</code> and <code>M</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Video output: PAL, NTSC or VGA</p>
|
||
</li>
|
||
<li>
|
||
<p>Scanline simulation: Enabled Disabled</p>
|
||
</li>
|
||
<li>
|
||
<p>VGA horizontal frequency: 50, 51, etc.</p>
|
||
</li>
|
||
<li>
|
||
<p>CPU speed: Normal (1x) or accelerated (2X, 3X, etc.)</p>
|
||
</li>
|
||
<li>
|
||
<p>Csync: Spectrum or PAL</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_exit">Exit</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/bios6.png" alt="bios6"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Finally, from the last screen you can:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Exit BIOS configuration saving changes</p>
|
||
</li>
|
||
<li>
|
||
<p>Discard changes and exit</p>
|
||
</li>
|
||
<li>
|
||
<p>Save changes without exiting</p>
|
||
</li>
|
||
<li>
|
||
<p>Discard Changes</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_zx_spectrum">ZX Spectrum</h2>
|
||
<div class="sectionbody">
|
||
<div class="paragraph">
|
||
<p>The main core is the one implementing a ZX Spectrum computer. This core is special, and it cannot be substituted for another that is not a ZX Spectrum, since the ZXDOS+ uses it for its operation.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>These are some of its main characteristics:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>ZX Spectrum 48K, 128K, Pentagon and Chloe 280SE implementation</p>
|
||
</li>
|
||
<li>
|
||
<p>ULA with ULAplus, Timex and Radastan modes (including hardware scroll and selectable palette group)</p>
|
||
</li>
|
||
<li>
|
||
<p>Ability to disable memory contention (for Pentagon 128 compatibility)</p>
|
||
</li>
|
||
<li>
|
||
<p>Ability to choose the keyboard behavior (issue 2 or issue 3)</p>
|
||
</li>
|
||
<li>
|
||
<p>Possibility to choose the timing of the ULA (48K, 128K or Pentagon)</p>
|
||
</li>
|
||
<li>
|
||
<p>Control of screen framing, configurable for type of timing, and possibility to choose between original Spectrum synchronisms or progressive PAL standard.</p>
|
||
</li>
|
||
<li>
|
||
<p>Timex horizontal MMU support with HOME, DOC and EXT banks in RAM.</p>
|
||
</li>
|
||
<li>
|
||
<p>Programmable raster interruption in line number, for any TV line.</p>
|
||
</li>
|
||
<li>
|
||
<p>Possibility of activating/deactivating memory bank management registers, for better compatibility with each implemented model</p>
|
||
</li>
|
||
<li>
|
||
<p>Ability to activate / deactivate the devices incorporated into the core to improve compatibility with certain programs</p>
|
||
</li>
|
||
<li>
|
||
<p>ZXMMC support for + 3e and DIVMMC support for esxdos and compatible firmwares</p>
|
||
</li>
|
||
<li>
|
||
<p>Turbo Sound support</p>
|
||
</li>
|
||
<li>
|
||
<p>SpecDrum support</p>
|
||
</li>
|
||
<li>
|
||
<p>Each channel A, B, C of the two AY-3-8912, beeper and SpecDrum chips can be directed to the left, right, both or neither outputs, allowing the implementation of configurations such as ACB, ABC, etc.</p>
|
||
</li>
|
||
<li>
|
||
<p>Real joystick and keyboard joystick support with Kempston, Sinclair 1 and 2, Cursor, Fuller and QAOPSpcM protocol.</p>
|
||
</li>
|
||
<li>
|
||
<p>Turbo mode support at 7MHz, 14MHz, 28MHz</p>
|
||
</li>
|
||
<li>
|
||
<p>Keyboard support (PS/2 protocol) and user-configurable mapping from within Spectrum itself.</p>
|
||
</li>
|
||
<li>
|
||
<p>PS/2 mouse support emulating the Kempston Mouse protocol.</p>
|
||
</li>
|
||
<li>
|
||
<p>Possibility of video output in composite video mode, RGB 15kHz, or VGA.</p>
|
||
</li>
|
||
<li>
|
||
<p>User selectable vertical refresh rate to improve compatibility with VGA monitors.</p>
|
||
</li>
|
||
<li>
|
||
<p>Multicore boot support: from the Spectrum you can select an address of the SPI Flash and the FPGA will load a core from there.</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="sect2">
|
||
<h3 id="_microsd_advanced_format_3e">microSD advanced format (+3e)</h3>
|
||
<div class="paragraph">
|
||
<p>ZX Spectrum +3e is one ROM that can be used with ZX Spectrum core. This is an improved Sinclair ZX Spectrum +3, wich can use hard disks or memory cards.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>+3e uses its own partition format (called IDEDOS), to split de hard disk into several partitions to store data. ROM version 1.28 and later can share IDEDOS partitions with MBR partitions. In other case, you must reserve the whole card for IDEDOS partitions.</p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>The following partition scheme can only be used with ZX Spectrum core.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock tip">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-tip" title="Tip"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Each partition in IDEDOS can be between 1 and 16 Megabytes (1 million bytes) in size, and each disk can have between 1 and 65535 partitions. This means that the maximum space used in a card is about 1GB.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>This is one method to split a card into two or three parts, with the first partition IDEDOS (1GB), the second one FAT16 (4GB) and the third one FAT32 (using the remaining space in the card).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>exsdos and other programs can be installed into the second partition <a href="#_esxdos">as explained earlier</a>.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_windows_2">Windows</h4>
|
||
<div class="paragraph">
|
||
<p>You can use Windows Disk Management utility. The steps are:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Remove all partitions from the card</p>
|
||
</li>
|
||
<li>
|
||
<p>Create a new extended partition, using the desired space for IDEDOS</p>
|
||
</li>
|
||
<li>
|
||
<p>Create a primary partition, 4GB in size, and format as FAT16</p>
|
||
</li>
|
||
<li>
|
||
<p>Optionally, create another primary partition using the remaining space and format as FAT32</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_macos_2">MacOS</h4>
|
||
<div class="paragraph">
|
||
<p>You will have to use the command line. The first task is to find out which device is the disk to format:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">diskutil list</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For this example, it will be disk 6:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>(...)
|
||
/dev/disk6 (external, physical):
|
||
#: TYPE NAME SIZE IDENTIFIER
|
||
0: FDisk_partition_scheme *15.9 GB disk6
|
||
1: DOS_FAT_32 UNKNOWN 15.9 GB disk6s1</code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>Instruction steps:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Unmount the disk and edit the partition sceme (the second step requires admin privileges):</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">diskutil unmountDisk /dev/disk6
|
||
<span class="nb">sudo </span>fdisk <span class="nt">-e</span> /dev/rdisk6</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>fdisk: could not open MBR file /usr/standalone/i386/boot0: No such file or directory
|
||
Enter 'help' for information
|
||
fdisk: 1> erase
|
||
fdisk:*1> edit 1
|
||
Partition id ('0' to disable) [0 - FF]: [0] (? for help) 7F
|
||
Do you wish to edit in CHS mode? [n]
|
||
Partition offset [0 - 31116288]: [63] 128
|
||
Partition size [1 - 31116287]: [31116287] 2017152
|
||
|
||
fdisk:*1> edit 2
|
||
Partition id ('0' to disable) [0 - FF]: [0] (? for help) 06
|
||
Do you wish to edit in CHS mode? [n]
|
||
Partition offset [0 - 31116288]: [2017280]
|
||
Partition size [1 - 29099135]: [29099135] 7812504
|
||
|
||
fdisk:*1> flag 2
|
||
|
||
fdisk:*1> edit 3
|
||
Partition id ('0' to disable) [0 - FF]: [0] (? for help) 0B
|
||
Do you wish to edit in CHS mode? [n]
|
||
Partition offset [0 - 31116288]: [9829784]
|
||
Partition size [1 - 21286504]: [21286504]
|
||
|
||
fdisk:*1> print
|
||
Starting Ending
|
||
#: id cyl hd sec - cyl hd sec [ start - size]
|
||
------------------------------------------------------------------------
|
||
1: 7F 1023 254 63 - 1023 254 63 [ 128 - 2017152] <Unknown ID>
|
||
2: 06 1023 254 63 - 1023 254 63 [ 2017280 - 7812504] DOS > 32MB
|
||
3: 0B 1023 254 63 - 1023 254 63 [ 9829784 - 21286504] Win95 FAT-32
|
||
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
|
||
|
||
fdisk:*1> write
|
||
fdisk: 1> quit</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="2">
|
||
<li>
|
||
<p>Format the FAT partitions (admin privileges required)</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">diskutil unmountDisk /dev/disk6
|
||
<span class="nb">sudo </span>newfs_msdos <span class="nt">-F</span> 16 <span class="nt">-v</span> ZXDOSPLUS <span class="nt">-c</span> 128 /dev/rdisk6s2
|
||
<span class="nb">sudo </span>newfs_msdos <span class="nt">-F</span> 32 <span class="nt">-v</span> EXTRA <span class="nt">-c</span> 128 /dev/rdisk6s3</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="3">
|
||
<li>
|
||
<p>Confirm that the new partition scheme has been applied:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">diskutil list</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>(...)
|
||
/dev/disk6 (external, physical):
|
||
#: TYPE NAME SIZE IDENTIFIER
|
||
0: FDisk_partition_scheme *15.9 GB disk6
|
||
1: 0x7F 1.0 GB disk6s1
|
||
2: DOS_FAT_16 ZXDOSPLUS 4.0 GB disk6s2
|
||
3: DOS_FAT_32 EXTRA 10.9 GB disk6s3</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_linux_2">Linux</h4>
|
||
<div class="paragraph">
|
||
<p>You can use the command line. First, find out the device to erase:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">lsblk</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For this example, it will be <code>sdc</code>:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
||
(..)
|
||
sdc 179:0 0 15,8G 0 disk
|
||
└─sdc1 179:1 0 15,8G 0 part</code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>Instructions:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Verify that the disk isn’t mounted and edit the partition scheme (this step requires root privileges):</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="nb">sudo </span>fdisk <span class="nt">-e</span> /dev/sdc</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>Enter 'help' for information
|
||
fdisk: 1> erase
|
||
fdisk:*1> edit 1
|
||
Partition id ('0' to disable) [0 - FF]: [0] (? for help) 7F
|
||
Do you wish to edit in CHS mode? [n]
|
||
Partition offset [0 - 31116288]: [63] 128
|
||
Partition size [1 - 31116287]: [31116287] 2017152
|
||
|
||
fdisk:*1> edit 2
|
||
Partition id ('0' to disable) [0 - FF]: [0] (? for help) 06
|
||
Do you wish to edit in CHS mode? [n]
|
||
Partition offset [0 - 31116288]: [2017280]
|
||
Partition size [1 - 29099135]: [29099135] 7812504
|
||
|
||
fdisk:*1> flag 2
|
||
|
||
fdisk:*1> edit 3
|
||
Partition id ('0' to disable) [0 - FF]: [0] (? for help) 0B
|
||
Do you wish to edit in CHS mode? [n]
|
||
Partition offset [0 - 31116288]: [9829784]
|
||
Partition size [1 - 21286504]: [21286504]
|
||
|
||
fdisk:*1> print
|
||
Starting Ending
|
||
#: id cyl hd sec - cyl hd sec [ start - size]
|
||
------------------------------------------------------------------------
|
||
1: 7F 1023 254 63 - 1023 254 63 [ 128 - 2017152] <Unknown ID>
|
||
2: 06 1023 254 63 - 1023 254 63 [ 2017280 - 7812504] DOS > 32MB
|
||
3: 0B 1023 254 63 - 1023 254 63 [ 9829784 - 21286504] Win95 FAT-32
|
||
4: 00 0 0 0 - 0 0 0 [ 0 - 0] unused
|
||
|
||
fdisk:*1> write
|
||
fdisk: 1> quit</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="2">
|
||
<li>
|
||
<p>Format both FAT partitions (requires root privileges)</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="nb">sudo </span>mkfs.fat <span class="nt">-F</span> 16 /dev/sdc2
|
||
<span class="nb">sudo </span>mkfs.fat <span class="nt">-F</span> 32 /dev/sdc3</code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="3">
|
||
<li>
|
||
<p>Confirm that the partition scheme has been changed:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">lsblk</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
|
||
(...)
|
||
sda 179:0 0 15,8G 0 disk
|
||
├─sda1 179:1 0 1G 0 part
|
||
├─sda2 179:2 0 4G 0 part
|
||
├─sda3 179:3 0 10,8G 0 part</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_3e">+3e</h4>
|
||
<div class="paragraph">
|
||
<p>Once the microSD card is ready to use, you can start Spectrum core with a +3e ROM and format the IDEDOS part.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The first step is determine the disk geometry. With the cart inserted into the ZXDOS+, type the command:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="basic">CAT TAB</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>This will give a result showing the number of <a href="https://en.wikipedia.org/wiki/Cylinder-head-sector">cylinders, heads and sectors</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Whith this info, we estimate the size of our partition, using cylinders. For example, if the number of cylinders is 32768, and we want to use 1GB of a 16GB card, the number of cylinders needes would be 32768/16=2048. This way, the IDEDOS partition can be formatted using that number:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="basic">FORMAT TO 0,100,2048</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The first value (<code>0</code>) is the drive to use (the first one), the second value is the maximum number of IDEDOS partitions, and the third one yis the number of cylinders to use.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Once formatted, you can create new partitions. For example, to create a 16MB partition with the name "Software", another 4GB partition named "Swap" (to use as swap) and another one name "Utils", 8MB in size:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="basic">NEW DATA "Software",16
|
||
NEW EXP "Swap1",4
|
||
NEW DATA "Utils",8</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For more information about the different +3e disk commands , you can check <a href="https://worldofspectrum.org/zxplus3e/index.html">this page at World of Spectrum</a>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_keyboard">Keyboard</h3>
|
||
<div class="paragraph">
|
||
<p>The keyboard map (physical keys of the keyboard assignment to the keystrokes that are presented to the different cores) is changed using the <code>Advanced</code> menu of the BIOS. There are three different maps to choose from: Spanish (default), English, and Spectrum (advanced).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can also change it using the <code>keymap</code> utility. Inside <code>/bin</code> you have to create a directory named <code>keymaps</code> and copy inside the keyboard map files that you want to use. For example, to switch to the US map you have to write <code>.keymap us</code> from esxdos.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For the map to be preserved after a master reset, it has to be selected as <code>Default</code> in the BIOS.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For more information, see <a href="http://www.zxuno.com/forum/viewtopic.php?f=37&t=208">this message in the ZX-Uno forum</a>.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_spanish">Spanish</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="./img/keyboardEsp.png" alt="keyboardEsp"></span></p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_english">English</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="./img/keyboardEng.png" alt="keyboardEng"></span></p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_spectrum">Spectrum</h4>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="./img/keyboardAV.png" alt="keyboardAV"></span></p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_special_keys_and_buttons">Special keys and buttons</h3>
|
||
<div class="paragraph">
|
||
<p>The following gomaDOS+ key combinations are in <code>ZX</code> keyboard mode. Please check <a href="#_gomados_keyboard_modes">the corresponding section</a> for more information. You can also use <code>PC XT</code> keyboard mode combinations (like <code>Caps Shift+Symbol Shift+2</code> instead of <code>Caps Shift+1</code>).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Special keys which can be used during startup:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>F2</code> (<code>Caps Shift+1</code> on gomaDOS+) Enter BIOS setup</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Caps Lock</code> or <code>Cursor down</code> (<code>Caps Shift+2</code> on gomaDOS+) or, if a joystick is connected, pressing <code>down</code>: Core selection menu</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Esc</code> (<code>Caps Shift+Space</code> on gomaDOS+), or if a joystick with two or more fire buttons is connected, pressing the 2nd fire button: ZX Spectrum core ROM selection menu</p>
|
||
</li>
|
||
<li>
|
||
<p><code>R</code>: Loads the Spectrum core ROM in "real" mode, disabling esxdos, new graphics modes, etc.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>/</code> (numeric keyboard, <code>Symbol Shift+V</code> on gomaDOS+): Load the default ZX Spectrum core ROM in "root" mode</p>
|
||
</li>
|
||
<li>
|
||
<p>Number from <code>1</code> to <code>9</code>: Load the core in the flash location corresponding to that number</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Special keys that can be used while running the main core (ZX Spectrum):</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Esc</code> (<code>Caps Shift+Space</code> on gomaDOS+): BREAK</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F2</code> (<code>Caps Shift+1</code> on gomaDOS+): Edit</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F5</code> (<code>Caps Shift+Symbol Shift+5</code> on gomaDOS+): NMI</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F7</code> (<code>Caps Shift+Symbol Shift+7</code> on gomaDOS+): Play or pause when playing .PZX files</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F8</code> (<code>Caps Shift+Symbol Shift+8</code> on gomaDOS+): Rewind .PZX file to the previous mark</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F10</code> (<code>Caps Shift+9</code> on gomaDOS+): Graph</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F12</code> (<code>Caps Shift+Symbol Shift+W</code> on gomaDOS+): Turbo Boost. Speeds up CPU to 28MHz while pressed (beginnig with core EXP27).</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Backspace</code> (<code>Caps Shift+Symbol Shift+B</code> on gomaDOS+): Hard reset. Backspace is the delete key, located in the top-right portion of the keyboard, above <code>Enter</code>.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Supr</code> (<code>Caps Shift+Symbol Shift+N</code> on gomaDOS+): Soft reset.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): Switches between compositve and VGA video modes.</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_roms_2">ROMs</h3>
|
||
<div class="paragraph">
|
||
<p>The ZX Spectrum core can be initialized using different ROM versions (48K, 128K, Plus 2, etc.). These are stored in the flash memory of the ZXDOS+, and you can choose which one to load by pressing the <code>Esc</code> (<code>Caps Shift+Space</code> on gomaDOS+) key during boot. You can also define the ROM that you want to load by default using the BIOS setup.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>See the <a href="#_roms_3">updates section</a> for more information on how to expand or modify the ROMs stored in flash memory.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_derbypro">DerbyPro</h4>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.facebook.com/groups/DerbyPro">DerbyPro or Derby++</a> is an enhanced firmware ROM for the ZX Spectrum, based on v1.4 of the Derby development ROM. The Spectrum 128 (codename "Derby") was a Spanish machine commissioned by Investronica and launched in 1985. It came with a keypad that provided additional editing keys. In 1986, the UK version came out with a simplified version of 128 BASIC and no keypad. Derby++ is developed from the Spanish ROM to include the benefits of both versions, without the drawbacks, and support for new hardware developments.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can download the ROM, a user manual and other files from the <a href="https://www.facebook.com/groups/DerbyPro">official Facebook Public Group</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Since it is a 64K ROM with support for new hardware, these flags can be used when <a href="#_zx123_tool">adding it to the SPI flash</a>:</p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 50%;">
|
||
<col style="width: 50%;">
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th class="tableblock halign-left valign-top">Flag</th>
|
||
<th class="tableblock halign-left valign-top">Meaning</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>d</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Enable DivMMC</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>n</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Enable NMI DivMMC (esxdos Menu)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Use 128K timings</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_cargandoleches">CargandoLeches</h4>
|
||
<div class="paragraph">
|
||
<p>CargandoLeches is a set of ZX Spectrum ROMs that startetd as a project to load games in any Spectrum model 15-20x faster. No tape is needed, but a digital audio source, as a computer, mobile device, MP3 player, etc. The new ROM detects the loading method and reverts to the original ROM code if needed. This is handled transparently, with no user or program intervention.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Since version 2.0 the project changed from a single ROM to more, each one with different options. This way, you can choose a different mix of options that may include:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Ultrafast loading</p>
|
||
</li>
|
||
<li>
|
||
<p>Reset & Play (After a sofware reset of the core, the system is ready to load from tape)</p>
|
||
</li>
|
||
<li>
|
||
<p>POKE editor</p>
|
||
</li>
|
||
<li>
|
||
<p>Enable or disable Sinclair BASIC token expansion</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The whole ROM set is available to download from the repository in GitHub <a href="https://github.com/antoniovillena/CargandoLeches/tree/master/binaries">here</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Depending on which ROM you choose, the flags when <a href="#_zx123_tool">adding to the SPI flash</a> may vary. For example, for the ROM <code>48le_ea_re_po</code> (with all features enabled), these flags can be used (we cannot enable NMI DivMMC since the POKE editor will use it):</p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 50%;">
|
||
<col style="width: 50%;">
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th class="tableblock halign-left valign-top">Flag</th>
|
||
<th class="tableblock halign-left valign-top">Meaning</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>d</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Enable DivMMC</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>h</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable ROM high bit (1FFD bit 2)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>l</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable ROM low bit (7FFD bit 4)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>x</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable Timex mode</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div class="sect4">
|
||
<h5 id="_pokes">POKEs</h5>
|
||
<div class="paragraph">
|
||
<p>When using a ROM with POKE option enabled:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Once the game is loaded, after pressing NMI (<code>F5</code> or <code>Caps Shift+Symbol Shift+5</code> on gomaDOS+) a field will appear in the upper left corner of the screen</p>
|
||
</li>
|
||
<li>
|
||
<p>Enter the POKE address and press <code>Enter</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Enter the POKE value and press <code>Enter</code> again</p>
|
||
</li>
|
||
<li>
|
||
<p>Repeat steps 2. and 3. until all the desired POKEs are entered. To finish and return to the game, press <code>Enter</code> twice</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_preparing_ultrafast_loading_tapes">Preparing ultrafast loading tapes</h5>
|
||
<div class="paragraph">
|
||
<p>The ROMs with ultrafast loading enabled, need special tape audio data which is made from normal loading <code>TAP</code> files, without protections or turbo loading.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In order to create an ultrafast loading tape you need <code>leches</code> and <code>CgLeches</code> command line utilities. Those can be obtained, for Windows, from the
|
||
<a href="https://github.com/antoniovillena/CargandoLeches/tree/master/binaries">official repository</a>. You can also obtain an unofficial version for MacOS from <a href="https://github.com/kounch/CargandoLeches/tree/master/binaries/MacOS">this other repository</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In any other case, you can compile from the <a href="https://github.com/antoniovillena/CargandoLeches">source code at the official repository</a>. For example, in Linux, to compile using <code>gcc</code> you only need these commands:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">gcc leches.c <span class="nt">-o</span> leches
|
||
gcc CgLeches.c <span class="nt">-o</span> CgLeches</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To create an ultrafast loading tape you have to use the <code>CgLeches</code> command from a terminal, giving, at least, the path to the original <code>TAP</code> file and also to the new file to create (<code>WAV</code> or <code>TZX</code>). There are also some other optional parameters, like the loading speed, between 0 and 7 (where 0 is fastest but also more incompatible), if you want to create a mono or stereo file (when making a <code>WAV</code>), and more.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Thus, to make a <code>WAV</code> file with an ultrafast loading tape from the file <code>Valley.tap</code>, with loading speed 5, you could type:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="o">(</span>...<span class="o">)</span> CgLeches Valley.tap Valley.wav 5</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>This way, the file <code>Valley.wav</code> can be played from a computer or another device and load using the ROM (see the section about <a href="#_loading_from_tape">loading from tape</a> for more info).</p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Due to hardware limitations, <code>TZX</code> files made with <code>CgLeches</code> do not work with a <a href="#_miniduino">Miniduino</a>, although they usually work with <a href="#_playtzx"><code>PlayTZX</code></a>.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_other_roms">Other ROMs</h4>
|
||
<div class="paragraph">
|
||
<p>Here are flag settings which work when <a href="#_zx123_tool">adding to the SPI flash</a> some other known custom ROMs:</p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 50%;">
|
||
<col style="width: 50%;">
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th class="tableblock halign-left valign-top">ROM Name</th>
|
||
<th class="tableblock halign-left valign-top">Flags</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Gosh Wonderful ROM v1.33</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">dnhl17x</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Looking Glass 1.07</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">dnhl17x</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">ZX82 by Daniel A. Nagy</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">dnhl17</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">ZX85 by Daniel A. Nagy</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">dntmh1</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Arcade Game Designer 0.1</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">thl17x</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_esxdos_2">esxdos</h3>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>There are two different kind of esxdos commands, the so-called "DOT" commands, which, as the name suggests, begin with a period, and the commands that are extensions to the existing ones in BASIC.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The main "DOT" commands are the following:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>128</code>: Para enter 128K mode from within 48K mode</p>
|
||
</li>
|
||
<li>
|
||
<p><code>cd</code>: Change current working directory</p>
|
||
</li>
|
||
<li>
|
||
<p><code>chmod</code>: Change file attributes</p>
|
||
</li>
|
||
<li>
|
||
<p><code>cp</code>: Copy a file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>divideo</code>: Play a DivIDEo (.DVO) video file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>drives</code>: Show currently available drives</p>
|
||
</li>
|
||
<li>
|
||
<p><code>dskprobe</code>: Utility which shows low level content of an storage device</p>
|
||
</li>
|
||
<li>
|
||
<p><code>dumpmem</code>: Can dump RAM memory content to a file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>file</code>: Tries to recognize the type of data contained in a file (like the UNIX command)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>gramon</code>: Monitor to search graphics, sprites, fonts, etc. in RAM memory</p>
|
||
</li>
|
||
<li>
|
||
<p><code>hexdump</code>: Shows the contents of a file using hexadecimal notation</p>
|
||
</li>
|
||
<li>
|
||
<p><code>hexview</code>: Allow to see and navigate through the contents os a file using hexadecimal notation</p>
|
||
</li>
|
||
<li>
|
||
<p><code>launcher</code>: Creates a shortcut (launcher) to open directly a TAP file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>ls</code>: Show the content of a directory</p>
|
||
</li>
|
||
<li>
|
||
<p><code>lstap</code>: Show the content of a .TAP file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>mkdir</code>: Create a directory</p>
|
||
</li>
|
||
<li>
|
||
<p><code>mktrd</code>: Create a .TRD disk file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>more</code>: Show the content of a text file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>mv</code>: Move a file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>partinfo</code>: Show partition information of an storage device</p>
|
||
</li>
|
||
<li>
|
||
<p><code>playpt3</code>: Play .PT3 music file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>playsqt</code>: Play .SQT music file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>playstc</code>: Play .STC music file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>playtfm</code>: Play .TFC music file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>playwav</code>: Play .WAV audio file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>rm</code>: Remove a file or a directory</p>
|
||
</li>
|
||
<li>
|
||
<p><code>snapload</code>: Load snapshot file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>speakcz</code>: Reads text aloud using czech pronunciation</p>
|
||
</li>
|
||
<li>
|
||
<p><code>tapein</code>: Mounts a .TAP file so that it can be used then from BASIC using LOAD sentence</p>
|
||
</li>
|
||
<li>
|
||
<p><code>tapeout</code>: Mount a .TAP file so that it can be used then from BASIC using SAVE sentence</p>
|
||
</li>
|
||
<li>
|
||
<p><code>vdisk</code>: Mount a .TRD disk file to use with the TR-DOS environment (once all the drives have been mounted, you can enter TR-DOS emulation by typing: <code>RANDOMIZE USR 15616</code>)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some BASIC extended commands are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>GO TO</code> to change the current drive and/or directory (e.g.: <code>GO TO hd1</code> or <code>GO TO hd0"games"</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>CAT</code> to show the content of a drive</p>
|
||
</li>
|
||
<li>
|
||
<p><code>LOAD</code> to lad a file from a drive (BASIC Program, SCREEN, CODE, etc. for example <code>LOAD *"Screen.scr" SCREEN$</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>SAVE</code> to save data in a file (e.g: <code>SAVE *"Program.bas"</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>ERASE</code> to delete a file</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In addition, esxdos also has an NMI manager, an application that loads when NMI (<code>F5</code> or <code>Caps Shift+Symbol Shift+5</code> on gomaDOS+) is pressed, and lets you browse the microSD card and load easily files (TAP, Z80, TRD, etc.). Pressing the "H" key invokes a help screen, which shows all the available keys.</p>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>The esxdos manager shows file and directory entries in the order stored in the internal FAT table, and not alphabetically. If you want to see them ordered, yo have to reorder the microSD card structure with a utility like Fat Sorter for Windows, <a href="https://fatsort.sourceforge.io/">FATsort</a> for Linux and MacOS, <a href="https://www.luisrios.eti.br/public/en_us/projects/yafs/">YAFS</a>, <a href="http://www.trustfm.net/software/utilities/SDSorter.phpp">SDSorter</a> or other.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_zxdos_commands">ZXDOS+ Commands</h4>
|
||
<div class="paragraph">
|
||
<p>As explained in the installation part, there are a series of commands that are exclusive to ZXDOS+:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>back16m</code>: Dumps to a <code>FLASH.ZX1</code> file, in the root directory of the SD card, the contents of a 16 Meg SPI Flash memory. It must be run while using a "root" mode ROM. After finishing, it is necessary to execute the command <code>.ls</code> so that the cache is written to the card</p>
|
||
</li>
|
||
<li>
|
||
<p><code>backzx2</code> or <code>backzxd</code>: Creates a <code>FLASH.ZX2</code> o <code>FLASH.ZXD</code> file, in the root directory of the SD card, with the contents of a 32 Meg SPI Flash memory. It must be run while using a "root" mode ROM.After finishing its execution, you must execute the command <code>.ls</code> to finish recording the cache on the microSD card. If not, the length of the file will be wrongly set to 0</p>
|
||
</li>
|
||
<li>
|
||
<p><code>corebios</code>: To upddate simultaneously ZX Spectrum core and BIOS</p>
|
||
</li>
|
||
<li>
|
||
<p><code>dmaplayw</code>: Plays .WAV file, which has to be 8 bits, unsigned y mand sampled at 15625 Hz</p>
|
||
</li>
|
||
<li>
|
||
<p><code>esprst</code>: Resets the WiFi ESP8266(ESP-12) module</p>
|
||
</li>
|
||
<li>
|
||
<p><code>iwconfig</code>: To configure the WiFi module</p>
|
||
</li>
|
||
<li>
|
||
<p><code>joyconf</code>: Configuration and tests for keyboard and DB joysticks</p>
|
||
</li>
|
||
<li>
|
||
<p><code>keymap</code>: Used to load a different keyboard map definition</p>
|
||
</li>
|
||
<li>
|
||
<p><code>loadpzx</code>: To load a .PZX tape file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>playmid</code>: Plays .MID music files using the MIDI addon</p>
|
||
</li>
|
||
<li>
|
||
<p><code>playrmov</code>: Plays <a href="#_making_rdm_radastan_movie_files">radastanian format video files <code>.RDM</code>)</a>. This command does not work on 48K mode.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>romsback</code>: Dumps to a RomPack File named <code>ROMS.ZX1</code>, in the root directory of the microSD card, all ZX Spectrum core ROMS which are stored in SPI flash memory. It must be run while using a "root" mode ROM. Only works correctly on ZX-Uno and ZXDOS (do not use on ZXDOS+ or gomaDOS+).</p>
|
||
</li>
|
||
<li>
|
||
<p><code>romsupgr</code>: Load from a RomPack filel named <code>ROMS.ZX1</code>, in the root directory of the microSD card, all ZX Spectrum core ROMS into SPI flash memory. It must be run while using a "root" mode ROM</p>
|
||
</li>
|
||
<li>
|
||
<p><code>upgr16m</code>: Load the content of a <code>FLASH.ZX1</code> file, in the root directory of the microSD card, to a 16 Meg SPI Flash memory. It must be run while using a "root" mode ROM</p>
|
||
</li>
|
||
<li>
|
||
<p><code>upgrzx2</code> or <code>upgrzxd</code>: Write the content of a <code>FLASH.ZX2</code> o <code>FLASH.ZXD</code> file, in the root directory of the microSD card, to a 32 Meg SPI Flash memory. It must be run while using a "root" mode ROM.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>zxuc</code>: Utility to configure al options of BIOS, which also can be stored in the microSD in configuration files that can be loaded later</p>
|
||
</li>
|
||
<li>
|
||
<p><code>zxunocfg</code>: Configuration utillity for certain features of ZX-Uno such as timings, contention, keyboard type, CPU speed, video type or vertical frequency</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_wi_fi">Wi-Fi</h3>
|
||
<div class="paragraph">
|
||
<p>Each gomaDOS+, and some models of ZXDOS+, include inside an ESP-12 module with an <a href="https://es.wikipedia.org/wiki/ESP8266">ESP8266</a> Wi-Fi chip, that can be easily used with a ZX Spectrum core (e.g., EXP27 160820 core) which has synthesized an <a href="https://es.wikipedia.org/wiki/Universal_Asynchronous_Receiver-Transmitter">UART</a> device, that allows communication with the module.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>There are two "DOT" commands for configuring software access to the module. Then can be downloaded from <a href="https://github.com/zxdos/zxuno/tree/master/utils">GitHub official repository</a>:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>esprst</code>, which restarts the module</p>
|
||
</li>
|
||
<li>
|
||
<p><code>iwconfig</code>, to register the Wi-Fi network name (SSID) and password, keeping them in the file <code>/sys/config/iw.cfg</code>.</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For example:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">.iwconfig mywifi mypassword</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_network_tools_for_zx_uno_pack">Network tools for ZX-Uno pack</h4>
|
||
<div class="paragraph">
|
||
<p>These are programs, developed by Nihirash and that are available to <a href="https://nihirash.net/network-tools-for-zx-uno-pack/">download</a> <a href="https://nihirash.net/ugophy-1-0-and-nettools-for-zx-spectrum/#more-71">from his web</a>.</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>netman</code>: Utility to configure the ESP Wi-Fi chip for other programs from Nihirash. Does not work in 48K mode</p>
|
||
</li>
|
||
<li>
|
||
<p><code>uGophy</code>: <a href="https://es.wikipedia.org/wiki/Gopher">Gopher</a> client. Does not work in 48K mode</p>
|
||
</li>
|
||
<li>
|
||
<p><code>irc</code>: <a href="https://en.wikipedia.org/wiki/Internet_Relay_Chat">Internet Relay Chat</a> client. Works better at 14 Mhz</p>
|
||
</li>
|
||
<li>
|
||
<p><code>wget</code>: Utility to download files with HTTP (does not work with HTTPS)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>platoUNO</code>: <a href="https://es.wikipedia.org/wiki/Programmed_Logic_Automated_Teaching_Operations">PLATO</a> client. Also works better at 14 Mhz. For more information about PLATO, check <a href="https://www.irata.online/#about">IRATA.ONLINE</a> web</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_ftp_uno">FTP-Uno</h4>
|
||
<div class="paragraph">
|
||
<p>FTP cliente developed by Yombo, available <a href="https://github.com/yomboprime/FTP_Uno">at GitHub</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Configuration steps:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Edit <code>FTP.CFG</code> file with all the required information (SSID and password, FTP server, etc.)</p>
|
||
</li>
|
||
<li>
|
||
<p>Copy <code>FTP.CFG</code> inside <code>/SYS/CONFIG/</code> in microSD card</p>
|
||
</li>
|
||
<li>
|
||
<p>Also copy <code>ftpUno.tap</code> to any place in the card</p>
|
||
</li>
|
||
<li>
|
||
<p>Start up ZXDOS+ y load the tape file <code>ftpUno.tap</code></p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_uart_terminal">UART Terminal</h4>
|
||
<div class="paragraph">
|
||
<p>Program example included with <a href="https://github.com/yomboprime/ZXYLib">ZXYLib</a> C library, developed by yombo, that let’s you send directly typed characters using the UART, and also see the result. Available to download <a href="https://github.com/yomboprime/ZXYLib/raw/master/UARTTERM.tap">at this link</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Once the file <code>UARTTERM.tap</code> is in the card and loaded, you can type several specific commands for ESP8266 chip. For example:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>AT</code>. To check if ther is communication. <code>OK</code> would be the result if everything is fine</p>
|
||
</li>
|
||
<li>
|
||
<p><code>AT+RST</code>. To restart the chip. Exactly what <a href="#_wi_fi"><code>esprst</code></a> command does</p>
|
||
</li>
|
||
<li>
|
||
<p><code>AT+GMR</code>. To see some information, like firmware version, etc.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>AT+CWMODE_CUR=1</code>. Put temporarily the chip into Wi-Fi client mode, until next restart</p>
|
||
</li>
|
||
<li>
|
||
<p><code>AT+CWMODE_DEF=1</code>. Put temporarily the chip into Wi-Fi client mode, and save it as default</p>
|
||
</li>
|
||
<li>
|
||
<p><code>AT+CWJAP_CUR="<WiFiNetwork>","<WiFiPassword>"</code>, where <code><WiFiNetwork></code> Wi-Fi ID of the network to connect to, and <code><WiFiPassword></code> the access password, connects temporarily to that network</p>
|
||
</li>
|
||
<li>
|
||
<p><code>AT+CWJAP_DEF="<WiFiNetwork>","<WiFiPassword>"</code>, connects to the network, and saves the settings as default in the chip flash memory</p>
|
||
</li>
|
||
<li>
|
||
<p><code>AT+CWAUTOCONN=1</code> sets the chip to connect automatically on boot to the default network (<code>AT+CWAUTOCONN=0</code> disables it)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can see all the available commands reading the <a href="https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf">official documentation</a>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_making_rdm_radastan_movie_files">Making RDM (RaDastan Movie) files</h3>
|
||
<div class="paragraph">
|
||
<p>The <code>PLAYRMOV</code> "DOT" command plays radastanian format video files. To convert your own videos, you need <code>makevideoradas</code>, a utility that is available at <a href="http://svn.zxuno.com/svn/zxuno/software/modo_radastan/videos_radastanianos/">SVN repository</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If using Windows, there is already an executable file (<code>makevideoras.exe</code>). For Linux or MacOS, you must have installed command line developer utilities in order to compile an executable</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">gcc makevideoradas.c <span class="nt">-o</span> makevideoradas</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Apart from <code>makevdideoradas</code>, you need another two tools: <a href="https://ffmpeg.org"><code>ffmpeg</code></a> and <a href="https://imagemagick.org/index.php"><code>imagemagick</code></a>. These can be installed with a package manager (<code>apt</code>, <code>yum</code>, <code>pacmam</code>, <code>brew</code>, etc.) or downloading the source code and compiling.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Now, the first step to convert our video (for example <code>myvideo.mp4</code>), is exporting the frames as 128x96 pixel BMP image files. We create a temporary file (<code>img</code> for this example), to store them.</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="nb">mkdir </span>img
|
||
<span class="o">(</span>...<span class="o">)</span>/ffmpeg <span class="nt">-i</span> myvideo.mp4 <span class="nt">-vf</span> <span class="s2">"scale=128:96,fps=25"</span> <span class="nt">-start_number</span> 0 img/output%05d.bmp</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Now we transform the <code>BMP</code> files to 16 colours (v3) <code>BMP</code> files.</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="o">(</span>...<span class="o">)</span>/magick mogrify <span class="nt">-colors</span> 16 <span class="nt">-format</span> bmp <span class="nt">-define</span> bmp:format<span class="o">=</span>bmp3 img/<span class="k">*</span>.bmp</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Finally, we assemble the <code>.RDM</code> file (in this example <code>myvideo.rdm</code>) and cleanup the temporary files and directory.</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="o">(</span>...<span class="o">)</span>/makevideoradas img/output
|
||
<span class="nb">mv </span>img/output.rdm ../myvideo.rdm
|
||
<span class="nb">rm</span> <span class="nt">-rf</span> img</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>There is more information about all this process at <a href="https://www.zonadepruebas.com/viewtopic.php?t=4796&start=110">this thread in Zona de Pruebas forums</a>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_upgrade_2">Upgrade</h2>
|
||
<div class="sectionbody">
|
||
<div class="sect2">
|
||
<h3 id="_bios_2">BIOS</h3>
|
||
<div class="paragraph">
|
||
<p>To update the BIOS, a file named <code>FIRMWARE.ZX2</code> (for a ZXDOS+ with an FPGA LX16 board) or <code>FIRMWARE.ZXD</code> (for a ZXDOS+ with an FPGA LX25 board) must be obtained. The latest version of the firmware files can be downloaded from <a href="https://github.com/zxdos/zxuno/tree/master/firmware">the official repository</a></p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Updating the firmware (BIOS) is delicate. It should not be done if it is not necessary. If doing so, ensure that the ZXDOS+ has uninterrupted power (such as a UPS or a laptop USB with battery).</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy the file to the root of the MicroSD card, turn on and press <code>F2</code> to enter BIOS, select <code>Upgrade</code>, choose <em>"Upgrade BIOS for ZX"</em>, and then <em>"SDfile"</em>. The system will read the file <code>FIRMWARE…​</code> and notify when finished.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_roms_3">ROMs</h3>
|
||
<div class="paragraph">
|
||
<p>The flash memory of a ZXDOS+ has reserved 64 slots, 16K each, to store ZX Spectrum ROM images. Thus, an original ZX Spectrum ROM (16K) will take one slot, a ZX Spectrum 128K ROM (32K) will be two slots, and a ZX Spectrum +2A ROM (64K) will need 4 slots.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can add a new ROM pressing the key <code>N</code> at the BIOS <a href="#_roms">ROMs screen</a>, connecting an audio cable to the board, and playing a ROM audio tape. ROM audio tapes can be made from a <code>.tap</code> file built with the <code>GenRom</code> utility, available at <a href="https://github.com/zxdos/zxuno/tree/master/modflash">ZX-Uno Code Repository</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To update at once all the ROMs installed for ZX Spectrum, a RomPack file named <code>ROMS.ZX1</code> must be obtained, which must be copied to the MicroSD card. Boot the ZXDOS+ using a "rooted" ROM, and then just enter the command <code>.romsupgr</code>. This will burn all the ROMs, which will be available for use.</p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>At this moment, <code>romsupgr</code>, only works correctly with RomPack files using a maximum of 35 slots.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Remember that if the ZXDOS+ is started by pressing the <code>/</code> key (on the numeric keyboard, <code>Symbol Shift+V</code> in gomaDOS+), then the default ROM of the ZX Spectrum core will be loaded in" root "mode.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To do the opposite process (save the ROMs in a RomPack file named <code>ROMS.ZX1</code>), you can use the` .romsback` command.</p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>At this moment, <code>romsback</code>, only stores correctly the first 35 used slots.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>RomPack files can be easily edited with the http: // guest: <a href="mailto:zxuno@svn.zxuno">zxuno@svn.zxuno</a>.comsvn/zxuno/software/ZX1RomPack/[ZX1RomPack] utility. Although it is a Windows program, it works perfectly, for example using <a href="https://www.winehq.org">Wine</a> or similar programs, either on MacOS or Linux.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_cores">Cores</h3>
|
||
<div class="paragraph">
|
||
<p>There are a number of available spaces where you can store cores (the number depends on the size of the SPI Flash of the ZXDOS+ model), the first space being reserved for the main ZX Spectrum (this does not prevent having more ZX Spectrum cores in other space as well of the first).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Official cores are <a href="https://github.com/zxdos/zxdos-plus/tree/master/cores">available to download</a> from GitHub repository.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To update or install a new core there are several possibilities.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The easiest way is to obtain the latest version of the file that defines the core, which will be a file that must be named <code>COREnn.ZX2</code> (for a ZXDOS + with an FPGA LX16 board) or <code>COREnn.ZXD</code> (for a ZXDOS + with an LX25 board), where <code>nn</code> is the slot number where to install (for example <code>CORE2.ZX2</code> or <code>CORE2.ZXD</code> for slot 2).</p>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Starting with BIOS version 0.80, files are named using the <code>COREXXy.ZXn</code> convention where XX <em>always</em> is a two-digit number. Thus, an old <code>CORE4.ZXD</code> file has to be renamed as <code>CORE04.ZXD</code>. The <code>y</code> part of the name is ignored, so longer and more descriptive names can be used (such as <code>CORE04_example.ZXD</code>).</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy the file to the root of the microSD card, turn on and press <code>F2</code> to enter BIOS. Choose <code>Upgrade</code>, select the row corresponding to the chosen core number (for example, 2 - just after Spectrum), press enter and then <em>" SD file "</em>. The system will read the file <code>COREnn ..</code> and warn when it is updated, although first it will ask for the name (to be shown in the list to choose from at startup and in the BIOS list).</p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>The ZX Spectrum core update is exactly the same as other cores, but instead of the name <code>CORE1.ZX2</code> or <code>CORE1.ZXD</code>, it has to be a file named <code>SPECTRUM.ZX2</code> or <code>SPECTRUM.ZXD</code>.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_esxdos_3">esxdos</h3>
|
||
<div class="paragraph">
|
||
<p>To update esxdos to a new version, the distribution must be obtained from <a href="http://www.esxdos.org">the official website</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Once downloaded and extracted, the contents of <code>BIN</code> and <code>SYS</code> directories have to be copied to the root of the card, merging the existing ones (to preserve the exclusive ZXDOS+ commands).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy <code>ESXMMC.BIN</code> (or <code>ESXMMC.ROM</code>, depending on version) to the root of the microSD card.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Start ZXDOS + with the card inserted and press <code>F2</code> to access BIOS setup. Select the <code>Upgrade</code> menu and choose <em>"Upgrade esxdos for ZX"</em>. In the dialog that appears choose <em>"SD file"</em> and, when it asks <em>"Load from SD"</em> answer <em>"Yes"</em> to the question <em>"Are you sure?"</em>. The content of the file <code>ESXDOS…​</code> will be read, written to the flash storage and you will be notified when it is updated.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Do a Hard-reset, or turn it off and on.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If everything has been done correctly, when you turn on the ZXDOS+ you will see how esxdos detects the card and loads the necessary components to work, showing the new version at the top.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_flash_memory">Flash Memory</h3>
|
||
<div class="paragraph">
|
||
<p>You also can update all the FPGA flash memory. At this moment, from the BIOS you can only use 16MiB image files. To use a 32MiB image, you must use <a href="#_esxdos">esxdos</a> <code>UPGRZX2</code> or <code>UPGRZXD</code> command and a file named <code>FLASH.ZX2</code> or <code>FLASH.ZXD</code>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy the image file (16MiB) <code>FLASH.ZXD</code> to the root of the microSD card.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Turn on the ZXDOS+ and press the <code>F2</code> key (<code>Caps Shift+1</code> on gomaDOS+) during boot to access the BIOS setup. Select the menu <code>Upgrade</code> and then choos the option <em>"Upgrade flash from SD"</em>. Press Enter, choose <code>Yes</code>, and press Enter again to start the Flash writing process.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Do a Hard-Reset or turn of and on again.</p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>This process can’t be undone, and it will replace all the previously installed cores, the BIOS, the ZX Spectrum ROMs and their configuration with the data in the image file.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_other_cores">Other cores</h2>
|
||
<div class="sectionbody">
|
||
<div class="sect2">
|
||
<h3 id="_zx_spectrum_48k_kyp">ZX Spectrum 48K (Kyp)</h3>
|
||
<div class="paragraph">
|
||
<p><a href="https://github.com/Kyp069/zx48.zxdosplus/releases/">Alternative core</a>, whose objective is to be the most accurate implementation in timings, memory contention, etc.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Main features:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Only working on RGB (no VGA)</p>
|
||
</li>
|
||
<li>
|
||
<p>Specdrum</p>
|
||
</li>
|
||
<li>
|
||
<p>Turbosound (two AY chips) with mix selection ACB/ABC</p>
|
||
</li>
|
||
<li>
|
||
<p>DivMMC with esxdos 0.8.8</p>
|
||
</li>
|
||
<li>
|
||
<p>Kempston joystick in port 1</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You need a microSD card with the first partition formatted as FAT16 or FAT32, and inside, the standard esxDOS 0.8.8 (see <a href="#_esxdos">esxdos corresponding section</a> for more info).</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_2">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_2">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>While the core is running:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Esc</code> (<code>Caps Shift+Space</code> on gomaDOS+): BREAK</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F5</code> (<code>Caps Shift+Symbol Shift+5</code> on gomaDOS+): NMI</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F8</code> (<code>Caps Shift+Symbol Shift+8</code> on gomaDOS+): Change Turbosound mixer configuration between ACB and ABC.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Backspace</code> (<code>Caps Shift+Symbol Shift+B</code> on gomaDOS+) or <code>F11</code> (<code>Caps Shift+Symbol Shift+Q</code> on gomaDOS+): Hard reset. Backspace is the delete key, located in the top-right portion of the keyboard, above <code>Enter</code>.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Supr</code> (<code>Caps Shift+Symbol Shift+N</code> on gomaDOS+) or <code>F12</code> (<code>Caps Shift+Symbol Shift+W</code> on gomaDOS+): Soft reset.</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_zx_spectrum_next">ZX Spectrum Next</h3>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.specnext.com">ZX Spectrum Next</a> is an FPGA based project, which wants to be the evolution of the Sinclair ZX Spectrum line of computers. It brings new features while keeping hardware and software compatibility with previous ZX Spectrum computers.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Specially thanks to avlixa, there exists a ZX Spectrum Next core synthesized for ZXDOS+.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The core, for the moment does not have any of these features:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Raspberry Pi</p>
|
||
</li>
|
||
<li>
|
||
<p>Internal beeper</p>
|
||
</li>
|
||
<li>
|
||
<p>EDGE expansion Connector</p>
|
||
</li>
|
||
<li>
|
||
<p>RTC module</p>
|
||
</li>
|
||
<li>
|
||
<p>Membrane keyboard</p>
|
||
</li>
|
||
<li>
|
||
<p>Flashing additional cores or upgrading the Next core from within the Next core</p>
|
||
</li>
|
||
<li>
|
||
<p>MIC out</p>
|
||
</li>
|
||
<li>
|
||
<p>HDMI Video</p>
|
||
</li>
|
||
<li>
|
||
<p>UART communication using the joystick port</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The user manual is available to download at <a href="https://www.specnext.com/zx-spectrum-next-user-manual-first-edition/">the official web page</a>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format_2">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You have to use a microSD card with the first partition formatted as FAT16 or FAT32, and inside, the standard esxDOS distribution, matching ZXDOS+ BIOS version (see <a href="#_esxdos">esxdos corresponding section</a> for more info).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Download NextZXOS distribution <a href="https://www.specnext.com/latestdistro/">from the official page</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Extract NextZXOS in the root of the microSD card, and then edit <code>config.ini</code> under <code>c:/machines/next</code> to include the line <code>ps2=0</code> if it doesn’t exist or edit the existing line from 1 to 0. This effectively switches the dual PS/2 port to keyboard first as the Next Firmware (TBBLUE.FW) switches the primary input to mouse. Also edit the line <code>intbeep=0</code> to disable the internal beeper (this last step is not necesary on gomaDOS+).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If it wasn’t already, <a href="#_cores">install ZX Spectrum Next core</a> into ZXDOS+.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_3">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_3">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>The following gomaDOS+ key combinations are in <code>ZX</code> keyboard mode. Please check <a href="#_gomados_keyboard_modes">the corresponding section</a> for more information. You can also use <code>PC XT</code> keyboard mode combinations .</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Take into account that <code>Ctrl+Alt+backspace</code> does not work with the ZX Spectrum Next core. You have to power cycle if you want to use another core. Also, there is no Reset or Drive button.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>While the core is running:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>F1</code> (<code>Caps Shift+Symbol Shift+1</code> on gomaDOS+): Hard Reset</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F2</code> (<code>Caps Shift+Symbol Shift+2</code> on gomaDOS+): Scandoubler. Doubles the resolution. Should be of for SCART</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F3</code> (<code>Caps Shift+Symbol Shift+3</code> on gomaDOS+): Change vertical frequency between 50Hz and 60Hz</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F4</code> (<code>Caps Shift+Symbol Shift+4</code> on gomaDOS+): Soft Reset</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F7</code> (<code>Caps Shift+Symbol Shift+7</code> on gomaDOS+): Scanlines</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F9</code> (<code>Caps Shift+Symbol Shift+9</code> on gomaDOS+): NMI</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F10</code> (<code>Caps Shift+Symbol Shift+0</code> on gomaDOS+): divMMC NMI. Simulates Drive button. If used with Caps Shift it forces a rescan of drives and a reload of the boot screen under esxDOS</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_2">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>On first boot, some help screens will show up. After pressing <code>Space</code> key, NextZXOS Startup Menu appears.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/next.png" alt="next"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can navigate the menu with the cursor keys, <code>5</code>, <code>6</code>, <code>7</code> and <code>8</code> keys, or a joystick (if configured as Kempston, MD or cursor). <code>Enter</code> or the joystick button chooses one element.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><code>More…​</code> shows a second menu with more options.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/next2.png" alt="next2"></span></p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>If you choose <code>Browser</code>, NextZXOS Browser will start, and then you can see the contents of the microSD card and load a file (TAP, NEX, DSK, SNA, SNX, Z80, Z8, etc.).</p>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>The browser shows file and directory entries in the order stored in the internal FAT table, and not alphabetically. If you want to see them ordered, yo have to reorder the microSD card structure with a utility like Fat Sorter for Windows, <a href="https://fatsort.sourceforge.io/">FATsort</a> for Linux and MacOS, <a href="https://www.luisrios.eti.br/public/en_us/projects/yafs/">YAFS</a>, <a href="http://www.trustfm.net/software/utilities/SDSorter.phpp">SDSorter</a> or other.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/next3.png" alt="next3"></span></p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>At the time of writing, the ZX Spectrum Next core for ZXDOS+ does not support the use of a Raspberry Pi-based accelerator, so it is not possible to load TZX files.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>It is not possible to load TRD files directly from the Browser (NextZXOS must be configured to load a "personality" with esxdos).</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For more information, see the <a href="https://www.specnext.com/zx-spectrum-next-user-manual-first-edition/">official user manual</a>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_msx">MSX</h3>
|
||
<div class="paragraph">
|
||
<p>MSX1FPGA is a project to clone MSX1 in FPGA. The original development is by Fabio Belavenuto and is available <a href="https://github.com/fbelavenuto/msx1fpga">at GitHub</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some of its features are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>MSX1 at 50Hz or 60Hz</p>
|
||
</li>
|
||
<li>
|
||
<p>128K Nextor (MSX-DOS2 evolution) ROM with SD driver</p>
|
||
</li>
|
||
<li>
|
||
<p>Reconfigurable keyboard map</p>
|
||
</li>
|
||
<li>
|
||
<p>Scanlines</p>
|
||
</li>
|
||
<li>
|
||
<p>Joystick support</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_format">microSD format</h4>
|
||
<div class="paragraph">
|
||
<p>You have to use a microSD card with the first partition in FAT16 format with <a href="https://en.wikipedia.org/wiki/Partition_type">code <code>0x06</code> (16-bit FAT)</a>. You can also use a second FAT16 partition for MSX software, and leaving the first one only for the system startup.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You need to get:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Basic SD project files SD <a href="https://github.com/fbelavenuto/msx1fpga/tree/master/Support/SD">from GitHub</a></p>
|
||
</li>
|
||
<li>
|
||
<p>Nextor driver (<code>NEXTOR.SYS</code>) and ROM (<code>NEXTOR.ROM</code>) <a href="https://github.com/fbelavenuto/msx1fpga/tree/master/Software/nextor">also from GitHub</a></p>
|
||
</li>
|
||
<li>
|
||
<p>MSX1 ROM (<code>MSX_INT.rom</code>, <code>MSX_JP.rom</code> or <code>MSX_USA.rom</code>) <a href="https://github.com/fbelavenuto/msx1fpga/tree/master/Software/msx1">at the same repository</a></p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy the contents of the <a href="https://github.com/fbelavenuto/msx1fpga/tree/master/Support/SD">SD directory</a> in the root of the first partition of the microSD.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy <code>NEXTOR.SYS</code> to the same place.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy <code>NEXTOR.ROM</code> inside the <code>MSX1FPGA</code> directory.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy one MSX1 ROM (<code>MSX_INT.rom</code>, <code>MSX_JP.rom</code> or <code>MSX_USA.rom</code>) inside the <code>MSX1FPGA</code> directory, but renaming it to <code>MSX1BIOS.ROM</code>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The file <code>/MSX1FPGA/config.txt</code> keeps the core configuration, using this format:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre>11SP01
|
||
||||||
|
||
|||||+-Scanlines: 1=Enabled, 0=Disabled
|
||
||||+--Turbo: 1=Initialize with turbo enabled
|
||
|||+---Colour System: N=NTSC, P=PAL
|
||
||+----Keymap: E=English, B=Brazilian, F=Francese, S=Spanish, J=Japanese
|
||
|+-----Scandoubler(VGA): 1=Enabled, 0=Disabled
|
||
+------Nextor: 1=Enabled, 0=Disabled</pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If it wasn’t already, <a href="#_cores">install MSX core</a> into ZXDOS+.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_4">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_4">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>The following gomaDOS+ key combinations are in <code>MSX</code> keyboard mode. Please check <a href="#_gomados_keyboard_modes">the corresponding section</a> for more information. You can also use <code>PC XT</code> keyboard mode combinations .</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>While running the core:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Print Scr</code>: Changes between VGA and RGB mode</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): Enables or disables scanlines</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Pause</code>: Changes between 50Hz and 60Hz</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F11</code> (<code>Caps Shift+Symbol Shift+Q</code> on gomaDOS+): Enables and disables turbo mode</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Supr</code>: Soft Reset</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+F12</code>: Hard Reset</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Backspace</code> (<code>Caps Shift+Symbol Shift+B</code> on gomaDOS+, <code>ZX Spectrum</code> keyboard mode): Restarts the FPGA</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Left ALT</code>: MSX GRAPH</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Right ALT</code>: MSX CODE</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Page Up</code>: MSX SELECT</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Start</code>: MSX HOME (<code>Shift+HOME</code>: CLS)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>End</code>: MSX STOP</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ñ</code> or <code>Windows</code>: MSX DEAD</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>In BASIC use <code>CTRL+STOP</code> (<code>Ctrl+End</code>) keys to stop the execution of a program.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>To change the video mode between 50Hz and 60Hz (and thus play at correct speed PAL games), you can use also use <code>DISPLAY.COM</code>, which can be downloaded <a href="https://www.msx.org/forum/msx-talk/software/dos-tool-to-switch-from-50-to-60hz">here</a>.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_3">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>To go to BASIC from MSX-DOS you must execute <code>BASIC</code> command.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>From within BASIC, you can load from a external tape (or <a href="#_miniduino">other external audio device</a>) with the commansds <code>RUN"CAS:"</code>, <code>BLOAD"CAS:",R</code> or <code>CLOAD</code>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Para acceder a MSX-DOS desde BASIC, ejecutar <code>CALL SYSTEM</code>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To go to MSX-DOS from BASIC, execute <code>CALL SYSTEM</code>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="sect4">
|
||
<h5 id="_msxctrl">MSXCTRL</h5>
|
||
<div class="paragraph">
|
||
<p>An exclusive utility of MSX1FPGA core, which lets you control all the core options that were previously available only by editing the configuration file or with some key combination.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>When running <code>MSXCTRL</code> all the use parameters are shown:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre>MSXCTRL.COM - Utility to manipulate MSX1FPGA core.
|
||
HW ID = 06 - ZX-Uno Board
|
||
Version 1.3
|
||
Mem config = 82
|
||
Has HWDS = FALSE
|
||
|
||
Use:
|
||
|
||
MSXCTRL -h -i -r -b -[5|6] -m<0-2>
|
||
-c<0-1> -d<0-1> -t<0-1>
|
||
[-w<filename> | -l<filename>]
|
||
-k<0-255> -e<0-255> -p<0-255>
|
||
-s<0-255> -o<0-255> -a<0-255></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><code>MSXCTRL -h</code> show help for a parameter. For example, <code>MSXCTRL -i</code> show the current configuration, <code>-t 1</code> sets turbo mode on, etc.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_other">Other</h5>
|
||
<div class="paragraph">
|
||
<p>There are different ways to load games depending on the kind of file: .CAS, .DSK o ROM (see <a href="http://www.zxuno.com/forum/viewtopic.php?f=53&t=2080">this ZX-Uno forums thread</a> for more info).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The spanish keymap officially available can be replaced with a better one. See <a href="http://www.zxuno.com/forum/viewtopic.php?f=53&t=2897">here</a> for more information.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_amstrad_cpc">Amstrad CPC</h3>
|
||
<div class="paragraph">
|
||
<p>ZXDOS+ Amstrad CPC core is based on the <a href="http://www.cpcwiki.eu/index.php/FPGAmstrad">FPGAmstrad</a> project by Renaud Hélias.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some of its features are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>VGA: 640x480 VGA centered at 60Hz</p>
|
||
</li>
|
||
<li>
|
||
<p>Disk selection: The first disk image detected is inserted on startup, and pressing a key makes a reset and loads the next one</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format_3">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You have to use a microSD card with the first partition in FAT32 format, with a maximum of 4GB in size, and 4096 bytes per cluster.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You also need the following ROM files (they are available <a href="http://www.cpcwiki.eu/index.php/FPGAmstrad#How_to_assemble_it">at the original project Wiki</a>) or from the <a href="https://github.com/renaudhelias/FPGAmstrad/raw/master/OS6128_BASIC1-1_AMSDOS_MAXAM.zip">GitHub repository</a>:
|
||
- <code>OS6128.ROM</code>
|
||
- <code>BASIC1-1.ROM</code>
|
||
- <code>AMSDOS.ROM</code>
|
||
- <code>MAXAM.ROM</code></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>It is also recommended to copy one or more disk image files (<code>DSK</code>) with the software that you want to run.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy all <code>ROM</code> and <code>DSK</code> files to the root directory of the FAT32 partition.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_5">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_5">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>The following gomaDOS+ key combinations are in <code>Amstrad CPC</code> keyboard mode. Please check <a href="#_gomados_keyboard_modes">the corresponding section</a> for more information. You can also use <code>PC XT</code> keyboard mode combinations.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>During core execution:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Page Up</code> (<code>Caps Shift+Symbol Shift+E</code> on gomaDOS+): Reset the Amstrad computer and load the next <code>DSK</code> file alphabetically</p>
|
||
</li>
|
||
<li>
|
||
<p>On a PS/2 keyboard, only the left shift key works properly</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_4">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>Use the <code>CAT</code> command to see the contents of the currently loaded DSK file.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/cpc.png" alt="cpc"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Type the command <code>RUN"<name></code> to load a program from disk</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/cpc2.png" alt="cpc2"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Press <code>Page Up</code> key to reset and load the next <code>DSK</code> file.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_acorn_atom">Acorn Atom</h3>
|
||
<div class="paragraph">
|
||
<p><a href="https://es.wikipedia.org/wiki/Acorn_Atom">Acorn Atom</a> was a home computer made by Acorn Computers Ltd. The ZXDOS+ core (based on the ZX-Uno core made by Quest) is an adaptation of the <a href="https://github.com/hoglet67/AtomFpga">AtomFPGA</a> project. You can get more information at <a href="http://zxuno.com/forum/viewtopic.php?f=16&t=4">ZX-Uno Forums</a>.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format_4">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You have to use a microSD card with the first partition in FAT16 format.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Download the latest version of Atom Software Archive <a href="https://github.com/hoglet67/AtomSoftwareArchive/releases/latest">from GitHub</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can set up the files in the microSD in two different ways:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Extract all the contents of the archive to the root of the SD card. <code>SYS</code> directory contents are compatible with esxdos <code>SYS</code> directory, so you can merge both into one.</p>
|
||
</li>
|
||
<li>
|
||
<p>Have less files an directorios in the root directory. Create a directory named <code>ATOM</code> in the SD root, and copy inside all the uncompressed archive content, except for the directory <code>MANPAGES</code> which must also be in root. Then, extract and the files from <code>trick_ATOM_folder</code> archive (available <a href="http://www.zxuno.com/forum/viewtopic.php?f=16&t=4006">at ZX-Uno Forum</a>), replacing any file with the same name. You will get a file and directory structure like this:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre> /
|
||
+-ATOM/
|
||
| +-AA/
|
||
| (...)
|
||
| +-AGD/
|
||
| | +-SHOW2
|
||
| | +-SHOW3
|
||
| (...)
|
||
| +-MENU
|
||
| (...)
|
||
| +-TUBE/
|
||
| | +-BOOT6502
|
||
| (..)
|
||
|
|
||
+-MANPAGES/
|
||
| +-CPM.MAN
|
||
| +-FLEX.MAN
|
||
| (...)
|
||
|
|
||
+-MENU</pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_6">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_6">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>The following gomaDOS+ key combinations are in <code>Acorn Electron</code> keyboard mode. Please check <a href="#_gomados_keyboard_modes">the corresponding section</a> for more information. You can also use <code>PC XT</code> keyboard mode combinations.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>While the core is running:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Shift+F10</code>: Shows Atom Software Archive Menu</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F10</code> (<code>Caps Shift+Symbol Shift+0</code> on gomaDOS+): Soft Reset</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F1</code> (<code>Caps Shift+Symbol Shift+1</code> on gomaDOS+): Turbo mode 1Mhz</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F2</code> (<code>Caps Shift+Symbol Shift+2</code> on gomaDOS+): Turbo mode 2Mhz</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F3</code> (<code>Caps Shift+Symbol Shift+3</code> on gomaDOS+): Turbo mode 4Mhz</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F4</code> (<code>Caps Shift+Symbol Shift+4</code> on gomaDOS+): Turbo mode 8Mhz</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The keyboard uses the following mapping:</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/keyboardAtom.jpg" alt="keyboardAtom"></span></p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_5">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>Sometimes, after starting up the core, a screen full of <code>@</code> appears. Ejecting and inserting, or only inserting, the microSD card will fully start the system.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/acorn.jpg" alt="acorn"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Once it’s running, press <code>Shift+F10</code> to show a menu where you can choose and load Atom Software Archive programs from the card.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_commodore_64">Commodore 64</h3>
|
||
<div class="paragraph">
|
||
<p>The Commodore 64 (C64, CBM 64/CBM64, C=64,C-64, VIC-641​), was an <a href="https://es.wikipedia.org/wiki/Commodore_64">8-bit home computer</a> manufactured by Commodore International.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The ZXDOS+ core is developed by Neuro.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format_5">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You can use a microSD card with the first partition formatted as FAT16 or FAT32. Disk image (<code>D64</code>) and tape (<code>TAP</code>) files can be loaded from the SD card.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>See the <a href="#_cores">corresponding section</a> for instructions of how to install the Commodore 64 core in ZXDOS+.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_7">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_7">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>The following gomaDOS+ key combinations are in <code>Commodore 64</code> keyboard mode. Please check <a href="#_gomados_keyboard_modes">the corresponding section</a> for more information. You can also use <code>PC XT</code> keyboard mode combinations.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>While the core is running:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>F9</code> <code>Caps Shift+Symbol Shift+9</code> on gomaDOS+): Play/Pause a TAP file</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F12</code> (<code>Caps Shift+Symbol Shift+W</code> on gomaDOS+): Shows options menu</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): switches between VGA and RGB modes</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Esc</code> (<code>Caps Shift+Space</code> on gomaDOS+): RUN/STOP (<code>Shift+RUN/STOP</code>: Load from tape)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_6">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>After pressing <code>F12</code> (<code>Caps Shift+Symbol Shift+W</code> on gomaDOS+), the option menu is shown.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/c64.jpg" alt="c64"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The menu offers the following options</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Core reset</p>
|
||
</li>
|
||
<li>
|
||
<p>Enable o disable scanlines</p>
|
||
</li>
|
||
<li>
|
||
<p>Change colour palette (Colores Payaso MICOLOR)</p>
|
||
</li>
|
||
<li>
|
||
<p>Enable or disable PAL mode</p>
|
||
</li>
|
||
<li>
|
||
<p>Enable or disable tape loading sound (Sonido Carga Cinta)</p>
|
||
</li>
|
||
<li>
|
||
<p>Enable or disable audio filter (Filtro de Audio)</p>
|
||
</li>
|
||
<li>
|
||
<p>Load D64 file from SD (Carga D64)</p>
|
||
</li>
|
||
<li>
|
||
<p>Load TAP file (Carga Tap)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>After a disk is inserted, normally, you can use <code>LOAD "*",8,1</code> and press <code>Enter</code> to load the software inside. Once <code>READY</code> is shown on screen, type <code>RUN</code> and press <code>Enter</code> to execute it.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If there was more than one program in the disk, type <code>LOAD "$"</code> and press <code>Enter</code>. Then, type <code>LIST</code>, and press <code>Enter</code>, to see a list with the files in the disk. Now, to load one of them, type <code>LOAD "<name>",8</code> (where <code><name></code> is the name of the file to load) and press <code>Enter</code>. Once <code>READY</code> is shown on screen, type <code>RUN</code> and press <code>Enter</code> to execute it. If this didn’t work try again with the command <code>LOAD "<name>",8,1</code>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>To load from tape, Select "Carga Tap" option from the menu. Then, browse the microSD and select the TAP file to load, press <code>ENTER</code> and close the options menu. After that, type <code>LOAD</code> and press <code>Enter</code>, or press <code>Shift+Esc</code> (<code>Shift+RUN/STOP</code>). Finally, when pressing <code>F9</code> (<code>Caps Shift+Symbol Shift+9</code> on gomaDOS+) the tape file will start playing (you can enable the tape loading sound selecting "Sonido Carga Cinta" in the options menu). Once the loading finishes, type <code>RUN</code> and press <code>ENTER</code> if needed.</p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>For this core, the right joystick port is mapped to joystick port 1 and the left port is mapped to joystick port 2. This is the opposite of what happens in other cores.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_phoenix">Phoenix</h3>
|
||
<div class="paragraph">
|
||
<p>Space-Themed shooter video game released in arcades by Amstar Electronics.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some of the features of the ZXDOS+ core are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Two different video modes: RGB/PAL60Hz and VGA 60Hz</p>
|
||
</li>
|
||
<li>
|
||
<p>Scanlines on VGA mode</p>
|
||
</li>
|
||
<li>
|
||
<p>Controls can be optionally rotated 90º</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_format_2">microSD format</h4>
|
||
<div class="paragraph">
|
||
<p>This core does not use the microSD card.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_8">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_8">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>While the core is running:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Q</code> and <code>A</code> or <code>Left Cursor</code> and <code>Right Cursor</code> (or a joystick): Movement control</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Z</code> or <code>X</code> <code>Left Windows Key</code> and <code>Space</code> (or joystick buttons 1 and 2): Fire 1 and 2, also to insert coin and <code>Start</code></p>
|
||
</li>
|
||
<li>
|
||
<p><code>F2</code> (<code>Caps Shift+Symbol Shift+B</code> on gomaDOS+): Switches between VGA and RGB modes</p>
|
||
</li>
|
||
<li>
|
||
<p><code>-</code> (numeric keyboard): Enable or disable scanlines</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Tab</code> (<code>Caps Shift+Enter</code> on gomaDOS+, <code>PC XT</code> keyboard mode): Enables or disables 90º rotation of the direction of controls</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_7">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>By default, the core starts with normal controls, configured for vertical displays. If you have an horizontal display, the image will be rotated. To ease the control, and make it more natural and according to what you see, when typing <code>Tab</code>, up-down directions are switched with left-right. This is both for joystick and keyboard controls.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_pong">Pong</h3>
|
||
<div class="paragraph">
|
||
<p>Pong was <a href="https://en.wikipedia.org/wiki/Pong">one of the earliest arcade video games</a> manufactured by Atari.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some features of this core are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Two different video modes: RGB/PAL60Hz and VGA 60Hz</p>
|
||
</li>
|
||
<li>
|
||
<p>7 game variants</p>
|
||
</li>
|
||
<li>
|
||
<p>Support for 2 or 4 players</p>
|
||
</li>
|
||
<li>
|
||
<p>Support for Joysticks, keyboard, mouse and rotary encoder controls (see <a href="#_rotary_enoders">here</a> for more information)</p>
|
||
</li>
|
||
<li>
|
||
<p>Several colour modes</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_format_3">microSD format</h4>
|
||
<div class="paragraph">
|
||
<p>This core does not use the microSD card.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_9">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_9">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>While the core is running:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Esc</code> or joystick button 2 (or <code>Caps Shift+Space</code> on gomaDOS+, <code>PC XT</code> keyboard mode): Show or hide configuration menu</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Backspace</code> (<code>Caps Shift+Symbol Shift+B</code> on gomaDOS+, <code>ZX Spectrum</code> keyboard mode): Hard reset</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+, <code>ZX Spectrum</code> keyboard mode): switch between VGA and RGB mode</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F3</code> o <code>F12</code> (<code>Caps Shift+Symbol Shift+3</code> or <code>Caps Shift+Symbol Shift+W</code> on gomaDOS+): Restart game</p>
|
||
</li>
|
||
<li>
|
||
<p>Number between <code>1</code> and <code>7</code>: Change the game variant</p>
|
||
</li>
|
||
<li>
|
||
<p>Joystick 2 (right): Control right pad (Player 1).</p>
|
||
</li>
|
||
<li>
|
||
<p>Joystick 1 (left): Control left pad (Player 2)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Cursor up</code> and <code>Cursor down</code> or <code>O</code> and <code>K</code>: Control right pad (Player 1 in 2 player mode and player 3 in 4 player mode)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Q</code> and <code>A</code>: Control left pad (Player 2 in 2 player mode and player 4 in 4 player mode)</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Z</code>, <code>M</code> or joystick button 1: Manual serve</p>
|
||
</li>
|
||
<li>
|
||
<p>Cursor keys (<code>Caps Shift+5</code>, <code>Caps Shift+6</code>, <code>Caps Shift+7</code> and <code>Caps Shift+8</code> on gomaDOS+, <code>PC XT</code> keyboard mode) and <code>Enter</code> to use the menu</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_8">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>Pressing <code>Esc</code> or joystick button 2 (<code>Caps Shift+Space</code> on gomaDOS+, <code>PC XT</code> keyboard mode) shows or hides the configuration menu. Cursor keys (<code>Caps Shift+5</code>, <code>Caps Shift+6</code>, <code>Caps Shift+7</code> and <code>Caps Shift+8</code> on gomaDOS+, <code>PC XT</code> keyboard mode) and <code>Enter</code> to select and choose menu options.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/pong.jpg" alt="pong"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The following options are available:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Serve mode</p>
|
||
</li>
|
||
<li>
|
||
<p>Ball Angle</p>
|
||
</li>
|
||
<li>
|
||
<p>Ball Speed</p>
|
||
</li>
|
||
<li>
|
||
<p>Paddle Size</p>
|
||
</li>
|
||
<li>
|
||
<p>Sound</p>
|
||
</li>
|
||
<li>
|
||
<p>Number of players</p>
|
||
</li>
|
||
<li>
|
||
<p>Speed mode</p>
|
||
</li>
|
||
<li>
|
||
<p>Angle mode</p>
|
||
</li>
|
||
<li>
|
||
<p>Joystick, mouse, etc. controls</p>
|
||
</li>
|
||
<li>
|
||
<p>Paddle accuracy</p>
|
||
</li>
|
||
<li>
|
||
<p>Colour mode</p>
|
||
</li>
|
||
<li>
|
||
<p>Exit</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_nes">NES</h3>
|
||
<div class="paragraph">
|
||
<p>Nintendo Entertainment System (also known as Nintendo NES or just NES) is the <a href="https://en.wikipedia.org/wiki/Nintendo_Entertainment_System">second home video game console produced by Nintendo</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The ZXDOS+ core has been made by Nihirash, based on <a href="http://www.zxuno.com/forum/viewtopic.php?t=1245">the previous version for ZX-Uno</a> by DistWave y Quest.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some features of this core are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>HQ2X filters that "removes pixels" from the image</p>
|
||
</li>
|
||
<li>
|
||
<p>Scanlines simulation</p>
|
||
</li>
|
||
<li>
|
||
<p>Made with NES NTSC clock timings, so only USA ROMs run fine. PAL ROMs run faster than they sould</p>
|
||
</li>
|
||
<li>
|
||
<p>You can load ROMs from the SD</p>
|
||
</li>
|
||
<li>
|
||
<p>You need, at least, one gamepad or joystick connected, and it must have several buttons</p>
|
||
</li>
|
||
<li>
|
||
<p>Only VGA video mode is supported, with non-accurate timings, so it may not work with some displays</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format_6">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You need a microSD card with the first partition in FAT16 format to store ROM image files of the games to load. ROM files can be inside subdirectories.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>See the <a href="#_cores">corresponding section</a> for instructions of how to install the NES core in ZXDOS+.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_10">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_10">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>While the core is running:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Esc</code> or joystick button 2 (or <code>Caps Shift+Space</code> on gomaDOS+, <code>PC XT</code> keyboard mode): Show or hide configuration menu</p>
|
||
</li>
|
||
<li>
|
||
<p>Cursor keys (<code>Caps Shift+5</code>, <code>Caps Shift+6</code>, <code>Caps Shift+7</code> and <code>Caps Shift+8</code> on gomaDOS+, <code>PC XT</code> keyboard mode), and <code>Enter</code> to use the menu</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Backspace</code> (<code>Caps Shift+Symbol Shift+B</code> on gomaDOS+, <code>ZX Spectrum</code> keyboard mode): Hard reset</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_9">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>Pressing <code>Esc</code> or joystick button 2 (<code>Caps Shift+Space</code> on gomaDOS+) shows or hides the configuration menu. To navigate the menu and activate or choose any option, use the cursor keys (<code>Caps Shift+5</code>, <code>Caps Shift+6</code>, <code>Caps Shift+7</code> and <code>Caps Shift+8</code> in gomaDOS+, <code>PC XT</code> keyboard mode) and <code>Enter</code>.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/nes.jpg" alt="nes"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The following options are available:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Reset NES</p>
|
||
</li>
|
||
<li>
|
||
<p>Scanlines</p>
|
||
</li>
|
||
<li>
|
||
<p>HQ2X Filter</p>
|
||
</li>
|
||
<li>
|
||
<p>P1 Select</p>
|
||
</li>
|
||
<li>
|
||
<p>P1 Start</p>
|
||
</li>
|
||
<li>
|
||
<p>Load ROM</p>
|
||
</li>
|
||
<li>
|
||
<p>Exit</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_colecovision">ColecoVision</h3>
|
||
<div class="paragraph">
|
||
<p><a href="https://en.wikipedia.org/wiki/ColecoVision">ColecoVision</a> is Coleco Industries' home video-game console that was released in August 1982.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>ZXDOS+ core is based on <a href="https://github.com/fbelavenuto/colecofpga">ZX-Uno version</a> by Fabio Belavenuto.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some features of this core are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>BIOS ROM is loaded from microSD card</p>
|
||
</li>
|
||
<li>
|
||
<p>Supports multicart ROM, also loaded from microSD</p>
|
||
</li>
|
||
<li>
|
||
<p>Only works with VGA</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format_7">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You need a microSD card with the first partition in FAT16 format to store ROM image files of the games to load and other needed files. These can be downloaded from <a href="https://github.com/fbelavenuto/colecofpga/tree/master/SD_Card">the original project in GitHub</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>See the <a href="#_cores">corresponding section</a> for instructions of how to install the ColecoVision core in ZXDOS+.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_11">Keyboard</h4>
|
||
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_11">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>While the core is running:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Cursor or <code>Q</code>, <code>A</code>, <code>E</code>, <code>R</code> or joystick 1: Directional controls for player 1</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Z</code> or joystick 1 main fire button: Fire Button 1 for player 1</p>
|
||
</li>
|
||
<li>
|
||
<p><code>U</code>, <code>J</code>, <code>O</code>, <code>P</code> or joystick 2: Directional controls for player 2</p>
|
||
</li>
|
||
<li>
|
||
<p><code>M</code> or joystick 2 main fire button: Fire button 1 for player 2</p>
|
||
</li>
|
||
<li>
|
||
<p><code>X</code> or joystick 1 secondary fire button: Fire button 1 for player 1 and player 2</p>
|
||
</li>
|
||
<li>
|
||
<p><code>0</code> to <code>9</code>: Button 0 to 9 for player 1 and player 2</p>
|
||
</li>
|
||
<li>
|
||
<p><code>T</code>: Button '*'</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Y</code>: Button '#'</p>
|
||
</li>
|
||
<li>
|
||
<p>'Esc' (or <code>Caps Shift+Space</code> on gomaDOS+, <code>PC XT</code> keyboard mode): Soft Reset</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_10">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>On startup, BIOS ROM is loaded from the card, and then the multicart ROM.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/coleco.jpg" alt="coleco"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>At multicart menu, use the directional controls to choose one ROM, and then fire button 1 to load. Pressing 'Esc' (<code>Caps Shift+Space</code> on gomaDOS+, <code>PC XT</code> keyboard mode) restarts the core and loads the ROM selection menu again.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_atari_2600">Atari 2600</h3>
|
||
<div class="paragraph">
|
||
<p><a href="https://en.wikipedia.org/wiki/Atari_2600">Atari 2600</a> is a home video game console originally branded as the Atari Video Computer System (Atari VCS).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>ZXDOS+ core version is developed by avlixa.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some of the features of the core are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>RGB and VGA support</p>
|
||
</li>
|
||
<li>
|
||
<p>Support for joysticks, keyboard, mouse and rotary encoder controls (see <a href="#_rotary_enoders">here</a> for more information)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format_8">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You need a microSD card with the first partition in FAT16 format to store ROM image files of the games to load.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>See the <a href="#_cores">corresponding section</a> for instructions of how to install the Atari 2600 core in ZXDOS+.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_12">Keyboard</h4>
|
||
<div class="paragraph">
|
||
<p>For gomaDOS+, it is recommended to change the keyboard mode to <code>Atari 800</code> (<code>Caps Shift + Symbol Shift + U</code> and then <code>4</code>) o <code>PC XT</code> (<code>Caps Shift + Symbol Shift + U</code> and then <code>9</code>).</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_12">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>During the core execution:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>W</code>, <code>A</code>, <code>S</code>, <code>D</code> or joystick 1: Directional controls for player 1</p>
|
||
</li>
|
||
<li>
|
||
<p><code>F</code> or joystick 1 fire button: Player 1 fire button</p>
|
||
</li>
|
||
<li>
|
||
<p><code>I</code>, <code>J</code>, <code>K</code>, <code>L</code> or joystick 2: Directional controls for player 2</p>
|
||
</li>
|
||
<li>
|
||
<p><code>H</code> or joystick 2 fire button: Player 2 fire button</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): change between RGB and VGA video mode</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Backspace</code> (<code>Caps Shift+Symbol Shift+B</code> on gomaDOS+): Hard reset.</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_11">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>Pressing <code>Esc</code> or joystick button 2 (<code>Caps Shift+Space</code> on gomaDOS+, <code>Atari800</code> keyboard mode) shows or hides the configuration menu. Cursor keys (<code>Caps Shift+5</code>, <code>Caps Shift+6</code>, <code>Caps Shift+7</code> and <code>Caps Shift+8</code> on gomaDOS+, <code>Atari800</code> keyboard mode) and <code>Enter</code> to select and choose menu options.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/a2600.jpg" alt="a2600"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The following options are available:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Reset core</p>
|
||
</li>
|
||
<li>
|
||
<p>Scanlines</p>
|
||
</li>
|
||
<li>
|
||
<p>RGB Mode (PAL/NTSC)</p>
|
||
</li>
|
||
<li>
|
||
<p>Paddle Size</p>
|
||
</li>
|
||
<li>
|
||
<p>Sound</p>
|
||
</li>
|
||
<li>
|
||
<p>Color</p>
|
||
</li>
|
||
<li>
|
||
<p>Difficulty A</p>
|
||
</li>
|
||
<li>
|
||
<p>Difficulty B</p>
|
||
</li>
|
||
<li>
|
||
<p>Select</p>
|
||
</li>
|
||
<li>
|
||
<p>Start</p>
|
||
</li>
|
||
<li>
|
||
<p>Load ROM</p>
|
||
</li>
|
||
<li>
|
||
<p>Joystick</p>
|
||
</li>
|
||
<li>
|
||
<p>Paddle Accuracy</p>
|
||
</li>
|
||
<li>
|
||
<p>Exit</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_videopac">Videopac</h3>
|
||
<div class="paragraph">
|
||
<p><a href="https://en.wikipedia.org/wiki/Magnavox_Odyssey_2">Philips Videopac</a>, also known as Magnavox Odyssey², Philips Videopac G7000 o Philips Odyssey², is a second generation home video game console that was released in 1978.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The ZXDOS+ core is make by avlixa, and is based on ZXDOS core by yomboprime.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Some features of the core are:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>RGB and VGA support</p>
|
||
</li>
|
||
<li>
|
||
<p>Needs at least one joystick to be used</p>
|
||
</li>
|
||
<li>
|
||
<p>Different colour modes including monochrome</p>
|
||
</li>
|
||
<li>
|
||
<p>loadable VDC ROM charset for some custom roms</p>
|
||
</li>
|
||
<li>
|
||
<p>"The Voice" peripheral</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_microsd_card_format_9">microSD card format</h4>
|
||
<div class="paragraph">
|
||
<p>You need a microSD card with the first partition in FAT16 format to store ROM image files to load.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>See the <a href="#_cores">corresponding section</a> for instructions of how to install the Videopac core in ZXDOS+.</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_keyboard_13">Keyboard</h4>
|
||
<div class="paragraph">
|
||
<p>For gomaDOS+, it is recommended to change the keyboard mode to <code>PC XT</code> (<code>Caps Shift + Symbol Shift + U</code> and then <code>9</code>).</p>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_special_keys_and_buttons_13">Special keys and buttons</h4>
|
||
<div class="paragraph">
|
||
<p>During the core execution:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>F1</code> (<code>Caps Shift+Symbol Shift+5</code> on gomaDOS+): Loads a test ROM</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): change between RGB and VGA video mode</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Ctrl+Alt+Backspace</code> (<code>Caps Shift+Symbol Shift+B</code> on gomaDOS+): Hard reset</p>
|
||
</li>
|
||
<li>
|
||
<p>After loading a ROM, most games will prompt the user with "SELECT GAME". Press <code>0</code>-<code>9</code> on the keyboard or mapped controller button to play the game.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Esc</code> or joystick button 2 (or <code>Caps Shift+Espacio</code> on gomaDOS+) to show or hide the options menu</p>
|
||
</li>
|
||
<li>
|
||
<p><code>W</code>, <code>A</code>, <code>S</code>, <code>D</code> or cursor keys (<code>Caps Shift+5</code>, <code>Caps Shift+6</code>, <code>Caps Shift+7</code> and <code>Caps Shift+8</code> on gomaDOS+, with <code>PC XT</code> keyboard mode) and then <code>Enter</code> to choose and select menu options</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_basic_guide_12">Basic Guide</h4>
|
||
<div class="paragraph">
|
||
<p>Usually, there is no on-screen display of the game options, so looking at the instruction manuals (for example following <a href="https://videopac.weebly.com/">this link</a>) may be helpful in selecting a game.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Note also that the system did not have a well defined player 1 or player 2 controller, and some games may alternate on a game-to-game basis. You may need to swap controllers to use the input or (for one player games) use the join joystick option of the menu</p>
|
||
</div>
|
||
<div class="admonitionblock tip">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-tip" title="Tip"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>If, when browsing the ROM directory, you can’t see all of them, try to split the content into several subdirectories with less files per directory.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Pressing <code>Esc</code> or joystick button 2 (<code>Caps Shift+Space</code> on gomaDOS+, <code>PC XT</code> keyboard mode) shows or hides the configuration menu. Cursor keys (<code>Caps Shift+5</code>, <code>Caps Shift+6</code>, <code>Caps Shift+7</code> and <code>Caps Shift+8</code> on gomaDOS+, <code>PC XT</code> keyboard mode) and <code>Enter</code> to select and choose menu options.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/videopac.jpg" alt="videopac"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The following options are available:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Reset core</p>
|
||
</li>
|
||
<li>
|
||
<p>Scanlines</p>
|
||
</li>
|
||
<li>
|
||
<p>Swap Joysticks</p>
|
||
</li>
|
||
<li>
|
||
<p>Join Joysticks</p>
|
||
</li>
|
||
<li>
|
||
<p>Load Cartridge ROM</p>
|
||
</li>
|
||
<li>
|
||
<p>Load VDC Font</p>
|
||
</li>
|
||
<li>
|
||
<p>Video mode: PAL/Videopac or NTSC/Odyssey2</p>
|
||
</li>
|
||
<li>
|
||
<p>Color Mode</p>
|
||
</li>
|
||
<li>
|
||
<p>The Voice</p>
|
||
</li>
|
||
<li>
|
||
<p>Exit</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_change_vdc_rom_charset">Change VDC ROM charset</h5>
|
||
<div class="paragraph">
|
||
<p>You can, for some ROMs, load a <code>CHR</code> file including a custom font, instead of the original one which was included with the Intel 8244/8245 chip.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Those files can be made following the instructions and using the editor available at the project repository, following <a href="https://github.com/RW-FPGA-devel-Team/Videopac-G7000/tree/main/doc/Charset%20Edit">this link</a>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_other_hardware">Other Hardware</h2>
|
||
<div class="sectionbody">
|
||
<div class="sect2">
|
||
<h3 id="_rotary_encoders">Rotary Encoders</h3>
|
||
<div class="paragraph">
|
||
<p>Pong and Atari 2600 cores support the use of quadrature <a href="https://en.wikipedia.org/wiki/Rotary_encoder">rotary encoders</a> as control devices. They can be connected to the joystick ports. Although the testing has been done with 600 ppr encoders, lower ppr encoders, like 400 or 300, should also work.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can also use an Atari 2600 <a href="https://en.wikipedia.org/wiki/Paddle_(game_controller)">paddle</a> driving controller. In this case the playing experience is bad, since they have few ppr and you must do several full rotations. When using them, it’s recommended to set the accuracy setting to 8, to have enough speed.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_connection">Connection</h4>
|
||
<div class="paragraph">
|
||
<p>Both ZXDOS+ and gomaDOS+ have joystick pin 5 connected to positive VCC, used as main power, and pin 8 as GND. The rotary encoders to use must support voltage from 3,4v to 5v.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>A rotary encoder has 5 wires: Earth Ground (not connected), Vcc (<code>+</code>), GND (<code>0V`or `-</code>), <code>A</code> and <code>B</code>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><code>A</code> y <code>B</code> are connected to pins 1 and 2 for the first encoder, 3 and 4 for the seconde one. This way you can have up to 4 encoders connected using both joystick ports.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/db9joy.png" alt="db9joy"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>This way, the connections should be:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Line <code>A</code> encoder 1</p>
|
||
</li>
|
||
<li>
|
||
<p>Line <code>B</code> encoder 1</p>
|
||
</li>
|
||
<li>
|
||
<p>Line <code>A</code> encoder 2</p>
|
||
</li>
|
||
<li>
|
||
<p>Line <code>B</code> encoder 2</p>
|
||
</li>
|
||
<li>
|
||
<p>Vcc(<code>+</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Fire 1</p>
|
||
</li>
|
||
<li>
|
||
<p>NC</p>
|
||
</li>
|
||
<li>
|
||
<p><code>GND</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Fire 2</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_pong_core_configuration">Pong Core Configuration</h4>
|
||
<div class="paragraph">
|
||
<p>Follow these directions to choose the configuration:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>For 1 or 2 endoders on joystick port 2 de joystick, select <code>1/2 Paddle in J2</code> option</p>
|
||
</li>
|
||
<li>
|
||
<p>For 2 encoders, one for each joystick port, select <code>2/4 Paddle in J1&J2</code> option. This is also valid to connect two Atari 2600 driving paddles</p>
|
||
</li>
|
||
<li>
|
||
<p>For 4 encoders, two for each joystick port, select <code>2/4 Paddle in J1&J2</code> option</p>
|
||
</li>
|
||
<li>
|
||
<p>For 1 or 2 encoders on joystick port 2 along with a mouse (in this case the encoders are for players 2 and 4), select <code>Mouse PS/2</code> option</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>It is recommended to wait, and make the connection after selecting the chosen option, since the encoders interfere with the up/down directions of the joystick, blocking access to the menu. Another option is to add a on/off switch for the encoder that will disable the power.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_loading_from_tape">Loading from tape</h3>
|
||
<div class="paragraph">
|
||
<p>Some cores can load, as the original machines could, from a external audio device like a cassette player or something else simulating it.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Besides the card, you have to plug an appropriate audio cable to <a href="#_ports_and_connectors">ZXDOS+ audio input</a>. It must have a 3.5 mm stero jack on one side, and two mono outputs on the other side (one for each audio channel). The right audio mono is connected to the audio player (this is not necessary with a miniduino, since it already uses only the right audio channel when playing).</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_cassette_player">Cassette Player</h4>
|
||
<div class="paragraph">
|
||
<p>The use is exactly the same as when using the original computers:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Plug the audio cable</p>
|
||
</li>
|
||
<li>
|
||
<p>Type on the computer or select the tape loading option. For examle, for ZX Spectrum 48K, typing <code>J</code>, then, twice, <code>"</code> (<code>Symbol Shift + P</code> on gomaDOS+) and then <code>Enter</code> to do the classic <code>LOAD "" + Enter</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Start playing the tape (you may have to try several times adjusting the player volume)</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_computer">Computer</h4>
|
||
<div class="paragraph">
|
||
<p>Depending on the operating system (Windows, MacOS, Linux) there are several programs that can either play a tape file (<code>TAP</code>, <code>TZX</code>, <code>PZX</code>, etc.) and output the sound through a headphone output, or create an audio file (<code>WAV</code>, <code>VOC</code>, <code>AU</code>, etc.) that can be played using a music or audio program.</p>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_playtzx">PlayTZX</h5>
|
||
<div class="paragraph">
|
||
<p>This program for Windows, MacOS or Linux, can play directly a <code>TZX</code> tape file through the audio output of the computer.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can download the binary file (for example), for Windows from <a href="https://worldofspectrum.net/utilities/#tzxtools">World of Spectrum Classic</a> and for Mac from <a href="https://github.com/kounch/playtzx/releases">this GitHub repository</a>) or compile the source code as <a href="#_compile_source_code_macos_or_linux">explained later</a>.</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Plug the audio cable between the computer audio output and ZXDOS+ audio input (remember to use only the right mono channel to the PC, Mac, etc. output)</p>
|
||
</li>
|
||
<li>
|
||
<p>Type on the computer or select the tape loading option. For examle, for ZX Spectrum 48K, typing <code>J</code>, then, twice, <code>"</code> (<code>Symbol Shift + P</code> on gomaDOS+) and then <code>Enter</code> to do the classic <code>LOAD "" + Enter</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Start playing a tape file with this command (you may have to try several times adjusting the player volume)</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">./playtzx <tape file path></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If everything works fine, you will see at the shell the name of the different tape data blocks, while the sound is played and the ZXDOS+ core loads the program.</p>
|
||
</div>
|
||
<div class="admonitionblock tip">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-tip" title="Tip"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>On Linux, the program uses as output the device <code>/dev/dsp</code>, this may require to load a module like <code>snd_pcm_oss</code> (on systems using ALSA).</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="sect5">
|
||
<h6 id="_compile_source_code_macos_or_linux">Compile source code (MacOS or Linux)</h6>
|
||
<div class="paragraph">
|
||
<p>To compile, the first thing is checking that the developer tools are installed on the system, including a C compiler (<code>gcc</code>, <code>clang</code>, command line developer tools for Mac, etc.) and <a href="https://es.wikipedia.org/wiki/GNU_build_system">GNU Autotools</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Download the source code <a href="https://github.com/kounch/playtzx">from this repository</a>), extract the contents if needed and access from a terminal to the directory and type the commands:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">aclocal <span class="o">&&</span> autoconf <span class="o">&&</span> autoheader <span class="o">&&</span> automake <span class="nt">--add-missing</span>
|
||
./configure
|
||
make</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If all goes well, a new file named <code>tzxplay</code> will be created, which you can copy anywhere and then use. You can delete the compilation directory.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_mobile_phone_tablet_mp3_player_etc">Mobile phone, tablet, MP3 player, etc.</h4>
|
||
<div class="paragraph">
|
||
<p>There are a very few apps (or none) that can directly play a tape file on a mobile device so, in many cases, the only option is to convert it to an audio file before playing it.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://play.google.com/store/apps/details?id=com.baltazarstudios.playzxtapes">PlayZX</a> is an App for Android which can play tape files through the headphone output.</p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>The latest devices with headphone output are normally designed to work with impedances of only a few ohmis. This may, sometimes, not be enouth for the ZXDOS+ audio input.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In these cases, it’s recommended (if possible) to disable headphone volume limitations and/or use a headphone amplifier that can give a higher impedance.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_audio_file_conversion">Audio file conversion</h5>
|
||
<div class="paragraph">
|
||
<p>These are some of the many programas that exist and which can export tape files to audio files.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.alessandrogrussu.it/tapir/index.html">Tapir</a> is a GUI program for Windows (but which can also run with Wine on Linux or Mac) that can load <code>TZX</code> and <code>TAP</code> files and export to <code>WAV</code> audio</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><code>tape2wav</code> from <a href="http://fuse-emulator.sourceforge.net/">Fuse Utilities</a> is a command line utility that can export from <code>TZX</code> <code>PZX</code> and <code>TAP</code> to <code>WAV</code>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><code>pzx2wav</code> in <a href="http://zxds.raxoft.cz/pzx.html">PZX Tools</a> is another command line utility which exports to <code>WAV</code>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><code>tsx2wav</code> in <a href="https://github.com/nataliapc/MSX_devs/tree/master/TSXphpclass">TSXphpclass</a> is made wiwth PHP and that can export from <code>TSX</code> to <code>WAV</code>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_miniduino">Miniduino</h4>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.antoniovillena.es/store/product/miniduino/">Miniduino</a> is a tape file audio player, based on a STM32F103C8T6 microcontroller with 64KB flash memory, and <a href="https://github.com/rcmolina/MaxDuino_BETA">Maxduino</a> firmware preinstalled.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Maxduino plays, in a very similar way to how <a href="https://es.wikipedia.org/wiki/Casete">cassette tape</a> players worked, digital tape files in format as like <code>TAP</code> and <code>TZX</code> (ZX Spectrum), <code>O</code> (ZX80), <code>P</code> (ZX81), <code>CDT</code> (Amstrad CPC), <code>CAS</code>(MSX) <code>TSX</code> (MSX, Acorn, etc). It is also possible to play AY music files as if they were tapes, in order to load the from <a href="http://www.specay.co.uk">SpecAY</a> in a ZX Spectrum.</p>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_ports_and_buttons">Ports and buttons</h5>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/MiniduinoBack.jpg" alt="MiniduinoBack"></span></p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/MiniduinoFront.jpg" alt="MiniduinoFront"></span></p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 50%;">
|
||
<col style="width: 50%;">
|
||
</colgroup>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">1</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Power</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">2</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Audio output</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">3</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Control button</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">4</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Motor control</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">5</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">microSD card slot</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">6</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Screen</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_configuration">Configuration</h5>
|
||
<div class="paragraph">
|
||
<p>A microSD is needed in order to store the tape files to play. Fast cards (Class 10 or greater) aren’t recommended because there can be problems while reading the data. High capacity (SDXC or greater) cards aren’t recommended too.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>The card must have the first partition formatted as FAT16 or FAT32.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Besides the card, you have to plug an appropriate audio cable to <a href="#_ports_and_connectors">ZXDOS+ audio input</a>. It must have a 3.5 mm stero jack on one side, and two mono output on the other side (one for each audio channel). The right audio mono is connected to the Miniduino.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If you hava a device that can use motor control, you can also use a cable with a 2.6 mm jack.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Copy the tape files (<code>TAP</code>, <code>TZX</code>, <code>O</code>, <code>P</code>, <code>CAS</code>, <code>TSX</code>, etc) to the first partition of the microSD card. They can be organized using folders or directories.</p>
|
||
</div>
|
||
<div class="admonitionblock tip">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-tip" title="Tip"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>The player shows file and directory entries in the order stored in the internal FAT table, and not alphabetically. If you want to see them ordered, yo have to reorder the microSD card structure with a utility like Fat Sorter for Windows, <a href="https://fatsort.sourceforge.io/">FATsort</a> for Linux and MacOS, <a href="https://www.luisrios.eti.br/public/en_us/projects/yafs/">YAFS</a>, <a href="http://www.trustfm.net/software/utilities/SDSorter.phpp">SDSorter</a> or other.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_use">Use</h5>
|
||
<div class="paragraph">
|
||
<p>Once the microSD card with the data files is inserted, it’s turned on plugging in the included USB power cable.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/MiniduinoLogo.jpg" alt="MiniduinoLogo"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Pressing down the control button shows the options menu which can set the following:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Baud Rate: Configures turbo speed baud rates when playing 4B blocks in MSX files (<code>CAS</code> and <code>TSX</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Motor Ctrl: Enable this option when a control cable is connected to a proper device (Amstrad, CPC, MSX, etc.)</p>
|
||
</li>
|
||
<li>
|
||
<p>Converter (TSXCzxpUEFWS): Enables turbo loading <code>.CAS</code> and <code>.TSX</code> files, changes signal for Spectrum and Amstrad CPC files and/or change parity when playing Acorn Electron and BBC Micro <code>.UEF</code> files</p>
|
||
</li>
|
||
<li>
|
||
<p>(Skip BLK)): To disable (Skip ON) or enable automatic pause when 2A blocks are found</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>When not inside the options menu, the control button is used as a four directional control joystick, which has two different behaviours depending whether the player is stopped or paused.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/MiniduinoVersion.jpg" alt="MiniduinoVersion"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>When the player is stopped (file and directories browser):</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Up and Down move through the current files and directories list</p>
|
||
</li>
|
||
<li>
|
||
<p>Left (Stop) goes one level up in the directory tree</p>
|
||
</li>
|
||
<li>
|
||
<p>Right (Play/Pause) enters into a directory or, if the selection is a file, tries to play it</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>Once a file is being played, stop playing it with the left button (Stop) or pause using the right button (Play/Pause).</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/MiniduinoPlay.jpg" alt="MiniduinoPlay"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>When in pause (tape block browser:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Up and Down mov through the tape block files alreadey played (useful for multiload titles, to load a previous level block, for example)</p>
|
||
</li>
|
||
<li>
|
||
<p>Left (Stop) cancels the player and goes back to file and directory browser mode</p>
|
||
</li>
|
||
<li>
|
||
<p>Right (Play/Pause) continues playing from the selected block</p>
|
||
</li>
|
||
<li>
|
||
<p>Press down the control butto to enable or disable turbo mode for MSX</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect4">
|
||
<h5 id="_maxduino_firmware_upgrade">Maxduino firmware upgrade</h5>
|
||
<div class="paragraph">
|
||
<p>Maxduino firmwar is periodically updated and improved. You can track the changes and improvements either at the <a href="https://www.va-de-retro.com/foros/viewtopic.php?t=5541&start=9999">forums</a> or at the <a href="https://github.com/rcmolina/MaxDuino_BETA">GitHub project page</a>. To take advantage of this improvements, the Miniduino flash image must be flased with the updated firmware version.</p>
|
||
</div>
|
||
<div class="sect5">
|
||
<h6 id="_environment_setup">Environment setup</h6>
|
||
<div class="paragraph">
|
||
<p>Firmware flashing is done from a computer (Windows, Mac, Linux) with <a href="https://www.arduino.cc/en/software">Arduino IDE</a> installed.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You have to install SDFat (1.1.4) software library selecting the menu option Program → include library → manage libraries</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Minidiuno microcontroller support must also be added. This is done in two steps:</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>First, adding ARXM Cortex M3 support from menu Tools → borad → board manager, and installing "Arduino SAM boards (Cortex-M3)"</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Then, you have to add STM32 microcontroller support, downloading the file available at <a href="https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip">this link</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Extract the contents to the current user directory in</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">...Arduino/hardware/Arduino_STM32</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If on Windows, install the USB device controller, running (with elevated privileges:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"> ...<span class="se">\d</span>rivers<span class="se">\w</span><span class="k">in</span><span class="se">\i</span>nstall_drivers.bat</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>On Linux, install with root privileeges the necessary <code>udev</code> rules:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">...tools/linux/install.sh</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>On MacOS, if Miniduino does not appear as USB device in Arduino ID when plugged, it may be necessary to install <a href="https://github.com/libusb/libusb/wiki">libusb</a>.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p>Finaly, when on Mac or Linux, the file <code>maple_upload</code> inside <code>Arduino_STM32</code> has to be changed with a text editor. Those lines do not work:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="k">if</span> <span class="o">[</span> <span class="nv">$# </span><span class="nt">-eq</span> 5 <span class="o">]</span><span class="p">;</span> <span class="k">then
|
||
</span><span class="nv">dfuse_addr</span><span class="o">=</span><span class="s2">"--dfuse-address </span><span class="nv">$5</span><span class="s2">"</span>
|
||
<span class="k">else
|
||
</span><span class="nv">dfuse_addr</span><span class="o">=</span><span class="s2">""</span>
|
||
<span class="k">fi</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>And have to be changed into this:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="nv">dfuse_addr</span><span class="o">=</span><span class="s2">""</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect5">
|
||
<h6 id="_upgrade_3">Upgrade</h6>
|
||
<div class="paragraph">
|
||
<p>Once you have the environemnt ready, download the software from the <a href="https://github.com/rcmolina/MaxDuino_BETA">official repository in GitHub</a></p>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Minduino player with STM32 microcontroller is only supported from 1.65 and up</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Load the project file with Arduino IDE (for example <code>MaxDuino_v1.66.ino</code>).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Check in the file <code>userSTM32Config.h</code> that all logo entries are commented except for Miniduino and, if not, change them.</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="c"><span class="p">...</span>
|
||
<span class="c1">//#define tanque4</span>
|
||
<span class="c1">//#define tanque1</span>
|
||
<span class="c1">//#define dostanques</span>
|
||
<span class="c1">//#define cablemax</span>
|
||
<span class="c1">//#define sony</span>
|
||
<span class="cp">#define miniduino
|
||
</span><span class="p">...</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Connect the Miniduino device to the computer using the USB cable, and find the assigned port, normally with a name like "Maple Mini" (for example: COM5 Maple Mini)</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Set the following options in menu "":</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>Board: Generic STM32F104C Series
|
||
Variant: STM32F104C8 (20k RAM, 64k Flash)
|
||
Upload Method: STM32duino bootloader
|
||
CPU Speed: 72Mhz (Normal)
|
||
Optimize: Smallest (default)
|
||
Port: <Previously identified port></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Finall, clic on the firmware load button and wait for a few seconds while the project is compiled and loaded into the device.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If everything has been done correctly the Miniduino will restart and show on the screen the new firmware version.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_troubleshooting">Troubleshooting</h2>
|
||
<div class="sectionbody">
|
||
<div class="sect2">
|
||
<h3 id="_firmware_images_management">Firmware images management</h3>
|
||
<div class="paragraph">
|
||
<p>There are several tools with you can use to make and/or edit the contents of <code>ZX1</code>, <code>ZX2</code>, <code>ZXD</code> files.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_zx123_tool">zx123_tool</h4>
|
||
<div class="paragraph">
|
||
<p>This is a tool to analyze, extract and inject data in SPI flash image files for ZX-Uno, ZXDOS and similar devices.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You need to have <a href="https://www.python.org/">Python 3</a> to use it. Depending on the operating system you may have to <a href="https://www.python.org/downloads/">install it</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Having Python 3, you only need to download the latest version of the tool from the official repository, following <a href="https://github.com/kounch/zx123_tool/releases/latest">this link</a>.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Once extracted, you have to run from a shell the main script using Python 3. This may change depending on the operating system.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For example, on Windows, it’s usually:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">py <span class="nt">-3</span> zx123_tool.py</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>With other operating systems it normally is like:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">python3 ./zx123_tool.py</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You also need a SPI flash image file. This can be obtained from within the Spectrum core in "root" mode, with one of the commands <code>back16m</code>, <code>backzx2</code> or <code>backzxd</code>. Once you have obtained the exteacted file from the microSD, you can "clean" it leaving only the Spectrum core and the first Spectrum ROM with a command like this:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">... zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-w</span> <span class="nt">-o</span> FLASHempty.ZXD</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Where <code>FLASH.ZXD</code> is the path to the original file and <code>FLASHempty.ZXD</code> is the path to the new "clean" file.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p><strong>List the contents of an image</strong></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To see the contents of an image file named <code>FLASH.ZXD</code> (installed cores and some configuration info), you can use the command</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">... zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-l</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To show the contents of the same file, including ZX Spectrun ROMs info:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">... zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-l</span> <span class="nt">-r</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Change the BIOS of an image</strong></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To change the BIOS inside a file named <code>FLASH.ZXD</code>, using the BIOS file named <code>FIRMWARE.ZXD</code></p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">...zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-a</span> BIOS,FIRMWARE.ZXD</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>You can, at the same time, modify some of the default parameters. For example, with the options; <code>-m</code> for video mode: 0 (PAL), 1 (NTSC) or 2 (VGA), <code>-k</code> for the keyboard layout: 0 (Auto), 1 (ES), 2 (EN) or 3 (Spectrum).</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>This way to change the BIOS of a file named <code>FLASH.ZXD</code>, using the BIOS file <code>FIRMWARE.ZXD</code>, and also set the video mode to VGA and the keyboard layout to Spectrum (for gomaDOS`+):</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">...zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-a</span> BIOS,FIRMWARE.ZXD <span class="nt">-m</span> 2 <span class="nt">-k</span> 3</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>There are also options to set the BIOS boot delay time, the default core or the default Spectrum ROM. See the <a href="https://github.com/kounch/zx123_tool/">documentation</a> for more info.</p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p><strong>Add a Spectrum ROM to an image</strong></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>To add a Spectrum ROM file named <code>48.rom</code>, with the name <code>Spec48</code> and using the slot number 5, you can use a command like:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">...zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-a</span> ROM,5,xdnlh17,Spec48,48.rom</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>See the <a href="https://github.com/kounch/zx123_tool/">documentation</a> for all the possible options when adding a Spectrum ROM.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Amongst the information you give when adding a ROM, there are some flags used to tell wich hardware options, etc, you want to have enabled or disabled when loading the ROM, as shown in this table:</p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 50%;">
|
||
<col style="width: 50%;">
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th class="tableblock halign-left valign-top"><code>i</code></th>
|
||
<th class="tableblock halign-left valign-top">Keyboard issue 3 enabled (instead of issue 2)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>c</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable memory contention</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>d</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Enable DivMMC</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>n</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Enable NMI DivMMC (esxdos Menu)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>p</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Use Pentagon Timings</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>t</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Use 128K timings</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>s</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable DivMMC and ZXMMC ports</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>m</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Enable Timex Horizontal MMU</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>h</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable ROM high bit (1FFD bit 2)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>l</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable ROM low bit (7FFD bit 4)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>1</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable 1FFD port (+2A/3 paging)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>7</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable 7FFD port (128K paging)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>2</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable TurboSound (secondary AY chip)</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>a</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable AY chip</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>r</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable Radastanian mode</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>x</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable Timex mode</p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>u</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">Disable ULAPlus</p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="paragraph">
|
||
<p><strong>Install a Core to an image</strong></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For example, to install a core in space 3, from a file named <code>NEXT.ZXD</code>, with the name <code>Spectrum Next</code>, use a command like this:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">...zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-a</span> <span class="s1">'CORE,3,Spectrum Next,NEXT.ZXD'</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If you want also to set the core as the default, use a command like:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">...zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-a</span> <span class="s1">'CORE,3,Spectrum Next,NEXT.ZXD'</span> <span class="nt">-c</span> 3</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Change esxdos ROM of an image</strong></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Just like the BIOS firmware, you can install a ROM esxdos file, with a command like this:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">...zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-a</span> esxdos,ESXMMC.BIN</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Mix several actions in one line</strong></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Please do note that you can add several actions in one command line. For example, to "clean" an image file named <code>FLASH.ZXD</code>, creating a new one named <code>FLASHnew.ZXD</code>, installing the BIOS from the file <code>FIRMWARE.ZXD</code>, set up video mode to VGA, the keyboard in Spectrum mode, add a Spectrum ROM file <code>48.rom</code>, with the name <code>Spec48</code> while ussing slot number 5, install a core at space 3, from a file named <code>NEXT.ZXD</code>, with the name <code>Spectrum Next</code>, as default core:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">... zx123_tool.py <span class="nt">-i</span> FLASH.ZXD <span class="nt">-w</span> <span class="nt">-o</span> FLASHnew.ZXD <span class="nt">-a</span> BIOS,FIRMWARE.ZXD <span class="nt">-m</span> 2 <span class="nt">-k</span> 3 <span class="nt">-a</span> ROM,5,xdnlh17,Spec48,48.rom <span class="nt">-a</span> CORE,3,SpecNext,NEXT.ZXD <span class="nt">-c</span> 3</code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
<div class="sect2">
|
||
<h3 id="_firmware_recovery">Firmware recovery</h3>
|
||
<div class="paragraph">
|
||
<p>Sometimes (e.g. when installing an experimental core or when upgrading the ZX Spectrum Next or the BIOS) it may happen that the ZXDOS+ stops booting. The board LEDs are on, but there is no display, and it doesn’t do anything when trying the different key combinations to access BIOS setup, etc.</p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>When this happens, there are several recovery methods that let you install again the firmware.</p>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_jtag_cable_connections">JTAG cable connections</h4>
|
||
<div class="paragraph">
|
||
<p>Later, in some of the recovery steps, when talking about jump wires or USB-Blaster connections to ZXDOS, you can use these images as reference.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/jtag.jpg" alt="jtag"></span> <span class="image"><img src="img/jtaggomados.jpg" alt="jtaggomados"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Take note, that on some models, the JTAG pins are at the under the board.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/jtag02.jpg" alt="jtag02"></span> <span class="image"><img src="img/jtag03.jpg" alt="jtag03"></span> <span class="image"><img src="img/jtag04.jpg" alt="jtag04"></span></p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p><strong>DO NOT</strong> connect the 3V line</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>When using USB-Blaster, a gomaDOS+ is ready to connect directly the 2x5 connector. For a ZXDOS+, it may be necessary to prepare the cables, looking at the previous images.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_recovery_using_a_raspberry_pi">Recovery using a Raspberry Pi</h4>
|
||
<div class="paragraph">
|
||
<p><strong>Hardware required</strong>:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Raspberry Pi (with SD card, keyboard, display, power supply, etc.) and with internet connection</p>
|
||
</li>
|
||
<li>
|
||
<p>5 <a href="https://en.wikipedia.org/wiki/Jump_wire">jump wires</a> (if possible, female on both sides) or, instead a USB-Blaster cable</p>
|
||
</li>
|
||
<li>
|
||
<p>One <a href="https://en.wikipedia.org/wiki/Hex_key">hex key</a> with the right socket size for ZXDOS+ cover screws, or appropriate screwdriver to open a gomaDOS+ (this isn’t necessary if using a USB-Blaster)</p>
|
||
</li>
|
||
<li>
|
||
<p>microSD for ZXDOS+/gomaDOS+ with the first partition formatted as FAT16 or FAT32</p>
|
||
</li>
|
||
<li>
|
||
<p>Keyboard (not needed for gomaDOS+) and display for ZXDOS+</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Software required</strong>:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Flash image and recovery file for ZXDOS+ (LX25), from the <a href="https://github.com/zxdos/zxdos-plus/raw/master/lx25/FLASH.zip">official repository</a></p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Instruction Steps</strong>:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Install Raspberry Pi OS (formely known as Raspbian) to the Raspberry Pi SD card (using <a href="https://www.raspberrypi.org/downloads/raspberry-pi-os/">the official download</a>, <a href="https://www.raspberrypi.org/downloads/noobs/">NOOBS</a>, <a href="https://github.com/procount/pinn">PINN</a>, etc.)</p>
|
||
</li>
|
||
<li>
|
||
<p>Install Open OCD:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="nb">sudo </span>apt-get update
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install </span>git autoconf libtool make pkg-config
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install </span>libusb-1.0-0 libusb-1.0-0-dev telnet
|
||
<span class="nb">sudo </span>apt-get <span class="nb">install </span>libusb-dev libftdi-dev
|
||
git clone git://git.code.sf.net/p/openocd/code openocd-code
|
||
<span class="nb">cd </span>openocd-code/
|
||
./bootstrap
|
||
./configure <span class="nt">--enable-usb_blaster</span> <span class="nt">--enable-sysfsgpio</span> <span class="nt">--enable-bcm2835gpio</span>
|
||
make
|
||
<span class="nb">sudo </span>make <span class="nb">install
|
||
cd</span> ..
|
||
<span class="nb">rm</span> <span class="nt">-rf</span> ./openocd-code</code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="3">
|
||
<li>
|
||
<p>Connect USB-Blaster or jump wires if using GPIO. In this case, open the ZXDOS+ or gomaDOS+ case and, <a href="#_jtag_cable_connections">as explained before</a> connect the FPGA JTAG lines (<code>TMS</code>, <code>TDI</code>, <code>TDO</code>, <code>TCK</code> y <code>GND</code>), using the wires, to the Raspberry Pi <a href="https://es.wikipedia.org/wiki/GPIO">GPIO</a> pins.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>Is using a GPIO connection, take note of the chosen pins, making sure that <code>GND</code> is connected with <code>GND</code>.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/gpio.jpg" alt="gpio"></span></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>In this example, the <code>31</code>, <code>33</code>, <code>35</code>, <code>37</code> and <code>39</code> pins will be used (corresponding to <code>GPIO #6</code>, <code>GPIO #13</code>, <code>GPIO #19</code>, <code>GPIO #26</code> and <code>GND</code>), like this:</p>
|
||
</div>
|
||
<table class="tableblock frame-all grid-all stretch">
|
||
<colgroup>
|
||
<col style="width: 33.3333%;">
|
||
<col style="width: 33.3333%;">
|
||
<col style="width: 33.3334%;">
|
||
</colgroup>
|
||
<thead>
|
||
<tr>
|
||
<th class="tableblock halign-left valign-top">ZXDOS+ JTAG</th>
|
||
<th class="tableblock halign-left valign-top">GPIO</th>
|
||
<th class="tableblock halign-left valign-top">Raspberry Pi Pin</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TMS</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">GPIO#6</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>31</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TDI</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">GPIO#13</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>33</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TDO</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">GPIO#19</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>35</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TCK</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">GPIO#26</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>37</code></p></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>GND</code></p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock">GND</p></td>
|
||
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>39</code></p></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="4">
|
||
<li>
|
||
<p>Copy to the Raspberry Pi the file named <code>recovery.zxd.bit</code> previously downloaded from the <a href="https://github.com/zxdos/zxdos-plus/raw/master/lx25/FLASH.zip">official repository</a>. For our example, it will be at <code>/home/pi/zxdosplus/unbrick/</code></p>
|
||
</li>
|
||
<li>
|
||
<p>If using GPIO, make a copy of Open OCD configuration file, to the same directory where <code>recovery.zxd.bit</code> is.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="nb">cp</span> /usr/local/share/openocd/scripts/interface/raspberrypi2-native.cfg /home/pi/zxdosplus/unbrick/</code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="6">
|
||
<li>
|
||
<p>For GPIO connection, edit <code>raspberrypi2-native.cfg</code> copy, updating <code>bcm2835gpio_jtag_nums</code> (uncommenting, if necessary), with your JTAG and GPIO connection numbers, at the line <code>bcm2835gpio_jtag_nums</code>. For our example:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code># Header pin numbers: 37 31 33 35
|
||
bcm2835gpio_jtag_nums 26 6 13 19</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="7">
|
||
<li>
|
||
<p>Comment, if it wasnt’t already, the line <code>bcm2835gpio_swd_nums</code> (not necessary for USB-Blaster connection):</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>#bcm2835gpio_swd_nums 11 25</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="8">
|
||
<li>
|
||
<p>Add, to the end of the file, the line <code>adapter speed 250</code> (again, not necessary for USB-Blaster):</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code>adapter speed 250</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="9">
|
||
<li>
|
||
<p>Turn on the ZXDOS+ or gomaDOS+.</p>
|
||
</li>
|
||
<li>
|
||
<p>Make sure that, on the Raspberry Pi, we are in the directory where <code>recovery.zxd.bit</code> is, and execute the command that loads the BIOS on recovery mode, using the path to the previously edited <code>raspberrypi2-native.cfg</code>.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For GPIO connection:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="nb">cd</span> /home/pi/zxdosplus/unbrick
|
||
<span class="nb">sudo </span>openocd <span class="nt">-f</span> /home/pi/zxdosplus/unbrick/raspberrypi2-native.cfg <span class="nt">-f</span> /usr/local/share/openocd/scripts/cpld/xilinx-xc6s.cfg <span class="nt">-c</span> <span class="s2">"init; xc6s_program xc6s.tap; pld load 0 recovery.zxd.bit ; exit"</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>For USB-Blaster connection:</p>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell"><span class="nb">sudo </span>openocd <span class="nt">-f</span> /usr/local/share/openocd/scripts/interface/altera-usb-blaster.cfg <span class="nt">-f</span> /usr/local/share/openocd/scripts/cpld/xilinx-xc6s.cfg <span class="nt">-c</span> <span class="s2">"init; xc6s_program xc6s.tap; pld load 0 recovery.zxd.bit ; exit"</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="11">
|
||
<li>
|
||
<p>If all goes well, we will see that the FPGA LED change their state and the BIOS is shown on the display.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If there is no image on the display, press <code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): to switch between RGB and VGA modes, just in case the recovery BIOS did start in the wrong mode for our setup.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/recovery.png" alt="recovery"></span></p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="12">
|
||
<li>
|
||
<p>Insert in the ZXDOS+ the microSD card formatted as FAT16 o FAT32, and with the <code>FLASH.ZXD</code> file <a href="https://github.com/zxdos/zxdos-plus/raw/master/lx25/FLASH.zip">downloaded previously</a>.</p>
|
||
</li>
|
||
<li>
|
||
<p>If using a USB-Blaster connection, unplug the connector.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="14">
|
||
<li>
|
||
<p>Select the option <code>Upgrade Flash from SD</code>. Press Enter, choose <code>Yes</code>, and press Enter again to start the Flash writing process.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/recovery2.png" alt="recovery2"></span></p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>This process can’t be undone, and it will replace all the previously installed cores, the BIOS, the ZX Spectrum ROMs and their configuration with the data in the image file.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Ususally, the recovery image is set to use a PS/2 keyboard so, for a gomaDOS+, some key combinations, like <code>Caps Shift + 5</code>, etc may not work. In this case, you have to change the keyboard mode to <code>PC XT</code>(<code>Caps Shift + Symbol Shift + U</code> and then <code>9</code>), to make them work temporarily.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="15">
|
||
<li>
|
||
<p>After some minutes, the process will end, and, after turning the ZXDOS+ off and on, it should start fine.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>If no image is shown, press again <code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): to switch between RGB and VGA modes. In this case, you should have to enter the BIOS and change <a href="#_advanced">the right advanced setting</a> that matches your display.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>For a gomaDOS+, since the recovery image uses a PS/2 configuration as default, follow this steps to set up the BIOS correctly:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>If you see no image, switch between composite and VGA mode (<code>Caps Shift+Symbol Shift+G</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Change to <code>PC XT</code> keyboard mode (<code>Caps Shift + Symbol Shift + U</code> and then <code>9</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Reboot gomaDOS+ without losing the temporary keyboard mode (<code>Caps Shift + Symbol Shift + B</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Quickly, press <code>Caps Shift + 1</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Again, if there’s no image, switch between composite and VGA mode (<code>Caps Shift+Symbol Shift+G</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Navigate through BIOS and turno on these options:</p>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Advanced</code> → <code>Keyboard Layout</code>: <code>Spectrum</code></p>
|
||
</li>
|
||
<li>
|
||
<p><code>Advanced</code> → <code>Video</code>: <code>VGA</code> (only if there was no image)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<p>Save changes:</p>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Exit</code> → <code>Save changes and exit</code></p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<p>Completely turn off gomaDOS` and turn it on again</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_recovery_using_macos_and_usb_blaster_cable">Recovery using MacOS and USB-Blaster cable</h4>
|
||
<div class="paragraph">
|
||
<p><strong>Hardware required</strong>:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>USB-Blaster cable. Using the right pins for ZXDOS+, <a href="#_jtag_cable_connections">as explained earlier</a></p>
|
||
</li>
|
||
<li>
|
||
<p>Flash Image file and y recovery file fo ZXDOS+ (LX25). The same ones as for Raspberry Pi, from the <a href="https://github.com/zxdos/zxdos-plus/raw/master/lx25/FLASH.zip">official repository</a></p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Software required</strong>:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Mac OS</p>
|
||
</li>
|
||
<li>
|
||
<p>Extra data folder for UrJTAG, obtained from <a href="https://github.com/zxdos/zxdos-plus/blob/master/lx25/urjtag.zip">here</a></p>
|
||
</li>
|
||
<li>
|
||
<p><a href="https://brew.sh">Homebrew for Mac OS</a></p>
|
||
</li>
|
||
<li>
|
||
<p>UrJTAG: following instructions from <a href="https://n4abi.com/posts/2018-07-08-de0-nano-urjtag.html">here</a>:</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Instruction Steps</strong>:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Prepare UrJTAG instal:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">brew <span class="nb">install </span>libftdi libusb pkg-config
|
||
git clone https://github.com/C-Elegans/urjtag.git
|
||
<span class="nb">cd </span>urjtag</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="2">
|
||
<li>
|
||
<p>Copy the extra data folder for UrJTAG, into urjtag <code>data</code> folder.</p>
|
||
</li>
|
||
<li>
|
||
<p>Start compiling:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">./configure <span class="nt">--with-libftdi</span> <span class="nt">--with-libusb</span> <span class="nt">--with-ftd2xx</span> <span class="nt">--with-inpout32</span> <span class="nt">--enable-python</span><span class="o">=</span>no
|
||
make <span class="nt">-j4</span>
|
||
<span class="nb">sudo </span>make <span class="nb">install</span></code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="4">
|
||
<li>
|
||
<p>Copy <code>FLASH.ZXD</code> file to the root of the ZXDOS+ microSD card.</p>
|
||
</li>
|
||
<li>
|
||
<p>Connect USB-Blaster cable to ZXDOS+ and the Mac</p>
|
||
</li>
|
||
<li>
|
||
<p>Turn on the ZXDOS+ or gomaDOS+.</p>
|
||
</li>
|
||
<li>
|
||
<p>Make sure that, we are in the directory where <code>recovery.zxd.bit</code> is, and execute <code>jtag</code> command.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="8">
|
||
<li>
|
||
<p>A new shell appears. Now type the commands:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">cable usbblaster
|
||
detect
|
||
pld load recovery.zxd.bit</code></pre>
|
||
</div>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Make sure, when using <code>detect</code>, that the device is shown as detected. You may need to execute <code>detect</code> several times until it appears.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/recovery_mac_1.png" alt="recovery mac 1"></span></p>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="9">
|
||
<li>
|
||
<p>If all goes well, we will see that the FPGA LED change their state and the BIOS is shown on the display.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If there is no image on the display, press <code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): to switch between RGB and VGA modes, just in case the recovery BIOS did start in the wrong mode for our setup.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/recovery.png" alt="recovery"></span></p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="10">
|
||
<li>
|
||
<p>Insert in the ZXDOS+ the microSD card formatted as FAT16 o FAT32, and with the <code>FLASH.ZXD</code> file <a href="https://github.com/zxdos/zxdos-plus/raw/master/lx25/FLASH.zip">downloaded previously</a>.</p>
|
||
</li>
|
||
<li>
|
||
<p>Unplug the USB-Blaster.</p>
|
||
</li>
|
||
<li>
|
||
<p>Select the option <code>Upgrade Flash from SD</code>. Press Enter, choose <code>Yes</code>, and press Enter again to start the Flash writing process.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/recovery2.png" alt="recovery2"></span></p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>This process can’t be undone, and it will replace all the previously installed cores, the BIOS, the ZX Spectrum ROMs and their configuration with the data in the image file.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Ususally, the recovery image is set to use a PS/2 keyboard so, for a gomaDOS+, some key combinations, like <code>Caps Shift + 5</code>, etc may not work. In this case, you have to change the keyboard mode to <code>PC XT</code>(<code>Caps Shift + Symbol Shift + U</code> and then <code>9</code>), to make them work temporarily.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="13">
|
||
<li>
|
||
<p>After some minutes, the process will end, and, after turning the ZXDOS+ off and on, it should start fine.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>If no image is shown, press again <code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): to switch between RGB and VGA modes. In this case, you should have to enter the BIOS and change <a href="#_advanced">the right advanced setting</a> that matches your display.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>For a gomaDOS+, since the recovery image uses a PS/2 configuration as default, follow this steps to set up the BIOS correctly:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>If you see no image, switch between composite and VGA mode (<code>Caps Shift+Symbol Shift+G</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Change to <code>PC XT</code> keyboard mode (<code>Caps Shift + Symbol Shift + U</code> and then <code>9</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Reboot gomaDOS+ without losing the temporary keyboard mode (<code>Caps Shift + Symbol Shift + B</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Quickly, press <code>Caps Shift + 1</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Again, if there’s no image, switch between composite and VGA mode (<code>Caps Shift+Symbol Shift+G</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Navigate through BIOS and turno on these options:</p>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Advanced</code> → <code>Keyboard Layout</code>: <code>Spectrum</code></p>
|
||
</li>
|
||
<li>
|
||
<p><code>Advanced</code> → <code>Video</code>: <code>VGA</code> (only if there was no image)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<p>Save changes:</p>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Exit</code> → <code>Save changes and exit</code></p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<p>Completely turn off gomaDOS` and turn it on again</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>When using Linux with <code>urjtag</code>, the process should be quite similar, although the dependencies (libftdi libusb pkg-config) would have to be installed with the appropiate package manager (apt, yum, pacman, etc.)</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
<div class="sect3">
|
||
<h4 id="_recovery_using_windows_and_usb_blaster_cable">Recovery using Windows and USB-Blaster cable</h4>
|
||
<div class="paragraph">
|
||
<p><strong>Hardware required</strong>:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>USB-Blaster cable. Using the right pins for ZXDOS+, <a href="#_jtag_cable_connections">as explained earlier</a></p>
|
||
</li>
|
||
<li>
|
||
<p>Flash Image file and y recovery file fo ZXDOS+ (LX25). The same ones as for Raspberry Pi, from the <a href="https://github.com/zxdos/zxdos-plus/raw/master/lx25/FLASH.zip">official repository</a></p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Software required</strong>:</p>
|
||
</div>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p>Windows</p>
|
||
</li>
|
||
<li>
|
||
<p>USB-Blaster drivers for Windows, available at <a href="https://www.zxuno.com/forum/viewtopic.php?f=25&t=432">ZX-Uno forums</a></p>
|
||
</li>
|
||
<li>
|
||
<p>UrJTAG, for Windows, available at <a href="https://github.com/zxdos/zxdos-plus/blob/master/lx25/urjtag.zip">the official repository</a></p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><strong>Instruction Steps</strong>:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>Extract the ZIP file with drivers (obtained from the <a href="https://www.zxuno.com/forum/download/file.php?id=889">ZX-Uno forums</a>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Plug USB-Blaster to the Windows PC and install the driver choosing to select manually installation files and using the folder <code>drivers</code> obtained after extracting the ZIP</p>
|
||
</li>
|
||
<li>
|
||
<p>Extract UrJTAG Windows software, obtained at the <a href="https://github.com/zxdos/zxdos-plus/blob/master/lx25/urjtag.zip">official repository</a></p>
|
||
</li>
|
||
<li>
|
||
<p>Copy <code>FLASH.ZXD</code> file to the root of the ZXDOS+ microSD card.</p>
|
||
</li>
|
||
<li>
|
||
<p>Connect USB-Blaster cable to ZXDOS+ and the PC</p>
|
||
</li>
|
||
<li>
|
||
<p>Make sure that you are in the directory where <code>recovery.zxd.bit</code> is, and execute <code>jtag</code> command.</p>
|
||
</li>
|
||
<li>
|
||
<p>Turn on the ZXDOS+ or gomaDOS+.</p>
|
||
</li>
|
||
<li>
|
||
<p>A new shell appears. Now type the commands:</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="listingblock">
|
||
<div class="content">
|
||
<pre class="rouge highlight"><code data-lang="shell">cable usbblaster
|
||
detect
|
||
pld load recovery.zxd.bit</code></pre>
|
||
</div>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="9">
|
||
<li>
|
||
<p>If all goes well, we will see that the FPGA LED change their state and the BIOS is shown on the display.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p>If there is no image on the display, press <code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): to switch between RGB and VGA modes, just in case the recovery BIOS did start in the wrong mode for our setup.</p>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/recovery.png" alt="recovery"></span></p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="10">
|
||
<li>
|
||
<p>Insert in the ZXDOS+ the microSD card formatted as FAT16 o FAT32, and with the <code>FLASH.ZXD</code> file <a href="https://github.com/zxdos/zxdos-plus/raw/master/lx25/FLASH.zip">downloaded previously</a>.</p>
|
||
</li>
|
||
<li>
|
||
<p>Unplug the USB-Blaster.</p>
|
||
</li>
|
||
<li>
|
||
<p>Select the option <code>Upgrade Flash from SD</code>. Press Enter, choose <code>Yes</code>, and press Enter again to start the Flash writing process.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="paragraph text-center">
|
||
<p><span class="image"><img src="img/recovery2.png" alt="recovery2"></span></p>
|
||
</div>
|
||
<div class="admonitionblock warning">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-warning" title="Warning"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>This process can’t be undone, and it will replace all the previously installed cores, the BIOS, the ZX Spectrum ROMs and their configuration with the data in the image file.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>Ususally, the recovery image is set to use a PS/2 keyboard so, for a gomaDOS+, some key combinations, like <code>Caps Shift + 5</code>, etc may not work. In this case, you have to change the keyboard mode to <code>PC XT</code>(<code>Caps Shift + Symbol Shift + U</code> and then <code>9</code>), to make them work temporarily.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic" start="13">
|
||
<li>
|
||
<p>After some minutes, the process will end, and, after turning the ZXDOS+ off and on, it should start fine.</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>If no image is shown, press again <code>Scroll Lock</code> (<code>Caps Shift+Symbol Shift+G</code> on gomaDOS+): to switch between RGB and VGA modes. In this case, you should have to enter the BIOS and change <a href="#_advanced">the right advanced setting</a> that matches your display.</p>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="admonitionblock note">
|
||
<table>
|
||
<tr>
|
||
<td class="icon">
|
||
<i class="fa icon-note" title="Note"></i>
|
||
</td>
|
||
<td class="content">
|
||
<div class="paragraph">
|
||
<p>For a gomaDOS+, since the recovery image uses a PS/2 configuration as default, follow this steps to set up the BIOS correctly:</p>
|
||
</div>
|
||
<div class="olist arabic">
|
||
<ol class="arabic">
|
||
<li>
|
||
<p>If you see no image, switch between composite and VGA mode (<code>Caps Shift+Symbol Shift+G</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Change to <code>PC XT</code> keyboard mode (<code>Caps Shift + Symbol Shift + U</code> and then <code>9</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Reboot gomaDOS+ without losing the temporary keyboard mode (<code>Caps Shift + Symbol Shift + B</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Quickly, press <code>Caps Shift + 1</code></p>
|
||
</li>
|
||
<li>
|
||
<p>Again, if there’s no image, switch between composite and VGA mode (<code>Caps Shift+Symbol Shift+G</code>)</p>
|
||
</li>
|
||
<li>
|
||
<p>Navigate through BIOS and turno on these options:</p>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Advanced</code> → <code>Keyboard Layout</code>: <code>Spectrum</code></p>
|
||
</li>
|
||
<li>
|
||
<p><code>Advanced</code> → <code>Video</code>: <code>VGA</code> (only if there was no image)</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<p>Save changes:</p>
|
||
<div class="ulist">
|
||
<ul>
|
||
<li>
|
||
<p><code>Exit</code> → <code>Save changes and exit</code></p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<p>Completely turn off gomaDOS` and turn it on again</p>
|
||
</li>
|
||
</ol>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div style="page-break-after: always;"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sect1">
|
||
<h2 id="_references">References</h2>
|
||
<div class="sectionbody">
|
||
<div class="paragraph">
|
||
<p><a href="http://zxuno.speccy.org/index.shtml">ZX-Uno</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://desubikado.sytes.net/zx-uno-faq-version-desubikado/">ZX-Uno FAQ</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://docs.google.com/document/d/1NI0zgCDRk7c-5CVi-lfZEK6q8Lnpnco7PhpsEEdxD60/edit">GuÃa rápida del ZX-Uno</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.zxuno.com/wiki/index.php/ZX_Spectrum">Core ZX Spectrum</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://worldofspectrum.org/zxplus3e/index.html">The ZX Spectrum +3e Homepage</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://worldofspectrum.org/zxplus3e/sharingdisks.html">Sharing a +3e disk with PC (FAT) partitions</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.zxuno.com/forum/viewtopic.php?f=37&t=208">Layouts de teclado</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://github.com/spark2k06/zxunops2/blob/master/Alternative/Nuevo%20firmware%20de%20teclado%20ZX-GO%2B.pdf">Firmware de teclado para ZX Go+</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://github.com/zxdos/zxdos-plus/tree/master/zxunops2">zxunops2</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://docs.google.com/spreadsheets/d/17-ifpHcy932_AP7SAv9uBLxg-2ZptcdgTvQ8ILXQLM4/htmlview">Almost (In-) Complete List of esxDOS DOT-Commands</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://retrowiki.es/viewtopic.php?f=83&t=200032578&p=200075671&hilit=wifi#p200075671">WiFi (RetroWiki)</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.va-de-retro.com/foros/viewtopic.php?t=1718&start=10#p25076">Cargando Leches 2.0</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.zxuno.com/forum/viewtopic.php?f=35&t=44">WiFi en ZX-Uno</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://svn.zxuno.com/svn/zxuno/cores/spectrum_v2_spartan6/test19_multi_uart/">Core de ZX-Uno Test UART (WiFi)</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://nihirash.net/network-tools-for-zx-uno-pack/">Network tools for ZX-Uno pack</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.espressif.com/sites/default/files/documentation/4a-esp8266_at_instruction_set_en.pdf">ESP8266 AT Instruction Set</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.zonadepruebas.com/viewtopic.php?t=4796&start=110">VÃdeos Radastanianos</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.zxuno.com/forum/viewtopic.php?f=52&t=4074&p=28234&hilit=kyp#p28234">Nuevo core zx48</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://github.com/Kyp069/zx48.zxdosplus/releases/">ZX 48 for ZXDOS+ (Kyp)</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.forofpga.es/viewtopic.php?t=349">Core ZXNEXT en ZXDOS</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://gitlab.com/thesmog358/tbblue/-/blob/master/docs/zxdos/zxdoscoreinstall.txt">ZX Spectrum Next en ZXDOS</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.zxuno.com/forum/viewtopic.php?f=53&t=2080">Core MSX</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://github.com/fbelavenuto/msx1fpga">MSX1FPGA</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.forofpga.es/viewtopic.php?t=316">MSX Pack</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.konamiman.com/msx/msx-s.html#nextor">Nextor para MSX</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://www.konamiman.com/msx/nextor/docs/Nextor%202.0%20User%20Manual.pdf">Nextor User Manual</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://konamiman.github.io/MSX2-Technical-Handbook/md/Chapter3.html">MSX-DOS</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.zxuno.com/forum/viewtopic.php?f=16&t=4006">Atom Software Archive en carpeta ATOM</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.zxuno.com/forum/viewtopic.php?f=16&t=4005">Teclado Core Atom</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.zxuno.com/forum/viewtopic.php?t=1245">Core de NES para ZX-Uno</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://github.com/fbelavenuto/colecofpga">ColecoFPGA on GitHub</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.forofpga.es/viewtopic.php?f=167&t=24">Core de Videopac para ZXDOS</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://github.com/yomboprime/VideoPac-ZXDOS">VideoPac-ZXDOS</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://archive.org/details/Magnavox_Odyssey_2_TOSEC_2012_04_23">TOSEC: Magnavox Odyssey 2 (2012-04-23)</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://github.com/RW-FPGA-devel-Team/Videopac-G7000">Videopac G7000 / Odyssey2 for FPGA</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.videopac.org/manuals/voice.pdf">Odtyssey Speech And Sound Effects Module Manual</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="https://catleytech.com/?p=2679">Programming a Spartan 6 with a Raspberry Pi</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.zxuno.com/forum/viewtopic.php?f=25&t=375">Tutorial para desbriquear el ZX-Uno con una Raspberry</a></p>
|
||
</div>
|
||
<div class="paragraph">
|
||
<p><a href="http://www.forofpga.es/viewtopic.php?t=175">Como programar un UnAmiga con la Raspberry Pi (o Linux) con el USB-Blaster y OpenOCD</a></p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div id="footer">
|
||
<div id="footer-text">
|
||
Version 1.3.5<br>
|
||
Last updated 2021-02-11 22:58:50 +0100
|
||
</div>
|
||
</div>
|
||
<style>
|
||
pre.rouge table td { padding: 5px; }
|
||
pre.rouge table pre { margin: 0; }
|
||
pre.rouge .cm {
|
||
color: #999988;
|
||
font-style: italic;
|
||
}
|
||
pre.rouge .cp {
|
||
color: #999999;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .c1 {
|
||
color: #999988;
|
||
font-style: italic;
|
||
}
|
||
pre.rouge .cs {
|
||
color: #999999;
|
||
font-weight: bold;
|
||
font-style: italic;
|
||
}
|
||
pre.rouge .c, pre.rouge .ch, pre.rouge .cd, pre.rouge .cpf {
|
||
color: #999988;
|
||
font-style: italic;
|
||
}
|
||
pre.rouge .err {
|
||
color: #a61717;
|
||
background-color: #e3d2d2;
|
||
}
|
||
pre.rouge .gd {
|
||
color: #000000;
|
||
background-color: #ffdddd;
|
||
}
|
||
pre.rouge .ge {
|
||
color: #000000;
|
||
font-style: italic;
|
||
}
|
||
pre.rouge .gr {
|
||
color: #aa0000;
|
||
}
|
||
pre.rouge .gh {
|
||
color: #999999;
|
||
}
|
||
pre.rouge .gi {
|
||
color: #000000;
|
||
background-color: #ddffdd;
|
||
}
|
||
pre.rouge .go {
|
||
color: #888888;
|
||
}
|
||
pre.rouge .gp {
|
||
color: #555555;
|
||
}
|
||
pre.rouge .gs {
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .gu {
|
||
color: #aaaaaa;
|
||
}
|
||
pre.rouge .gt {
|
||
color: #aa0000;
|
||
}
|
||
pre.rouge .kc {
|
||
color: #000000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .kd {
|
||
color: #000000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .kn {
|
||
color: #000000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .kp {
|
||
color: #000000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .kr {
|
||
color: #000000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .kt {
|
||
color: #445588;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .k, pre.rouge .kv {
|
||
color: #000000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .mf {
|
||
color: #009999;
|
||
}
|
||
pre.rouge .mh {
|
||
color: #009999;
|
||
}
|
||
pre.rouge .il {
|
||
color: #009999;
|
||
}
|
||
pre.rouge .mi {
|
||
color: #009999;
|
||
}
|
||
pre.rouge .mo {
|
||
color: #009999;
|
||
}
|
||
pre.rouge .m, pre.rouge .mb, pre.rouge .mx {
|
||
color: #009999;
|
||
}
|
||
pre.rouge .sb {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .sc {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .sd {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .s2 {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .se {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .sh {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .si {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .sx {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .sr {
|
||
color: #009926;
|
||
}
|
||
pre.rouge .s1 {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .ss {
|
||
color: #990073;
|
||
}
|
||
pre.rouge .s, pre.rouge .sa, pre.rouge .dl {
|
||
color: #d14;
|
||
}
|
||
pre.rouge .na {
|
||
color: #008080;
|
||
}
|
||
pre.rouge .bp {
|
||
color: #999999;
|
||
}
|
||
pre.rouge .nb {
|
||
color: #0086B3;
|
||
}
|
||
pre.rouge .nc {
|
||
color: #445588;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .no {
|
||
color: #008080;
|
||
}
|
||
pre.rouge .nd {
|
||
color: #3c5d5d;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .ni {
|
||
color: #800080;
|
||
}
|
||
pre.rouge .ne {
|
||
color: #990000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .nf, pre.rouge .fm {
|
||
color: #990000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .nl {
|
||
color: #990000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .nn {
|
||
color: #555555;
|
||
}
|
||
pre.rouge .nt {
|
||
color: #000080;
|
||
}
|
||
pre.rouge .vc {
|
||
color: #008080;
|
||
}
|
||
pre.rouge .vg {
|
||
color: #008080;
|
||
}
|
||
pre.rouge .vi {
|
||
color: #008080;
|
||
}
|
||
pre.rouge .nv, pre.rouge .vm {
|
||
color: #008080;
|
||
}
|
||
pre.rouge .ow {
|
||
color: #000000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .o {
|
||
color: #000000;
|
||
font-weight: bold;
|
||
}
|
||
pre.rouge .w {
|
||
color: #bbbbbb;
|
||
}
|
||
pre.rouge {
|
||
background-color: #f8f8f8;
|
||
}
|
||
</style>
|
||
</body>
|
||
</html> |