In my previous Ben Eater: 6502 post I set up a 6502 + EEPROM board with a Mega attached which enabled me to download programs with the ROM in situ. As a second major enhancement, I need it have keyboard input and display output. Ben does a diy video controller board but that looks painful. Much more practical for me is to use a serial port with an emulated terminal. I guess this isn't a pure solution, however I could make it one if I went on ebay to buy an old terminal. In fact I did consider buying a real DEC VT100 as I used one for much of my (short) programming career but that would be overkill.
My objective is to provide a serial terminal input and output on my 6502 board using hardware compatible with the 6502 and EEPROM. The best solution used by 6502 afficionados is an ACIA (Asynchronous Communication Interface Adapter) W65C51 which interfaces to an FTDI chip and provides serial transmit / receive upto 19200bps. An excellent example circuit and associated program is provided by Dirk Grappendorf. I particularly liked that the program doesn't use RAM so I could proceed with the program before adding RAM to my computer (I never thought I would be able to say that).
Hardware
W65C51 chips are available on ebay for about £5, and they also require a 1.8432MHz oscillator (HC49) for another £1.
To check my understanding of the hardware I added the W65C51 to my board and connected up power, address, data and control pins (output-enable, chip-enable, write-enable). I was then able to set pins in a sketch to control ACIA. ACIA was setup with RS0=A0, RS1=A1 and /CS1=/A15 so that ACIA registers can be accessed at addresses 0000, 0001, 0002, 0003.
I could then send a character to the serial port at 19200baud with 3 commands:
Write
0B to address 0002 (for no
parity, no echo, no interrupt)
Write 1F to address 0003 (1
stop bit, 8 data bits, 19200 baud)
Write characters to address 0000
6502 Connection
Once I knew the hardware was connected properly and working I could write a program. For the previous test 6502 and EEPROM were turned off, so I turned them on and tried saving the simplest possible program to EEPROM and running it from the 6502.
loop:
8000 LDA #0B A9
0B
8002 STA $0002 85 02 store COMMAND byte
8004 LDA #1F A9
1F store CONTROL byte
8006 STA $0003 85 03
8008 LDA #6A A9
6A write letter "j" on terminal
800a STA $0000 85 00
800c JMP loop 4C 00 80 start from the beginning
I used the monitor sketch to debug the program. It was easy to have a bad or incorrect connection so I spent some time producing and checking the schematic above to ensure my hardware was set up as expected. I used a couple of NAND gates to get the ROM and ACIA addressing signals as I wanted them. In the listing below you can see the three write commands at lines 59,64 and 69.
No comments:
Post a Comment