__ ______ _______
|__| ______/ __ \\ _ \
| |/ ___/> </ /_\ \
| |\___ \/ -- \ \_/ \
/\__| /____ >______ /\_____ /
\______| \/ \/ \/
js80 is a library and an assembler for z80 cpu.
Installation
npm install js80 -g
Command line
js80asm help:
Usage: js80asm [options] <file ...>
Options:
-h, --help output usage information
-V, --version output the version number
-o, --output <file> create binary compiled file (default a.out)
-I, --include <dir1:dir2:...> add directories into the search list
-s, --sym <file> create sym file
Examples:
js80asm test.asm
js80asm test2.asm -o test2.rom -s test2.sym
js80asm test3.asm -I include:../include2
JS80 class
Creation
var JS80 = ;var js80 = ;
Class functions
- asm js80.asm(code) ··Compile assembler code.
- defineLabel js80.defineLabel(label, value) ·· Defines a new label.
- secondPass js80.secondPass() ··Execute the second pass. The compiler evaluates the expressions because labels can be declared later.
- buildImage js80.buildImage() ··Returns an array of bytes with the compiled code.
- saveImage js80.saveImage(fileName) ··Save compiled code to a file.
- saveSymbols js80.saveSymbols(fileName) ··Save symbols to a file (useful for debugging).
Example:
var JS80 = ;var js80 = ;js80;js80;js80;
Assembler
Inst | Desc |
---|---|
label: | Declares a variable |
.label: | Declares a local label |
// comment // |
Comment code |
/* comment */ |
Comment code |
; comment | Comment code |
inst1\inst2\···\inst-n | Multipe instructions per line |
module | Declares a module |
endmodule | Ends module declaration |
macro | Declares a macro |
endmacro | Ends macro declaration |
ifdef | Branch if label is defined |
ifndef | Branch if label is not defined |
if | Branch if cond is not zero |
else | Else branch |
endif | Ends branching |
repeat | Repeat block of code times |
endrepeat | End repeats code block |
include "filename" | Include another source file |
incbin "filename" | Include a binary file |
rotate | Rotate macro variable arguments |
map | TODO |
# | TODO |
org | TODO |
defpage , , | TODO |
page | TODO |
echo e1, e2, ... | TODO |
error "msg" | TODO |
db e1, e2, ... | TODO |
dw e1, e2, ... | TODO |
dw | TODO |
equ | TODO |
Expressions
Expr | Desc |
---|---|
11001100b, 0b11001100b | binary number |
0x1a, 01ah, $1a | hexadecimal number |
$ | current address |
-n | negate a number |
i-j | substract two numbers |
i+j | sum two numbers |
i*j | mult two numbers |
i/j | div two numbers |
i4j | division module |
(i) | group expression |
i<<j | shift left |
i>>j | shift right |
i^j | xor |
i | j |
i&j | and |
"str" | string |
'i' | char |
# nbytes | get map and move it nbytes |
@0 | macro arguments length |
@number | get macro argument (start from 1) |
Examples
run: ld b,100
.1: ld a,(hl)
inc a
ld (hl),a
inc hl
djnz .1
ret
unuseful:
jr run.1
module mod1
util: xor a
ret
endmodule
// no module
main: call mod1.util ; calling a module label
ret
macro noargs
xor a
endmacro
macro withargs i, j
ld a,i+j
endmacro
macro withdefaults i, j:1, k:2
ld a,i+j+k
endmacro
macro varargs i, 1..*
repeat @0
ld a,i+@1
rotate 1
endrepeat
endmacro
Assembler modules
- bios.asm: MSX 2 Bios functions and variables (bios.WRTVRM, bios.H_KEYI, ...)
- rom16k.asm: MSX 16kb rom setup (start label is the entry point)
- rom32k.asm: MSX 32kb rom setup (start label is the entry point)
- megarom.asm: MSX megarom setup (start label is the entry point)
- extensions.asm: Misc utility macros
- math.asm: Misc math funcs
- debug.asm: OpenMSX debug output
Opcodes
Mnemonic | Z80 Timing | R800 Timing | Opcodes |
---|---|---|---|
ADC A,(HL) | 7 | 2 | 8E |
ADC A,(IX+o) | 19 | 5 | DD 8E oo |
ADC A,(IY+o) | 19 | 5 | FD 8E oo |
ADC A,n | 7 | 2 | CE nn |
ADC A,r | 4 | 1 | 88+r |
ADC A,IXp | 8 | 2 | DD 88+p |
ADC A,IYq | 8 | 2 | FD 88+q |
ADC HL,BC | 15 | 2 | ED 4A |
ADC HL,DE | 15 | 2 | ED 5A |
ADC HL,HL | 15 | 2 | ED 6A |
ADC HL,SP | 15 | 2 | ED 7A |
ADD A,(HL) | 7 | 2 | 86 |
ADD A,(IX+o) | 19 | 5 | DD 86 oo |
ADD A,(IY+o) | 19 | 5 | FD 86 oo |
ADD A,n | 7 | 2 | C6 nn |
ADD A,r | 4 | 1 | 80+r |
ADD A,IXp | 8 | 2 | DD 80+p |
ADD A,IYq | 8 | 2 | FD 80+q |
ADD HL,BC | 11 | 1 | 09 |
ADD HL,DE | 11 | 1 | 19 |
ADD HL,HL | 11 | 1 | 29 |
ADD HL,SP | 11 | 1 | 39 |
ADD IX,BC | 15 | 2 | DD 09 |
ADD IX,DE | 15 | 2 | DD 19 |
ADD IX,IX | 15 | 2 | DD 29 |
ADD IX,SP | 15 | 2 | DD 39 |
ADD IY,BC | 15 | 2 | FD 09 |
ADD IY,DE | 15 | 2 | FD 19 |
ADD IY,IY | 15 | 2 | FD 29 |
ADD IY,SP | 15 | 2 | FD 39 |
AND (HL) | 7 | 2 | A6 |
AND (IX+o) | 19 | 5 | DD A6 oo |
AND (IY+o) | 19 | 5 | FD A6 oo |
AND n | 7 | 2 | E6 nn |
AND r | 4 | 1 | A0+r |
AND IXp | 8 | 2 | DD A0+p |
AND IYq | 8 | 2 | FD A0+q |
BIT b,(HL) | 12 | 3 | CB 46+8*b |
BIT b,(IX+o) | 20 | 5 | DD CB oo 46+8*b |
BIT b,(IY+o) | 20 | 5 | FD CB oo 46+8*b |
BIT b,r | 8 | 2 | CB 40+8*b+r |
CALL C,nn | 17/10 | 5/3 | DC nn nn |
CALL M,nn | 17/10 | 5/3 | FC nn nn |
CALL NC,nn | 17/10 | 5/3 | D4 nn nn |
CALL NZ,nn | 17/10 | 5/3 | C4 nn nn |
CALL P,nn | 17/10 | 5/3 | F4 nn nn |
CALL PE,nn | 17/10 | 5/3 | EC nn nn |
CALL PO,nn | 17/10 | 5/3 | E4 nn nn |
CALL Z,nn | 17/10 | 5/3 | CC nn nn |
CALL nn | 17 | 5 | CD nn nn |
CCF | 4 | 1 | 3F |
CP (HL) | 7 | 2 | BE |
CP (IX+o) | 19 | 5 | DD BE oo |
CP (IY+o) | 19 | 5 | FD BE oo |
CP n | 7 | 2 | FE nn |
CP r | 4 | 1 | B8+r |
CP IXp | 8 | 2 | DD B8+p |
CP IYq | 8 | 2 | FD B8+q |
CPD | 16 | 4 | ED A9 |
CPDR | 21/16 | 4 | ED B9 |
CPI | 16 | 4 | ED A1 |
CPIR | 21/16 | 4 | ED B1 |
CPL | 4 | 1 | 2F |
DAA | 4 | 1 | 27 |
DEC (HL) | 11 | 4 | 35 |
DEC (IX+o) | 23 | 7 | DD 35 oo |
DEC (IY+o) | 23 | 7 | FD 35 oo |
DEC BC | 6 | 1 | 0B |
DEC DE | 6 | 1 | 1B |
DEC HL | 6 | 1 | 2B |
DEC IX | 10 | 2 | DD 2B |
DEC IY | 10 | 2 | FD 2B |
DEC A | 4 | 1 | 3D |
DEC B | 4 | 1 | 05 |
DEC C | 4 | 1 | 0D |
DEC D | 4 | 1 | 15 |
DEC E | 4 | 1 | 1D |
DEC H | 4 | 1 | 25 |
DEC IXp | 8 | 2 | DD 05+8*p |
DEC IYq | 8 | 2 | FD 05+8*q |
DEC L | 4 | 1 | 2D |
DEC SP | 6 | 1 | 3B |
DI | 4 | 2 | F3 |
DJNZ o | 13/8 | 2 | 10 oo |
EI | 4 | 1 | FB |
EX (SP),HL | 19 | 5 | E3 |
EX (SP),IX | 23 | 6 | DD E3 |
EX (SP),IY | 23 | 6 | FD E3 |
EX AF,AF' | 4 | 1 | 08 |
EX DE,HL | 4 | 1 | EB |
EXX | 4 | 1 | D9 |
HALT | 4 | 2 | 76 |
IM 0 | 8 | 3 | ED 46 |
IM 1 | 8 | 3 | ED 56 |
IM 2 | 8 | 3 | ED 5E |
IN A,(C) | 12 | 3 | ED 78 |
IN A,(n) | 11 | 3 | DB nn |
IN B,(C) | 12 | 3 | ED 40 |
IN C,(C) | 12 | 3 | ED 48 |
IN D,(C) | 12 | 3 | ED 50 |
IN E,(C) | 12 | 3 | ED 58 |
IN H,(C) | 12 | 3 | ED 60 |
IN L,(C) | 12 | 3 | ED 68 |
IN F,(C) | 12 | 3 | ED 70 |
INC (HL) | 11 | 4 | 34 |
INC (IX+o) | 23 | 7 | DD 34 oo |
INC (IY+o) | 23 | 7 | FD 34 oo |
INC BC | 6 | 1 | 03 |
INC DE | 6 | 1 | 13 |
INC HL | 6 | 1 | 23 |
INC IX | 10 | 2 | DD 23 |
INC IY | 10 | 2 | FD 23 |
INC A | 4 | 1 | 3C |
INC B | 4 | 1 | 04 |
INC C | 4 | 1 | 0C |
INC D | 4 | 1 | 14 |
INC E | 4 | 1 | 1C |
INC H | 4 | 1 | 24 |
INC L | 4 | 1 | 2C |
INC IXp | 8 | 2 | DD 04+8*p |
INC IYq | 8 | 2 | FD 04+8*q |
INC SP | 6 | 1 | 33 |
IND | 16 | 4 | ED AA |
INDR | 21/16 | 4/3 | ED BA |
INI | 16 | 4 | ED A2 |
INIR | 21/16 | 4/3 | ED B2 |
JP (HL) | 4 | 1 | E9 |
JP (IX) | 8 | 2 | DD E9 |
JP (IY) | 8 | 2 | FD E9 |
JP C,nn | 10 | 3 | DA nn nn |
JP M,nn | 10 | 3 | FA nn nn |
JP NC,nn | 10 | 3 | D2 nn nn |
JP NZ,nn | 10 | 3 | C2 nn nn |
JP P,nn | 10 | 3 | F2 nn nn |
JP PE,nn | 10 | 3 | EA nn nn |
JP PO,nn | 10 | 3 | E2 nn nn |
JP Z,nn | 10 | 3 | CA nn nn |
JP nn | 10 | 3 | C3 nn nn |
JR C,o | 12/7 | 3/2 | 38 oo |
JR NC,o | 12/7 | 3/2 | 30 oo |
JR NZ,o | 12/7 | 3/2 | 20 oo |
JR Z,o | 12/7 | 3/2 | 28 oo |
JR o | 12 | 3 | 18 oo |
LD (BC),A | 7 | 2 | 02 |
LD (DE),A | 7 | 2 | 12 |
LD (HL),n | 10 | 3 | 36 nn |
LD (HL),r | 7 | 2 | 70+r |
LD (IX+o),n | 19 | 5 | DD 36 oo nn |
LD (IX+o),r | 19 | 5 | DD 70+r oo |
LD (IY+o),n | 19 | 5 | FD 36 oo nn |
LD (IY+o),r | 19 | 5 | FD 70+r oo |
LD (nn),A | 13 | 4 | 32 nn nn |
LD (nn),BC | 20 | 6 | ED 43 nn nn |
LD (nn),DE | 20 | 6 | ED 53 nn nn |
LD (nn),HL | 16 | 5 | 22 nn nn |
LD (nn),IX | 20 | 6 | DD 22 nn nn |
LD (nn),IY | 20 | 6 | FD 22 nn nn |
LD (nn),SP | 20 | 6 | ED 73 nn nn |
LD A,(BC) | 7 | 2 | 0A |
LD A,(DE) | 7 | 2 | 1A |
LD A,(HL) | 7 | 2 | 7E |
LD A,(IX+o) | 19 | 5 | DD 7E oo |
LD A,(IY+o) | 19 | 1 | FD 7E oo |
LD A,(nn) | 13 | 4 | 3A nn nn |
LD A,n | 7 | 2 | 3E nn |
LD A,r | 4 | 1 | 78+r |
LD A,IXp | 8 | 2 | DD 78+p |
LD A,IYq | 8 | 2 | FD 78+q |
LD A,I | 9 | 2 | ED 57 |
LD A,R | 9 | 2 | ED 5F |
LD B,(HL) | 7 | 2 | 46 |
LD B,(IX+o) | 19 | 5 | DD 46 oo |
LD B,(IY+o) | 19 | 5 | FD 46 oo |
LD B,n | 7 | 2 | 06 nn |
LD B,r | 4 | 1 | 40+r |
LD B,IXp | 8 | 2 | DD 40+p |
LD B,IYq | 8 | 2 | FD 40+q |
LD BC,(nn) | 20 | 6 | ED 4B nn nn |
LD BC,nn | 10 | 3 | 01 nn nn |
LD C,(HL) | 7 | 2 | 4E |
LD C,(IX+o) | 19 | 5 | DD 4E oo |
LD C,(IY+o) | 19 | 5 | FD 4E oo |
LD C,n | 7 | 2 | 0E nn |
LD C,r | 4 | 1 | 48+r |
LD C,IXp | 8 | 2 | DD 48+p |
LD C,IYq | 8 | 2 | FD 48+q |
LD D,(HL) | 7 | 2 | 56 |
LD D,(IX+o) | 19 | 5 | DD 56 oo |
LD D,(IY+o) | 19 | 5 | FD 56 oo |
LD D,n | 7 | 2 | 16 nn |
LD D,r | 4 | 1 | 50+r |
LD D,IXp | 8 | 2 | DD 50+p |
LD D,IYq | 8 | 2 | FD 50+q |
LD DE,(nn) | 20 | 6 | ED 5B nn nn |
LD DE,nn | 10 | 3 | 11 nn nn |
LD E,(HL) | 7 | 2 | 5E |
LD E,(IX+o) | 19 | 5 | DD 5E oo |
LD E,(IY+o) | 19 | 5 | FD 5E oo |
LD E,n | 7 | 2 | 1E nn |
LD E,r | 4 | 1 | 58+r |
LD E,IXp | 8 | 2 | DD 58+p |
LD E,IYq | 8 | 2 | FD 58+q |
LD H,(HL) | 7 | 2 | 66 |
LD H,(IX+o) | 19 | 5 | DD 66 oo |
LD H,(IY+o) | 19 | 5 | FD 66 oo |
LD H,n | 7 | 2 | 26 nn |
LD H,r | 4 | 1 | 60+r |
LD HL,(nn) | 16 | 5 | 2A nn nn |
LD HL,nn | 10 | 3 | 21 nn nn |
LD I,A | 9 | 2 | ED 47 |
LD IX,(nn) | 20 | 6 | DD 2A nn nn |
LD IX,nn | 14 | 4 | DD 21 nn nn |
LD IXh,n | 11 | 3 | DD 26 nn |
LD IXh,p | 8 | 2 | DD 60+p |
LD IXl,n | 11 | 3 | DD 2E nn |
LD IXl,p | 8 | 2 | DD 68+p |
LD IY,(nn) | 20 | 6 | FD 2A nn nn |
LD IY,nn | 14 | 4 | FD 21 nn nn |
LD IYh,n | 11 | 3 | FD 26 nn |
LD IYh,q | 8 | 2 | FD 60+q |
LD IYl,n | 11 | 3 | FD 2E nn |
LD IYl,q | 8 | 2 | FD 68+q |
LD L,(HL) | 7 | 2 | 6E |
LD L,(IX+o) | 19 | 5 | DD 6E oo |
LD L,(IY+o) | 19 | 5 | FD 6E oo |
LD L,n | 7 | 2 | 2E nn |
LD L,r | 4 | 1 | 68+r |
LD R,A | 9 | 2 | ED 4F |
LD SP,(nn) | 20 | 6 | ED 7B nn nn |
LD SP,HL | 6 | 1 | F9 |
LD SP,IX | 10 | 2 | DD F9 |
LD SP,IY | 10 | 2 | FD F9 |
LD SP,nn | 10 | 3 | 31 nn nn |
LDD | 16 | 4 | ED A8 |
LDDR | 21/16 | 4 | ED B8 |
LDI | 16 | 4 | ED A0 |
LDIR | 21/16 | 4 | ED B0 |
MULUB A,r | 14 | ED C1+8*r | |
MULUW HL,BC | 36 | ED C3 | |
MULUW HL,SP | 36 | ED F3 | |
NEG | 8 | 2 | ED 44 |
NOP | 4 | 1 | 00 |
OR (HL) | 7 | 2 | B6 |
OR (IX+o) | 19 | 5 | DD B6 oo |
OR (IY+o) | 19 | 5 | FD B6 oo |
OR n | 7 | 2 | F6 nn |
OR r | 4 | 1 | B0+r |
OR IXp | 8 | 2 | DD B0+p |
OR IYq | 8 | 2 | FD B0+q |
OTDR | 21/16 | 4/3 | ED BB |
OTIR | 21/16 | 4/3 | ED B3 |
OUT (C),A | 12 | 3 | ED 79 |
OUT (C),B | 12 | 3 | ED 41 |
OUT (C),C | 12 | 3 | ED 49 |
OUT (C),D | 12 | 3 | ED 51 |
OUT (C),E | 12 | 3 | ED 59 |
OUT (C),H | 12 | 3 | ED 61 |
OUT (C),L | 12 | 3 | ED 69 |
OUT (n),A | 11 | 3 | D3 nn |
OUTD | 16 | 4 | ED AB |
OUTI | 16 | 4 | ED A3 |
POP AF | 10 | 3 | F1 |
POP BC | 10 | 3 | C1 |
POP DE | 10 | 3 | D1 |
POP HL | 10 | 3 | E1 |
POP IX | 14 | 4 | DD E1 |
POP IY | 14 | 4 | FD E1 |
PUSH AF | 11 | 4 | F5 |
PUSH BC | 11 | 4 | C5 |
PUSH DE | 11 | 4 | D5 |
PUSH HL | 11 | 4 | E5 |
PUSH IX | 15 | 5 | DD E5 |
PUSH IY | 15 | 5 | FD E5 |
RES b,(HL) | 15 | 5 | CB 86+8*b |
RES b,(IX+o) | 23 | 7 | DD CB oo 86+8*b |
RES b,(IY+o) | 23 | 7 | FD CB oo 86+8*b |
RES b,r | 8 | 2 | CB 80+8*b+r |
RET C | 11/5 | 3/1 | D8 |
RET M | 11/5 | 3/1 | F8 |
RET NC | 11/5 | 3/1 | D0 |
RET NZ | 11/5 | 3/1 | C0 |
RET P | 11/5 | 3/1 | F0 |
RET PE | 11/5 | 3/1 | E8 |
RET PO | 11/5 | 3/1 | E0 |
RET Z | 11/5 | 3/1 | C8 |
RET | 10 | 3 | C9 |
RETI | 14 | 5 | ED 4D |
RETN | 14 | 5 | ED 45 |
RL (HL) | 15 | 5 | CB 16 |
RL (IX+o) | 23 | 7 | DD CB oo 16 |
RL (IY+o) | 23 | 7 | FD CB oo 16 |
RL r | 8 | 2 | CB 10+r |
RLA | 4 | 1 | 17 |
RLC (HL) | 15 | 5 | CB 06 |
RLC (IX+o) | 23 | 7 | DD CB oo 06 |
RLC (IY+o) | 23 | 7 | FD CB oo 06 |
RLC r | 8 | 2 | CB 00+r |
RLCA | 4 | 1 | 07 |
RLD | 18 | 5 | ED 6F |
RR (HL) | 15 | 5 | CB 1E |
RR (IX+o) | 23 | 7 | DD CB oo 1E |
RR (IY+o) | 23 | 7 | FD CB oo 1E |
RR r | 8 | 2 | CB 18+r |
RRA | 4 | 1 | 1F |
RRC (HL) | 15 | 5 | CB 0E |
RRC (IX+o) | 23 | 7 | DD CB oo 0E |
RRC (IY+o) | 23 | 7 | FD CB oo 0E |
RRC r | 8 | 2 | CB 08+r |
RRCA | 4 | 1 | 0F |
RRD | 18 | 5 | ED 67 |
RST 0 | 11 | 4 | C7 |
RST 8H | 11 | 4 | CF |
RST 10H | 11 | 4 | D7 |
RST 18H | 11 | 4 | DF |
RST 20H | 11 | 4 | E7 |
RST 28H | 11 | 4 | EF |
RST 30H | 11 | 4 | F7 |
RST 38H | 11 | 4 | FF |
SBC A,(HL) | 7 | 2 | 9E |
SBC A,(IX+o) | 19 | 5 | DD 9E oo |
SBC A,(IY+o) | 19 | 5 | FD 9E oo |
SBC A,n | 7 | 2 | DE nn |
SBC A,r | 4 | 1 | 98+r |
SBC A,IXp | 8 | 2 | DD 98+p |
SBC A,IYq | 8 | 2 | FD 98+q |
SBC HL,BC | 15 | 2 | ED 42 |
SBC HL,DE | 15 | 2 | ED 52 |
SBC HL,HL | 15 | 2 | ED 62 |
SBC HL,SP | 15 | 2 | ED 72 |
SCF | 4 | 1 | 37 |
SET b,(HL) | 15 | 5 | CB C6+8*b |
SET b,(IX+o) | 23 | 7 | DD CB oo C6+8*b |
SET b,(IY+o) | 23 | 7 | FD CB oo C6+8*b |
SET b,r | 8 | 2 | CB C0+8*b+r |
SLA (HL) | 15 | 5 | CB 26 |
SLA (IX+o) | 23 | 7 | DD CB oo 26 |
SLA (IY+o) | 23 | 7 | FD CB oo 26 |
SLA r | 8 | 2 | CB 20+r |
SRA (HL) | 15 | 5 | CB 2E |
SRA (IX+o) | 23 | 7 | DD CB oo 2E |
SRA (IY+o) | 23 | 7 | FD CB oo 2E |
SRA r | 8 | 2 | CB 28+r |
SRL (HL) | 15 | 5 | CB 3E |
SRL (IX+o) | 23 | 7 | DD CB oo 3E |
SRL (IY+o) | 23 | 7 | FD CB oo 3E |
SRL r | 8 | 2 | CB 38+r |
SUB (HL) | 7 | 2 | 96 |
SUB (IX+o) | 19 | 5 | DD 96 oo |
SUB (IY+o) | 19 | 5 | FD 96 oo |
SUB n | 7 | 2 | D6 nn |
SUB r | 4 | 1 | 90+r |
SUB IXp | 8 | 2 | DD 90+p |
SUB IYq | 8 | 2 | FD 90+q |
XOR (HL) | 7 | 2 | AE |
XOR (IX+o) | 19 | 5 | DD AE oo |
XOR (IY+o) | 19 | 5 | FD AE oo |
XOR n | 7 | 2 | EE nn |
XOR r | 4 | 1 | A8+r |
XOR IXp | 8 | 2 | DD A8+p |
XOR IYq | 8 | 2 | FD A8+ |