Jul 242017
 

Roudoudou released a new version of his Zilog Z80 cross-assembler called Rasm. Of course it supports all the undocumented opcodes, but beside of that, you can use conditional macros, a floating point engine and several mathmatical functions. A special feature is the possibility to create a cartridge for the Amstrad Plus or the Amstrad GX4000 directly by assembling your source code and you can automatically add an AMSDOS header to your binaries. It also supports crunched sections (the coded will be loaded and crunched on the fly) for LZ48, LZ49, LZ4, ZX7, and Exomizer. It has also a compatibility option to support the widely in the Amstrad CPC used MAXAM syntax. You can download and discuss it at the CPCWiki forums and at the end of this news.

Changes in v0.57

  • more flexible preprocessor with macro parameters
  • new label prefix tag {BANK} to get the bank where is located a label

 

Mar 202017
 

Roudoudou released a brand new Zilog Z80 cross-assembler that targets the Amstrad CPC. Of course it supports all the undocumented opcodes, but beside of that, you can use conditional macros, a floating point engine and several mathmatical functions. A special feature is the possibility to create a cartridge for the Amstrad Plus or the Amstrad GX4000 directly by assembling your source code and you can automatically add an AMSDOS header to your binaries. However, it currently does not support the Maxam assembly syntax.
The latest version contains a lot of bugfixes (local labels, macro, label tree, alias, …) and a documentation in french and english. You can download and discuss it at the CPCWiki forums and at the end of this news.

Update 21.03.2017
Roudoudou released a new version v0.42 with the following changes:

  • allow old style label declaration with a starting dot
  • allow useless A, register form with ADC, ADD, SBC, SUB
  • extended syntax for 8bits index registers
  • documentation FR/EN updated

Update 31.03.2017 – Rasm v0.48

  • bugfix of label calculations when placed after a LZ48/LZ49 block (there is a buf left with more than one LZ section in the same ORG)
  • directives SWITCH/CASE/DEFAULT/ENDSWITCH added
Rasm - Z80 assembler
Rasm - Z80 assembler
rasm_v040.zip
Version: v0.40
234.8 KiB
408 Downloads
Details
Rasm v0.42 - Z80 assembler
Rasm v0.42 - Z80 assembler
rasm_v042.zip
Version: v0.42
237.4 KiB
384 Downloads
Details
Nov 012014
 

After years of inactivity I decided to release two old project, which I started to work on in 2010, publicly on my GitHub account. I have not produced any prototypes yet, so they are currently more a draft. Both projects use a flash EPROM to store the data in the cartridge. The first one is a simple Amstrad Plus / Amstrad GX4000 cartridge, which can be equipped with an original ACID protection chip or with a Xilinx XC9536 CPLD for ACID emulation (you can read more about the emulation here).

SimpleCartridge

The second project is the design of a flash cartridge, which can be programmed on a PC via USB and used in a Amstrad Plus / Amstrad GX4000. You can read more about the design in the README.md.

flash-cartridge

Maybe someone with more time is interested to take over the projects, otherwise I will work on them every now and then…

Jan 192012
 

Bryce, well known for his great hardware projects (MegaFlash ROM box, RGB to SVideo converter, MegaROM board, etc…), released a description on how to move the ACID protection chip into the CPC Plus. If you do this modification, you won’t need the ACID protection chip in the cartridge anymore and you can just connect cartridges without an ACID protection chip to the CPC Plus.
You can find the howto in the [[AcidInside|CPC Wiki]].

A replacement possibility for the ACID protection chip was also released last year, too.

Apr 152011
 

Nilquader and I decided to release our Verilog code (based on Nocash’s decryption of the algorithm) to “emulate” the ACID protection chip of the Amstrad Plus. So, you can now find it in the [[Amstrad Cartridge Identification Device|ACID article]] of the CPCWiki and right here in this posting:

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: Octoate, Nilquader
// ACID Reverse engineering by nocash
//
// Create Date   : 00:45:53 09/03/2010
// Design Name   : amsacid
// Module Name   : amsacid
// Project Name  :
// Target Devices: Xilinx XC9572
// Tool versions :
// Description   : Reverse engineered Amstrad 40908 "ACID" Chip
//
// Revision:
// Revision 0.05
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module amsacid(PinCLK, PinA, PinOE, PinCCLR, PinSIN);

input PinCLK;
input [7:0]PinA;
input PinOE;
input PinCCLR;

output [7:0]PinSIN;

wire PinCLK;

reg [16:0]ShiftReg = 17'h1FFFF;
wire [16:0]CmpVal;
wire [16:0]XorVal;

assign CmpVal = 17'h13596	^ (PinA[0] ? 17'h0000c : 0)
				^ (PinA[1] ? 17'h06000 : 0)
				^ (PinA[2] ? 17'h000c0 : 0)
				^ (PinA[3] ? 17'h00030 : 0)
				^ (PinA[4] ? 17'h18000 : 0)
				^ (PinA[5] ? 17'h00003 : 0)
				^ (PinA[6] ? 17'h00600 : 0)
				^ (PinA[7] ? 17'h01800 : 0);
assign XorVal = 17'h0C820	^ (PinA[0] ? 17'h00004 : 0)
				^ (PinA[1] ? 17'h06000 : 0)
				^ (PinA[2] ? 17'h00080 : 0)
				^ (PinA[3] ? 17'h00020 : 0)
				^ (PinA[4] ? 17'h08000 : 0)
				^ (PinA[5] ? 17'h00000 : 0)
				^ (PinA[6] ? 17'h00000 : 0)
				^ (PinA[7] ? 17'h00800 : 0);

always@(negedge PinCLK)
	begin

	if (PinCCLR) // not in reset state
		begin
		if (!PinOE && ((ShiftReg | 17'h00100) == CmpVal))
			begin
			ShiftReg <= (ShiftReg ^ XorVal) >> 1;
			ShiftReg[16] <= ShiftReg[0] ^ ShiftReg[9] ^ ShiftReg[12] ^ ShiftReg[16] ^ XorVal[0];  // hier xorval mit berüchsichtigen
			end
		else
			begin
			ShiftReg <= ShiftReg >> 1;
			ShiftReg[16] <= ShiftReg[0] ^ ShiftReg[9] ^ ShiftReg[12] ^ ShiftReg[16];
			end
		end
	else
		begin
			ShiftReg <= 17'h1FFFF;
		end
	end

//assign PinSIN = ShiftReg[7:0] ^ 8'hff;
assign PinSIN = ShiftReg[7:0];
//assign PinSIN[0] = PinCLK;

endmodule

But this isn’t everything about the ACID. We also found a timing problem during the investigation with a logic analyzer, which you can see here:

ACID initialisation by Grim

ACID initialisation (by Grim)

You will find glitches on the /CCLR line which show that the SIN contact should be changed… All in all it is possible to use a fast flip-flop to change the SIN signal when such a glitch occurs (see picture below).

Flip flop for ACID replacement

Flip flop for ACID replacement

You see, this is a very simple schematic, but it isn’t much cheaper than a CPLD, which emulates the full ACID and it comes with a disadvantage: it won’t work with a reset, so you always have to switch the CPC off and on again.

So, have fun with it – maybe Bryce will change his cartridge design and support this solution in the future :-).

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close