Changes in release DE1-20: -------------------------- * See LEDS-SWITCHES for current assignment of LEDs, keys and switches. * Allow emulating a green or amber screen. Changes in release DE1-19: -------------------------- * Support an Olimex MOD-ENC28J60 Ethernet module attached to GPIO1 pins 29-38. LEDG2 is now the selected LED for the Ethernet card. The Ethernet card is ABC-bus select 9 (OUT 1,9) and uses the following commands: OUT# (OUT 0) Send a byte to the Ethernet controller, leave CS# low C1# (OUT 2) Send a byte to the Ethernet controller, pull CS# high C3# (OUT 4) Local reset INP# (IN 0) Read latched byte from controller, leave CS# low STATUS# (IN 1) Read latched byte from controller, pull CS# high OUT#, C1# and INP# trigger a new SPI transaction. Note that reads are "delayed" by one cycle, so it is necessary to issue a dummy IN 0 before doing the first read. LEDG0 - disk (SD) activity (for real!) LEDG1 - disk selected (like the old LED 0) LEDG2 - Ethernet selected LEDG3 - CAS: relay (OUT 58,32) LEDG4 - CAS: data out (OUT 58,64) LEDG5 - turbo 3 (25 MHz) LEDG6 - turbo 2 (12, 25 MHz) LEDG7 - turbo 1 (6, 12, 25 MHz) * It is now possible to get a directory (LIB) listing via PRA:. * New debug console support (PRC:) if selected with the abcprintd -c option. (Probably wants -f as well.) * All files changed to UTF-8. Filenames now support UTF-8 too. * z80asm updated. * CP/M 2.2 support. CP/M requires that NMI can be disabled, so bit 2 of I/O port 7 is used to disable this -- this is probably what someone who actually did Mikrodator's 64K would have done to support CP/M, too. * Bits [5:4] of I/O port 132 (MMU control) are not supported anymore; they never worked right anyway. Only read and write control are now supported. Writing port 7 still sets both read and write. Changes in release DE1-18: -------------------------- * Use a 6x10 character matrix as the original ABC80/800 did, instead of a 8x16. To make this compatible with a VGA monitor, we use double scanning (each pixel row drawn as two scanlines.) * Add an ABC800C/M-style "fine graphics" (FG) unit. Since there is not enough on-chip memory, we store the FG data in the SRAM, which is multiplexed with the CPU. This works without stalling either unit, since the CPU never needs the SRAM for two consecutive CPU cycles, so we can always get one access every two CPU cycles for the graphics unit, which is more than enough. In fact, we probably could supply quite a bit more bandwidth than this (especially since the SRAM is really 16 bits wide), but this is good enough for now. In ABC800, the FGCTL control is OUT 6; since this is the audio generator on ABC80 we use OUT 158 for now. OUT 159 can be used to select which 16K page in the SRAM contains the graphics; this defaults to 4 (= 64K) on reset. This is intended to be a first step toward implementing ABC800. Changes in release DE1-17: -------------------------- * Fix handling of "abcprintd -d directory" with a relative pathname for "directory". Changes in release DE1-16: -------------------------- * Revert text files back to Latin-1 character encoding, since Cygwin apparently doesn't support Unicode yet. Changes in release DE1-15: -------------------------- * Add a hack to UFD-DOS so the PRA: and PRB: devices get automatically initialized. Changes in release DE1-14: -------------------------- * File transfers via abcprintd: If abcprintd is started with the -d option, the ABC80 can transfer files to and from a specific directory: abcprintd -d directory /dev/ttySx [print command...] On Cygwin, the port number is the Windows port number minus 1, e.g. if Windows calls your USB serial dongle "COM7", you should refer to it as /dev/ttyS6. You have to reflash your ABC80 ROM (abc80rom.bin) for the file transfer feature, since it has new code for the printer option ROM. To use it, access files on the device PRA: for ASCII mode transfer, or PRB: for binary/block mode transfer. Changes in release DE1-13: -------------------------- * Reset the audio DAC before programming it. That way we avoid potential painful sounds if another application has been using it in another mode. * More correct DAC programming. In particular, the DAC was incorrectly programmed into DSP mode, when it was expected to be used in I2S mode. * Pad all the audio samples with zero to avoid signedness issues. Changes in release DE1-12: -------------------------- * Fix misreading of the spec w.r.t. the HCS bit in ACMD41. Add a unique error code (E8) to ACMD41 failure. Shouldn't really matter much. Changes in release DE1-11: -------------------------- * Read the SD OCR properly - in DE1-10 all *non*-SDHC cards were broken... Changes in release DE1-10: -------------------------- * Fix a bug during initialization which would result in SD card initialization failure E6 on most cards - but, of course, not the one I was using for development. * Fix the support for SDHC cards. Now at least one particular SDHC card works. Changes in release DE1-9: ------------------------- * Fix potential race conditions in the handling of the SD internal buffer. Changes in release DE1-8: ------------------------- * Better error handling for SD card intialization errors. Now displays an error code on the display as well as returns an error to ABC80 instead of hanging indefinitely. Changes in release DE1-7: ------------------------- * I2C unit to initialize the audio DAC (previously the sound only worked if the Terasic Control Panel had already been run.) Changes in release DE1-6: ------------------------- * SW5 now produces a LCD monitor calibration pattern on the screen. * Printer/V.24 moved to SW3. Changes in release DE1-5: ------------------------- * Fix hang on reset with no SD card inserted (or SW0 off.) Changes in release DE1-4: ------------------------- * SW6 now means a no-blink cursor. * Printer/V.24 is now SW5. * Added patch to UFD-DOS to clear the Ctrl-C flag. There may be other things from "ufdpatch.ny" worth including (see data/ufdpatch.ny). -> You have to rewrite your Flash for this to take effect! Changes in release DE1-3: ------------------------- * Writes to the SD card now work! * The SD controller no longer crashes if write protect (SW1) is set. Changes in release DE1-2: ------------------------- * The SD card slot now works, although it has not been extensively tested. HOWEVER: *** The DE1 card does not connect the two pins on the SD socket that *** are used to detect the presence of a card, and to test the write *** protect switch. Therefore, we have to simulate them with SW0 *** (card present) and SW1 (write protect). DO NOT remove the card *** when SW0 is ON (UP). LEDG0 is CARD ACTIVE; don't switch SW0 when LEDG0 is on. * The SD card controller currently crashes if the card is write protected (SW1 is on). * There are a number of variants of the SD card protocol. I can only promise it works with my particular card (SanDisk 256 MB). * The green LEDs (except LEDG2) are the same as on the NIOS card, they are, again: LEDG0 - disk (SD) activity (for real!) LEDG1 - disk selected (like the old LED 0) LEDG2 - unused LEDG3 - CAS: relay (OUT 58,32) LEDG4 - CAS: data out (OUT 58,64) LEDG5 - turbo 3 (25 MHz) LEDG6 - turbo 2 (12, 25 MHz) LEDG7 - turbo 1 (6, 12, 25 MHz) The red LEDs simply show the position of the switches. Changes in release DE1-1: ------------------------- * Cleanups to synthesize correctly under Quartus II 8.1 Web Edition. * Port to the Terasic DE1/Altera Cyclone II Starter Kit board. * The SD flash card doesn't work yet. * The (only) RS232 port is used either as V.24 (RxD and TxD *only*) or printer port, depending on SW6. * Button ("key") and switch assignments are as follows: KEY0 - Reveal text KEY1 - Video mode test KEY2 - CPU reset KEY3 - Turbo mode SW6 - UP: Serial port is V.24, DOWN: Serial port is printer SW7 - UP: Inverse video, DOWN: Normal video SW8 - UP: Boot up at 3 MHz, DOWN: Boot up at 25 MHz SW9 - UP: Boot up in 40-column mode, DOWN: Boot up in 80-column mode. * The EP2C20 has less internal memory than EP1C20. Thus, we use the external flash for ROM. The image data/abc80rom.bin needs to be flashed into the flash at offset 0 using the Terasic Control Panel application. Remember to erase the flash first. The flash is slower than SRAM. Thus, reads from flash has two WAIT# cycles at 25 MHz and one WAIT# cycle at 12 MHz. The flash runs at full speed at 6 or 3 MHz. Because of the structure of the MMU, only the first 1 MB of the flash is accessible. This may change. * The MMU space numbers have been reassigned, see data/mmuinit.pl. They may change again. * Fix the "tools" directory so it compiles correctly under Cygwin. * A Z80 disassembler now included in the "tools" directory. Changes in release 18: ---------------------- * Cleanups to synthesize correctly under Quartus II 5.1 SP2. * For the "parallel" printer, don't use BREAK as end of job marker; it turns out too many modern serial ports -- especially USB ones -- don't correctly handle an incoming BREAK. Instead, turn FF into FF FF and use FF 00 as end of job. This is done in hardware, so the firmware shouldn't notice. abcprintd has been changed accordingly. * In abcprintd, print "box" (ASCII 127) as a solid dot; looks better in standard PostScript Courier. * Update the Z80 assembler, and include it in the release. * This file changed from ISO-8859-1 encoding to UTF-8 encoding. Changes in release 17: ---------------------- * Fix using SW3 as turbo button (broken in release 16.) Changes in release 16: ---------------------- * Support the ABC80 sound generator. The original ABC80 had an SN76477 semianalog synthesizer chip, largely crippled by using fixed RC circuits for its adjustables. For the FPGA, emulate the operation using digital logic, but I believe the correspondance should be very good, at least to the extent that the real SN76477 matches the datasheet. There is clearly *some* differences, or "out 6,255" would be silent on ABC80. I simply made a guess as to how those sounds should be generated. If someone with a real ABC80 could record a set of files of all 128 sounds I might be able to get even closer. 1 REM This program plays all 128 sounds in order 2 FOR I%=1% to 255% STEP 2% 3 GET Z¤ 4 PRINT I% 5 OUT 6%,0%,6%,I% 6 NEXT I% 7 GET Z¤ 8 OUT 6%,0% * The display now shows the frequency in MHz by default. * The LEDs can now be controlled programmatically if desired. OUT 148,X X = 1 to control single LEDs + 2 to control display OUT 149,L Sets the individual LEDs OUT 150,A Sets the right display (units) OUT 151,B Sets the left display (tens) All of these can be read back via INP(port), too. * Centralize all the non-ABC-compatible register handling (MMU, turbo, LEDs.) The turbo can now be read back (via INP(144)), in addition to the MMU registers which have always been readable. * For those sick enough to want it, the cassette port is now connected to the following pins on Prototype Connector 1 (J11): Relay - pin 29 Output - pin 28 Input - pin 38 Ground - pin 26, 30 and 40 These signals are 5V and TTL-compatible. +5V is available on pin 2 of J12. See page 20 of the "Nios Development Board Reference Manual, Cyclone Edition" (version 1.0). Changes in release 14/15: ------------------------- * Make the Ethernet controller available to the ABC80. The Verilog for this is a bit ugly, because I really wanted to do something that could be implemented on a real ABC-bus card, but the Ethernet chip on the Altera board shares a bus with the memory. The Ethernet chip is an SMSC 91C111 controller; it has 128 byte-sized registers, divided into 8 banks of 16 registers each. This is implemented as follows: OUT 1,25 - hardware select OUT 2,R*8+B - select register R of bank B OUT 0,data - write data from selected register INP(0) - read data from selected register WARNING: If you write the address select register (bank 1, register 3) then you will need to power cycle the board before you can access the Ethernet chip again. * Support DBLE/NRML (141, 140) on the video display -- it should now have all the capabilities of the ABC800C video unit, plus black text and being able to press SW0 to reveal hidden text. As I kid, I always wondered how DBLE/NRML were implemented in hardware. The answer is, it's a pain! * Make the printer interface closer to the original ABC80 Centronics card. See data/printer.asm and printer.v. Changes in release 13: ---------------------- * Fix bug introduced during port to msxz80asm that would cause the comma (,) key, 44 decimal, to give a capital (D), 0x44 hex. Changes in release 12: ---------------------- * Switch from the horrible "masm" Z80 assembler to msxz80asm: http://savannah.nongnu.org/projects/z80asm/ * Use Write and Verify when writing to the CompactFlash card. Changes in release 11: ---------------------- * CompactFlash mystery solved: there is a cf_power pin which turns off power to the CompactFlash card on the board! It was left floating, which apparently means the power supply to the CF card worked *most* of the time... apparently not always. Tie this pin to VCC seems to work. * Cleaned up the generation of chargen.mif a bit. Also generate .bas files to select Danish/Norwegian or International (= US) charset. Changes in release 10: ---------------------- * Bang hard on getting the CompactFlash interface more stable. I still get data corruption on cards after they have been used a while; unfortunately it seems to be a bug on the cards themselves and I don't know how to work around it. * Remove some old debugging code in T80PIO. * Four levels of speed control: 3, 6, 12, 25 MHz. out 144,0 = 3 MHz, out 144,1 = 6 MHz etc. * New LED assignment: LED 0 - disk (CF) activity (for real!) LED 1 - disk selected (like the old LED 0) LED 2 - CF card in slot LED 3 - CAS: relay (OUT 58,32) LED 4 - CAS: data out (OUT 58,64) LED 5 - turbo 3 (25 MHz) LED 6 - turbo 2 (12, 25 MHz) LED 7 - turbo 1 (6, 12, 25 MHz) Changes in release 9: --------------------- * Add support to use serial port B (DEBUG) as a lame printer port. Since this port supports no handshake, at least on the board I have (Altera Nios Development Kit Cyclone Edition), it simply prints at default 115200 baud. Since serial printers are virtually extinct I am using a program running on a Linux box to actually send the data to my printer; see tools/abcprintd.c. The hardware interface is as follows: OUT 1,24 - hardware select OUT 0, - send data byte OUT 2,