npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

i40xx-asm

v1.1.0

Published

Assembler for intel 4004/4040 microprocessors

Downloads

10

Readme

i40xx-asm

npm version

Assembly for Intel 4004/4040 architecture

Installation

Install globally:

npm install -g i40xx-asm

Usage

Compiles program.i4004 into ROM image and store it into program.bin

i40xx-asm program.i4004 program.bin 

You can omit output file name, in that case assembler would replace extension of input file name to .bin

Assembly Syntax

Comments started with #:

# comment

Labels could be used:

label:
  NOP
label2: DCL

Each instruction should be on separate line and can have 0, 1, or 2 operands:

  instruction
  instruction operand
  instruction operand1, operand2

Operand could be one of kind:

  • 4-bit index register, format is rrX, where X is [1..16]: LD rr10
  • 8-bit index register pair, format is rX, where X is [1..8]: FIN r3
  • immediate value, either hex or decimal: LDM 0xF / FIM r2, 200
  • ROM address, format is XX:YYY, where XX is page number (in decimal form) and YYY is offset inside page: JUN 5:0xDD
  • label name: ISZ rr5, do_loop
  • condition (for JCN instruction), combination of symbols n (invert condition), z (if zero), t (if test signal is 0), c (if carry): JCN nz, non_zero

Sample program (iterate through all RAM banks, RAM chips and their registers and fill RAM words by specific value):

  FIM r0, 0x80
loop_bank:
  // select bank
  LD rr1
  DCL
  // iterate through reg number
  FIM r1, 0x00
loop_reg:
  LDM 0
  XCH rr3
  SRC r1
  LD rr1
  WRM // write rr1 to [#rr1, #rr2, M0]
  WR0 // write rr1 to [#rr1, #rr2, S0]
  INC rr3
  SRC r1
  LD rr2
  WRM // write rr2 to [#rr1, #rr2, M1]
  WR1 // write rr2 to [#rr1, #rr2, S1]
  ISZ rr2, loop_reg
  INC rr1
  ISZ rr0, loop_bank
halt:
  JUN halt

Module/Programmatic Usage

i40xx-asm can be required as a module:

const { compile } = require('i40xx-asm');

const { errors, blocks } = compile('nop');
if (Array.isArray(errors) && errors.length) {
  console.log(errors);
  process.exit(1);
}

console.log(`First byte of first block is ${blocks[0].bytecode[0]}`);