Monday, March 9, 2020

A little blast from my past

Back in the 80s I was a partner in and vice president of a software business called Designing Minds, Inc.
Here are a few of the programs we produced.  All of these are based on my runtime library, as was the Talking Storybook series, yet I somehow didn't get my name on any of the Copyrights.  Gee, why did I ever leave?
Link


I was also president, and a partner in an Amiga hardware company.
Here is one of the Amiga drives we made:
Link

Monday, March 2, 2020

MC-10 Memory map

This is the MC-10 memory map copied from the service manual, but with a few minor changes.
The address decoding inside the MC-10 is "minimal", so the Keyboard/VDG I/O responds over a full 16K area, but internal address decoding can be disabled by external expansion devices.
Programmer's should only use the top of that address range to access that hardware.

The MC-10 only includes 4K of RAM internally, but hi-res 256x192 2 color (RG6), and 128x192 4 color (CG6) modes require 6K.  The 6847 VDG's buss is isolated from the expansion connector on the back of the machine, and the top address line isn't even connected, so you can't just plug in a RAM expansion to use hi-res modes.  The hardware mod was published in a CoCo magazine shortly after the machine was released, but I'll have to look up what magazine.  (Color Computer Magazine maybe?)

Making matters worse, the ROM places BASIC system variables, and interrupt vectors in the upper part of the internal 4K of RAM, so to use hi-res graphics you need a new BASIC, or to disable the ROMs.  I've been working on a new ROM, so this is trivial for emulators.



MC-10 Memory map from the service manual
Hex Address
C000 - FFFF            16K ROM (only upper 8K used)
9000 - BFFF            16K I/O Slot (Keyboard, VDG control, and sound)
4000 - 8FFF            16K RAM (4K - 20K used) (video starts at $4000)
0100 - 3FFF            Not Used
0080 - 00FF            RAM internal to the 6803
0015 - 007F            Not Used
0014                RAM Control Register
0013                Not Used
0012                Not Used
0011                Not Used
0010                Not Used
000F                Port 3 Control and Status Register
000E                Input Capture Register (low byte)
000D                Input Capture Register (high byte)
000C                Output Compare Register (low byte)
000B                Output Compare Register (high byte)
000A                Counter (low byte)
0009                Counter (high byte)
0008                Timer Control and Status Register
0007                Not Used
0006                Not Used
0005                Not Used
0004                Not Used
0003                Miscellaneous I/O Data Register
0002                Keyboard Output Lines
0001                Data Direction Register for miscellaneous I/O
0000                Data Direction Register for keyboard lines

Nearing completion of the 6502 to 6803 AGD runtime code

As the title indicates, the runtime library code is almost complete.  If I had just focused on working on the translation, this would have been done some time ago. but I hope to finish this today.  Then I can look at the compiler.

There are some questions with the code that will require looking at the original Z80 code.  Why did they do this, why didn't they do that... not sure if the 6502 programmer lacked experience, if I have outdated code, or whatever, there's just some odd looking stuff in the code. 

There are sure to be some mistakes in the translation.   At the very least, the Z80 & 6502 store 16 bit variables in little endian format, and the 6803 uses big endian.  I'm assuming big endian for the translation, which may cause some problems.  There may also be a few times where I tried to optimize the code, and I shouldn't have.  Likewise, there's probably room for more optimizations where I wasn't sure if they are okay.

Before anyone gets too excited, just remember this requires the internal RAM mod that lets you use hi-res RG6 mode (PMODE 4), and a new ROM or external RAM expansion that lets you disable the internal ROM.  The only RAM expansion that lets you disable the ROM is the MCX-128, but I'm not sure that has a memory map setting compatible with the internal RAM upgrade.  This should work with an emulator though, and we can worry about the hardware issues later.