mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-01-11 13:29:44 +00:00
Update Architecture.md
This commit is contained in:
parent
d9a2298c76
commit
d23dba2cc2
@ -19,70 +19,71 @@ One of the biggest problems to overcome with the 6502 is its very small hardware
|
||||
### The Bytecodes
|
||||
The compact code representation comes through the use of opcodes closely matched to the PLASMA compiler. They are:
|
||||
|
||||
| OPCODE | Description
|
||||
|:------:|-----------------------------------
|
||||
| ZERO | push zero on the stack
|
||||
| ADD | add top two values, leave result on top
|
||||
| SUB | subtract next from top from top, leave result on top
|
||||
| MUL | multiply two topmost stack values, leave result on top
|
||||
| DIV | divide next from top by top, leave result on top
|
||||
| MOD | divide next from top by top, leave remainder on top
|
||||
| INCR | increment top of stack
|
||||
| DECR | decrement top of stack
|
||||
| NEG | negate top of stack
|
||||
| COMP | compliment top of stack
|
||||
| AND | bit wise AND top two values, leave result on top
|
||||
| IOR | bit wise inclusive OR top two values, leave result on top
|
||||
| XOR | bit wise exclusive OR top two values, leave result on top
|
||||
| LOR | logical OR top two values, leave result on top
|
||||
| LAND | logical AND top two values, leave result on top
|
||||
| SHL | shift left next from top by top, leave result on top
|
||||
| SHR | shift right next from top by top, leave result on top
|
||||
| IDXB | add top of stack to next from top, leave result on top (ADD)
|
||||
| IDXW | add 2X top of stack to next from top, leave result on top
|
||||
| NOT | logical NOT of top of stack
|
||||
| LA | load address
|
||||
| LLA | load local address from frame offset
|
||||
| CB | constant byte
|
||||
| CW | constant word
|
||||
| SWAP | swap two topmost stack values
|
||||
| DROP | drop top stack value
|
||||
| DUP | duplicate top stack value
|
||||
| PUSH | push top to call stack
|
||||
| PULL | pull from call stack
|
||||
| BRGT | branch next from top greater than top
|
||||
| BRLT | branch next from top less than top
|
||||
| BREQ | branch next from top equal to top
|
||||
| BRNE | branch next from top not equal to top
|
||||
| ISEQ | if next from top is equal to top, set top true
|
||||
| ISNE | if next from top is not equal to top, set top true
|
||||
| ISGT | if next from top is greater than top, set top true
|
||||
| ISLT | if next from top is less than top, set top true
|
||||
| ISGE | if next from top is greater than or equal to top, set top true
|
||||
| ISLE | if next from top is less than or equal to top, set top true
|
||||
| BRFLS | branch if top of stack is zero
|
||||
| BRTRU | branch if top of stack is non-zero
|
||||
| BRNCH | branch to address
|
||||
| CALL | sub routine call with stack parameters
|
||||
| ICAL | sub routine call to indirect address on stack top with stack parameters
|
||||
| ENTER | allocate frame size and copy stack parameters to local frame
|
||||
| LEAVE | deallocate frame and return from sub routine call
|
||||
| RET | return from sub routine call
|
||||
| LB | load byte from top of stack address
|
||||
| LW | load word from top of stack address
|
||||
| LLB | load byte from frame offset
|
||||
| LLW | load word from frame offset
|
||||
| LAB | load byte from absolute address
|
||||
| LAW | load word from absolute address
|
||||
| SB | store top of stack byte into next from top address
|
||||
| SW | store top of stack word into next from top address
|
||||
| SLB | store top of stack into local byte at frame offset
|
||||
| SLW | store top of stack into local word at frame offset
|
||||
| SAB | store top of stack into byte at absolute address
|
||||
| SAW | store top of stack into word at absolute address
|
||||
| DLB | duplicate top of stack into local byte at frame offset
|
||||
| DLW | duplicate top of stack into local word at frame offset
|
||||
| DAB | duplicate top of stack into byte at absolute address
|
||||
| DAW | duplicate top of stack into word at absolute address
|
||||
| OPCODE | Name | Description
|
||||
|:------:|:------:|-----------------------------------
|
||||
| $00 | ZERO | push zero on the stack
|
||||
| $02 | ADD | add top two values, leave result on top
|
||||
| $04 | SUB | subtract next from top from top, leave result on top
|
||||
| $06 | MUL | multiply two topmost stack values, leave result on top
|
||||
| $08 | DIV | divide next from top by top, leave result on top
|
||||
| $0A | MOD | divide next from top by top, leave remainder on top
|
||||
| $0C | INCR | increment top of stack
|
||||
| $0E | DECR | decrement top of stack
|
||||
| $10 | NEG | negate top of stack
|
||||
| $12 | COMP | compliment top of stack
|
||||
| $14 | AND | bit wise AND top two values, leave result on top
|
||||
| $16 | IOR | bit wise inclusive OR top two values, leave result on top
|
||||
| $18 | XOR | bit wise exclusive OR top two values, leave result on top
|
||||
| $1A | SHL | shift left next from top by top, leave result on top
|
||||
| $1C | SHR | shift right next from top by top, leave result on top
|
||||
| $02 | IDXB | add top of stack to next from top, leave result on top (ADD)
|
||||
| $1E | IDXW | add 2X top of stack to next from top, leave result on top
|
||||
| $20 | NOT | logical NOT of top of stack
|
||||
| $22 | LOR | logical OR top two values, leave result on top
|
||||
| $24 | LAND | logical AND top two values, leave result on top
|
||||
| $26 | LA | load address
|
||||
| $28 | LLA | load local address from frame offset
|
||||
| $2A | CB | constant byte
|
||||
| $2C | CW | constant word
|
||||
| $2E | SWAP | swap two topmost stack values
|
||||
| $30 | DROP | drop top stack value
|
||||
| $32 | DUP | duplicate top stack value
|
||||
| $34 | PUSH | push top to call stack
|
||||
| $36 | PULL | pull from call stack
|
||||
| $38 | BRGT | branch next from top greater than top
|
||||
| $3A | BRLT | branch next from top less than top
|
||||
| $3C | BREQ | branch next from top equal to top
|
||||
| $3E | BRNE | branch next from top not equal to top
|
||||
| $40 | ISEQ | if next from top is equal to top, set top true
|
||||
| $42 | ISNE | if next from top is not equal to top, set top true
|
||||
| $44 | ISGT | if next from top is greater than top, set top true
|
||||
| $46 | ISLT | if next from top is less than top, set top true
|
||||
| $48 | ISGE | if next from top is greater than or equal to top, set top true
|
||||
| $4A | ISLE | if next from top is less than or equal to top, set top true
|
||||
| $4C | BRFLS | branch if top of stack is zero
|
||||
| $4E | BRTRU | branch if top of stack is non-zero
|
||||
| $50 | BRNCH | branch to address
|
||||
| $52 | IBRNCH | branch to address on stack top
|
||||
| $54 | CALL | sub routine call with stack parameters
|
||||
| $56 | ICAL | sub routine call to address on stack top with stack parameters
|
||||
| $58 | ENTER | allocate frame size and copy stack parameters to local frame
|
||||
| $5A | LEAVE | deallocate frame and return from sub routine call
|
||||
| $5C | RET | return from sub routine call
|
||||
| $60 | LB | load byte from top of stack address
|
||||
| $62 | LW | load word from top of stack address
|
||||
| $64 | LLB | load byte from frame offset
|
||||
| $66 | LLW | load word from frame offset
|
||||
| $68 | LAB | load byte from absolute address
|
||||
| $6A | LAW | load word from absolute address
|
||||
| $6C | DLB | duplicate top of stack into local byte at frame offset
|
||||
| $6E | DLW | duplicate top of stack into local word at frame offset
|
||||
| $70 | SB | store top of stack byte into next from top address
|
||||
| $72 | SW | store top of stack word into next from top address
|
||||
| $74 | SLB | store top of stack into local byte at frame offset
|
||||
| $76 | SLW | store top of stack into local word at frame offset
|
||||
| $78 | SAB | store top of stack into byte at absolute address
|
||||
| $7A | SAW | store top of stack into word at absolute address
|
||||
| $7C | DAB | duplicate top of stack into byte at absolute address
|
||||
| $7E | DAW | duplicate top of stack into word at absolute address
|
||||
|
||||
The opcodes were developed over time by starting with a very basic set of operations and slowly adding opcodes when the PLASMA compiler could improve code density or performance.
|
||||
|
Loading…
x
Reference in New Issue
Block a user