ASM80: New features in April

 My projects, Programming  Comments Off on ASM80: New features in April
Apr 052018
 

Dear ASM80 users…

I am still working on bug fixes and new features. Big THANKS to all who report me bugs or suggest new features (Jeff, Sandor etc.)

Bugfixes contain:

  • fixed error for macros without parameters
  • better error messages (some of them was misleading, like the “internal error”)
  • Z80 fix for IX+…, IY+… – now assembler checks limits (before was “modulo 256”)
  • Workspace downloading
  • Better listing format (for long labels etc.)
  • Better documentation of math operators

New features:

  • Did you try the ASM TOOLS? It contains math function table generator and HEX 2 BIN converter!
  • ASM80 has a feature for download binary file (BIN) instead of HEX. Two new directives were added – binfrom and binto – for easy setting memory range to export. Consult docs for further details.
  • IDE has now a “Find A Label Definition” feature. Just press CTRL (META) key and double click on the label name, e.g. in the CALL instruction, and editor will find the label definition.
  • IDE has now an auto-complete feature: write first two, three letters and press Ctrl+SPACE (on macOS it is Control too, not Meta – I am sorry, but the editor is a 3rd side software), the editor will suggest you symbol names.
  • Workspaces and its synchronization caused some problems. Big apologies to all who challenges data loss, I am really sorry about that. Opening workspace again now does not overwrite local content, but merge it together. Conflict files are stored in both variant, you have to decide which one is recent. There is a “workspace auto-sync” feature, which saves the whole workspace remotely on each file save. It can be a little slower, but your files are saved safely.

About workspaces and its syncing there are some scenarios you can face to:

  1. Open remote workspace A with the same workspace opened locally: Remote files are merged with local.
  2. Open remote workspace A with another workspace B opened locally: You can save local workspace B to remote storage (prompted) and then remote workspace A is opened.
  3. Press SYNC WORKSPACE: Current workspace is merged with remote version and then saved.
  4. Press SAVE WORKSPACE: A remote version of current workspace is OVERWRITTEN by local version! (Be caution, this is a scenario you can delete a file in remote storage!)
  5. How to delete a file in the remote workspace? Just delete the file locally and then SAVE workspace (not SYNC, because of synchronization will download the deleted file from the remote storage first)

I hope you find these updates useful.

ASM80: Debugging stuff

 My projects, Programming  Comments Off on ASM80: Debugging stuff
Dec 032017
 

I have revisited the ASM80 integrated debugger. I mean that part you can use when try to EMULATE any common code.

The part I have focused on is the upper part with the memory. Here is a change list:

  1. You can click on a memory cell and enter a new value to fill in.
  2. You can scroll memory up and down by mouse wheel.
  3. You can fill a block of memory with three input boxes right under the memory block. From left: FROM, TO, VALUE. Enter appropriate values and click on FILL
  4. You can enter a string or a list of numbers into memory at given addres. The last line provides this functionality. Simply enter the address, from you want to enter into memory, and click to STR (entering ASCII string) or NUMS (entering numbers – comma-separated list).

Have fun and enjoy!


ASM80: New directives, some fixes, new login system

 My projects, Programming  Comments Off on ASM80: New directives, some fixes, new login system
Sep 162017
 

Hello folks, as you can noticed, there is some progress with ASM80.com online IDE and compiler.

Last time I have introduced new features: generic emulator and assembler toolkit.

Today I would like to introduce some features you will love, I guess…

First of all: ASM80 Manual, published with GitBook. Enjoy!

Directives

I have added three directives: .cstr, .pstr and .istr. All of them is suitable for defining a string, like DB “blahblah”, but:

.cstr When you need write a zero-ended string (C style), you can use DB "Hello",0 – or simple .cstr "Hello"
.pstr Similar as .cstr, but there is no trailing zero. .pstr is a Pascal-style string: first byte is length, then string. So .pstr "Hello" is equal to DB 5, "Hello".
.istr Strings are often defined as simple ASCII, where the last byte has bit 7 set to 1. So .istr "Hello" is the same as DB "Hell","o"+0x80

Terminal capturing and transmitting

With Generic Emulator you can now easy capture terminal out to the text file (press “capture” under the display, press again to stop capturing and save file). You can send file to terminal too, just click to the file name with RMB and select “Send to terminal”

New login system

I have decided to deprecate old login system, it was not good. From now you can log in with GitHub account, Twitter account, Google account or Facebook account. You can link more such accounts together, of course. Your workspaces is now saved in Firebase DB. Your old workspaces are preserved, but it requires old way of login, so I recommend to save them into the new system.

Bug fixed

There was a bug in a .block feature – in some circumstances with 6502 code assembler can decide to use shorter addressing mode, so .block can be moved during the evaluation passes to another address. Now assembler reflect these changes and provide true addresses for inner @labels.

Assembler for 8080, Z80, 6502 and much more…

 6502, Microprocessors, My projects, Programming, Z80  Comments Off on Assembler for 8080, Z80, 6502 and much more…
Nov 272016
 

Readers certainly know my ASM80 – online assembler / IDE for eight-bit processors. I made several derived versions, like single page compiler, embedded version of the translator (I used it in tutorial Stroják.cz), or a stand-alone IDE. The good old command line assembler is here now too.

The prerequisite you have to meet is a functional Node.js environment. It is not complicated, it exists for all major platforms, and you can download it here: nodejs.org. During installation, package manager called NPM is installed too.

NPM is used for install the packages and libraries. To install ASM80 itself just run a command prompt and type:

-g causes the asm80 will not be installed as a library, but as a system tool. Then toy can invoke it as a standard command line utility:

launches translation for file test.a80 and the result will be two files: test.hex with output and test.lst with the translation protocol. Extension .a80 tells the compiler to use the processor’s instruction set for Intel 8080 CPU.

Behaviour can be influenced by parameters. You can set the output file name, you can suppress the generation .lst, or explicitly determine the processor type and format of the output file (besides HEX and S record it can output .COM files for CP/M, .PRG for C64 emulators, or SNA and TAP for ZX Spectrum).

Options are:

  • -o, --output <file> Output file name
  • -t, --type <type> Output type [default: hex]. Available types are: hex, srec, com (for CP/M), sna, tap (for ZX Spectrum), prg (for C64)
  • -n, --nolist Suppress listing (.lst file)
  • -m, --machine <type> Processor type, one of the following: Z80, I8080, C6502, C65816, CDP1802, M6800, M6809
  • -h, --help See HELP

Machine type can be omitted. Right CPU is determined by file name extension (-m option overrides this decision).

  • Intel 8080: .A80
  • Zilog Z80: .Z80
  • Motorola 6800: .A68
  • Motorola 6809: .A09
  • MOS 6502: .A65
  • WDT 65816: .816
  • CDP 1802: .A18

These parameters are described on page NPM package ASM80.

Overview of the syntax and directives can be found on GitHub Pages.

I still have a few suggestions for improvements, I would like to know your opinion …

  • Create a library system, as it has the classic assemblers, which separates translation and linking. So users will have the opportunity to make a library of subroutines, which would include only those parts of the code that are necessary for proper function. You can easily make something like the “standard C library” for your system …
  • Having the opportunity to directly link public code, for example on GitHub.
  • … More processors? Systems?

Thanks for the tips and suggestions. You can send them straight to the GitHub Issues.

Nov 152014
 

A long time ago I started to play with 8bit CPUs and old computers… again.

There is a lot of development tools for these computers, a tons of assemblers and utilities for any OS, from CP/M to Mac OS, DOS, Linux and Windows including. So there is no space for a new one. But internet is a magic “big space for everything”. 🙂

When I bought Phil’s V6Z80P, I used PASMO assembler. It is a great state-of-the-art assembler, really perfect. But over time I had a lot of assemblers, compilers and IDEs for different CPUs somewhere on my disk. And one day my disk crashed. So I wished to have “an online PASMO”.

At first I made online editor with server-side PASMO. You wrote a code in your browser, pressed COMPILE, code went to the server, PASMO did its magic and send back my HEX (or BIN or whatever). Great thing! Later I’ve added FLASH-based Spectrum emulator, so I could write programs for ZXS, compile it and try it directly in emulator. But I never published this tool.

One year ago I’ve decided to reinvent my wheel again, and this time without server back support. I choose text editor in JavaScript and start development of my very own assembler engine. My goal was to create a modular assembler for different 8bit CPUs, from 8080 to 6809, with simillar syntax. I’ve integrated it with the editor into one “IDE”. Later I added CPU emulating engines, so you could debug your compiled code. Then I added whole computer emulations…

And all of this is free, online, partially open source.

The main part is ASM80.com. This is a web-based IDE with following features:

  • Code editor
  • Simulated workspace for your files (it’s stored technically in your browser, so you haven’t to got any “server account”)
  • Compiling engines for 8080/8085, Z80, 6502, 6800 and 6809 CPU
  • Embedded emulators for all these CPUs
  • Emulators for some computers:
  • Nearly the same syntax and directives for all CPUs
  • Macros
  • Preprocessor

Here is an assembler description and here is source code for the engine.

During my work on ASM80 I developed some minor things in JavaScript. All of these are open source too: 6850js (6850 emulator), 6809 emulator or enhanced 8080js emulator, which can pass through the Examiner test (so every bit works, every T cycle is valid…)

Then I’ve derived small one-page assemblers for all supported CPUs. You can save it in your Favorites or at your local disk and use for simple compiling.

And the newest part of ASM80 family is an IDE80. It’s technically ASM80, with IDE, assembler, debugger and emulatore, repacked and compiled as a desktop application. It’s in beta version, just for Windows at this time, but Linux and Mac OS X versions should came very soon. You can watch a video showing first steps with this IDE.

At this time I’m working on further improvements:

  • Structures in assembler
  • C64 or Atari emulator in JavaScript
  • KIM-1 emulator
  • modules for generating not just HEX or S19, but TAP, SNA, PRG and other popular formats for 8bit computers.

Update 11/16/2014: Beta version of KIM-1 emulator is ready and deployed…

 

Feb 232013
 

Why not? The VisualMicro plugin for Microsoft Visual Studio allows an Arduino project (with code completion) to be developed, compiled and then uploaded to any Arduino micro-processor. This plugin works with full MS Visual Studio, but don’t worry – you can get MSVS legally for 3 years, and here is more about this offer. Arduino for Visual Studio is a free Arduino development alternative that provides 100% compatibility with the Arduino programming IDE 0023, 1.0.1, 1.0.2 (1.5 coming soon). Unlike other Arduino plugins, this plugin ensures compatibility with all arduino open source projects. The plugin brings the same ease of programming to Visual Studio that is provided by the Arduino IDE. It’s really easy to use and very stable! (from VisualMicro page)

banner