-
Notifications
You must be signed in to change notification settings - Fork 0
oziphantom/MLA6502
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
<!DOCTYPE HTML> <html lang="en"> <head> <title>64tass v1.53 r1515 reference manual</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="Description" content="64tass, an advanced multi pass macro assembler for the 65xx family of microprocessors"> <meta name="Keywords" content="6502 assembler, 65816, 6510, 65C02, dtv, c64 cross assembler"> <meta name="Author" content="Kajtar Zsolt"> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type="text/css"> dt {margin-top:0.5em} dt + dt {margin-top:0em} body {font-family:serif;} p, dd, h1, h2, h3, h4, li, caption {hyphens:auto;-moz-hyphens:auto;-webkit-hyphens:auto;-ms-hyphens:auto;} code {hyphens:manual;-moz-hyphens:manual;-webkit-hyphens:manual;-ms-hyphens:manual;} h1, h2, h3, h4 {text-align:left;font-family:sans-serif} hr {display:none} pre {border:1px dotted #eee;background-color:#ffe;padding:2px; border-radius: 4px;} pre.make b {color:inherit;} pre.make span {color:navy;} pre.make span.cmd {color:green;} pre b, code b {color:navy;} pre b.d, code b.d {color:#f80;} pre b.k, pre span.k, code b.k, code span.k {color:blue;} pre span, code span {color:#d00;} pre span.s, code span.s {color:#f80;} pre i {color:brown;} pre u, code u {text-decoration:none;color:green;} p, dd {text-align:justify;word-break:hypenate;} p + p {text-indent:3ex;margin-top:-0.5em} table {border-bottom:2px solid black;border-top:2px solid black;border-collapse:collapse;width:100%;margin-top:0.5em;margin-bottom:0.5em; border-spacing: 0px;} td, th {padding: 0px 1ex 0px 1ex;border-left:1px solid silver;border-top:1px solid silver} tr:nth-child(odd) {background: #fafaff;} td:first-child, th:first-child {border-left: 0px;} caption {caption-side:bottom;} table.opcodes th, table.opcodes td {text-align:left;table-layout:fixed;} table.trans td:nth-child(1), table.trans td:nth-child(4) {text-align:center;} dl.errorlist > dt, dl.dir > dt, table.trans td, table.esc td, table.opcodes th, table.opcodes td, code, pre, tt {font-family:monospace,monospace;} dl.dir code b { color: inherit; } thead th {background-color:#eee;border-bottom:1px solid black;} @media screen { html {background-color: gray;} body > div {max-width:50em;margin-left:auto; margin-right:auto; overflow: hidden;} body {font-size:12pt;max-width:60em; background-color:white; margin-left:auto; margin-right:auto; border:1px solid black; box-shadow: black 2px 2px; padding: 5em 0.5em;} pre, div {overflow:auto;} } .links {line-height: 2em; word-spacing: 1ex; text-align: justify;} @media print { h1, h2, h3, h4 {page-break-after:avoid;} a {text-decoration:none;color:inherit;} body {font-size:10pt;} pre {overflow:hidden;} } a[href], a:visited { text-decoration: none; color: blue; } a[href]:hover { text-decoration: underline; } #toc ul { margin: 0px; font-weight: normal;} #toc > ul > li { margin-top: 0.5em; font-weight: bold; } #toc { counter-reset: count1 } #toc > ul > li > a:before { content: counter(count1) " "; counter-increment: count1; } #toc > ul > li > a { counter-reset: count2;} #toc > ul ul > li > a:before { content: counter(count1) "." counter(count2) " "; counter-increment: count2; } #toc > ul ul > li > a { counter-reset: count3;} #toc > ul ul ul > li > a:before { content: counter(count1) "." counter(count2) "." counter(count3) " "; counter-increment: count3; } body { counter-reset: countcaption;} h1 { counter-reset: counth2; font-size: 2em; margin: 0 0 0.67em 0; } h2:before { content: counter(counth2) " "; counter-increment: counth2; min-width: 45pt;display:inline-block;} h2 { counter-reset: counth3; } h3:before { content: counter(counth2) "." counter(counth3) " "; counter-increment: counth3; min-width: 45pt;display:inline-block;} h3 { counter-reset: counth4; } h4:before { content: counter(counth2) "." counter(counth3) "." counter(counth4) " "; counter-increment: counth4; min-width: 45pt;display:inline-block;} caption:before { content: "Table " counter(countcaption) ": "; counter-increment: countcaption; font-weight:bold;} h2 a:after, h3 a:after, h4 a:after, dt a[name][href]:after {content: "¶"} h2 a, h3 a, h4 a, dt a[name][href] {color:blue;visibility:hidden;text-decoration:none;} h2:hover a, h3:hover a, h4:hover a, dt:hover a[name][href] {visibility:visible;} q { quotes: "\201C" "\201D" "\2018" "\2019"; } </style> </head> <body> <div> <h1>MLA V1 reference manual</h1> <p>This is the manual for Mid Level Assembley - the not quite C but still higher level while giving low level control Assembley. Designed to extend 64tass</p> <hr> <h2>Table of Contents<a name="contents" href="#contents"></a></h2> <div id="toc"> <ul> <li><a href="#contents">Table of Contents</a></li> <li><a href="#assgins">Immediate assign</a></li> <li><a href="#if">Ifs</a></li> <li><a href="#maths">Maths</a></li> </ul> <hr> <h2>Immediate assign<a name="Immediate assign" href="#assgins"></a></h2> <p>You can use MLA to auto set and outline assigns. It will auto look up and optimise assignement groups. The order in which assignents are made is random each build</p> <pre width=80> !!Destination = Source </pre> <p>There are some special Souce tags to help with optimisations</p> <ul> <li><code>POS</code> - this will choose any other positive value, if none is found 0 is used</li> <li><code>NEG</code> - this will choose any other negative value, if none is found 128 is used</li> <li><code>NOTZERO</code> - this will choose any other value that is not zero, if none if found 1 is used</li> </ul> <pre width=80> !!Test = #5 !!Test2,x = Other,y !!Pos = POS !!Neg = NEG !!Something = NOTZERO !!Other = POS </pre> <p>will generatre for example</p> <pre width=80> lda #128 sta Neg lda #5 sta Test sta Pos sta Something lda Other,y sta Test2,x lda #0 sta Other </pre> <h3>Word Assignments</h3> <p><code>w=</code> is used to copy or assign words</p> <pre width=80> !!Test w= #5000 !!Test2,x w= Other,y </pre> becomes <pre width=80> lda #>5000 sta Test+1 lda Other,y sta Test2,x lda #<5000 sta Test lda Other+1,y sta Test2+1,x</pre> <h3>Run optimisations</h3> <p>The code will detect if numbers or values form a "run" so if you do</p> <pre width=80> !!Test = #5 !!Test2 = #6 </pre> <p>you will get something like</p> <pre width=80> ldx #5 stx Test inx stx Test2</pre> </body> <hr> <h2>Ifs<a name="Ifs" href="#if"></a></h2> <h3>If then</h3> <pre width=80> !!if XX < XX then dest !!if XX <= XX then dest !!if XX == XX then dest !!if XX > XX then dest !!if XX >= XX then dest !!if XX != XX then dest </pre><p>This will subsitute for a load, cmp, branch. If the branch can be optimised, for example >128 to bmi it will be. Also if you do > constant it will make it >= constant + 1</p> <pre width=80> !!if XX =- then dest !!if XX =+ then dest !!if XX =0 then dest !!if XX !0 then dest </pre><p>these are direct compare function, =- is negative, =+ is positive, =0 is beq, !0 is bne</p> <div><table border="0"> <caption>Choosing register</caption> <tbody> <tr><td><code>!!if</code></td><td>this will use a or bit if applicable</td></tr> <tr><td><code>!!ifa</code></td><td>this will use a and never bit</td></tr> <tr><td><code>!!ifx</code></td><td>this will use x</td></tr> <tr><td><code>!!ify</code></td><td>this will use y</td></tr> </tbody></table></div> <h3>If bit</h3> <pre width=80> !!if XX bit XX then dest - beq !!if not XX bit XX then dest - bne</pre> <p>This will do a lda and and then beq or bne based upon the not status. However if you are compraing against #$80 or #$40 and you are using an address mode that bit supports, the code will be optimised to use bit bpl/bmi or bit bvs/bvc as applicable</p> <hr> <h2>Maths<a name="Maths" href="#maths"></a></h2> <pre width=80>!!XX [operator] YY</pre> <div><table border="0"> <caption>operators</caption> <tbody> <tr><td><code>+=</code></td><td>8bits += 8bits</td></tr> <tr><td><code>-=</code></td><td>8bits -= 8bits</td></tr> <tr><td><code><<=</code></td><td>8bits asl a * YY</td></tr> <tr><td><code>>>=</code></td><td>8bits lsr a * YY</td></tr> <tr><td><code>|=</code></td><td>8bits or</td></tr> <tr><td><code>&=</code></td><td>8bits and</td></tr> <tr><td><code>^=</code></td><td>8bits eor</td></tr> </tbody></table></div> <pre width=80>!!XX [operator] YY, ZZ</pre> <div><table border="0"> <caption>compound operations</caption> <tbody> <tr><td><code>&!=</code></td><td>8bits and YY 8bits or ZZ</td></tr> </tbody></table></div>
About
Mid Level Assembler for 6502
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published