Page 2 of 3
Posted: Sat Jan 01, 2011 10:31 am
by kc5tja
Perhaps the NMI handler, upon detecting a '1' for the B bit, can take steps to invoke the BRK handler after it's done with its NMI duties, knowing definitively that a BRK has occurred as well.
Posted: Sat Jan 01, 2011 11:52 pm
by happycube
Debugged mine a bit more and it's now a basic and small Apple I emulator. Thanks for the help with debugging the interrupt flag!
The next trick is to get it running on an LPC1343 board... [Apple] 1-chip anybody? (initially USB serial, and then when I have access to my TV again I'll wire up an NTSC interface - with SPI it shouldn't eat up too much CPU even...)
Posted: Sun Jan 02, 2011 2:13 am
by GARTHWILSON
(initially USB serial, and then when I have access to my TV again I'll wire up an NTSC interface - with SPI it shouldn't eat up too much CPU even...)
happycube, since you're new (and BTW, welcome!), let me point you to the external peripheral bus we at 6502.org have devised to extend the usefulness of SPI (and similar interfaces) and to make it easier to share designs and perhaps even hardware in the future. We call it 65SIB, for 6502.org
Serial
Interface
Bus. You'll find the current spec
here. Nothing about it requires 6502-related hardware-- the "65" just credits this forum and website. The linked post is the result of 8 pages of development discussion, and it summarizes the design goals, benefits, connectors, pinouts, auto-addressing, optional intelligence and autoconfiguration, etc..
Posted: Sun Jan 02, 2011 4:09 am
by kc5tja
I think he means to use SPI as the video interface, where MOSI is used (through a resistor network) to drive the NTSC analog signal.
Posted: Sun Jan 02, 2011 4:14 am
by kc5tja
What I don't understand is how the Apple I's video output worked. From what I can see, they used a 40-bit by 6 recirculating shift register to house one line of text on the screen. This means that the CPU would have to reload the shift register every 8 scan-lines to get a full 40x25 display. Yet, no interrupts for the purposes of synchronization exist (per the Replica 1 details, at least), and as far as I can see, the sole interface to the display hardware is a 7-bit parallel port.
What am I missing? I just don't see how it's possible without racing the electron beam.
Posted: Sun Jan 02, 2011 6:07 am
by GARTHWILSON
I think he means to use SPI as the video interface, where MOSI is used (through a resistor network) to drive the NTSC analog signal.
Anything like using the VIA's SR, shifting out free-running at the T2 rate and following it with an RC for a 9-level D/A converter (slightly better than 3-bit resolution)? (Tip of the Day, #5, at
viewtopic.php?t=342 )
apple1 video hardware
Posted: Sun Jan 02, 2011 7:27 am
by BigEd
What I don't understand is how the Apple I's video output worked. From what I can see, they used a 40-bit by 6 recirculating shift register to house one line of text on the screen. This means that the CPU would have to reload the shift register every 8 scan-lines to get a full 40x25 display. Yet, no interrupts for the purposes of synchronization exist (per the Replica 1 details, at least), and as far as I can see, the sole interface to the display hardware is a 7-bit parallel port.
What am I missing? I just don't see how it's possible without racing the electron beam.
Looks like the shift registers are 1k long (and 1 bit wide, but there are seven of them) - the whole screen of text fits in them (as characters not as pixels.) For writing into the shift registers, best to consult
San Bergmans' page about the video circuit operation.
Here's the circuit, found on page 10 (or a supplementary page) in the
apple 1 manual:
RD1 to RD7 are inputs, from the B port of the PIA. The 8th bit of the B port is an input, connected to DA, which is the inverse of the PIA's CB2, used to ensure a written character has been accepted into the shift register before the next one is presented. Component D2 is the character generation ROM, with 6 bits of address input, either from 6 of the 2504 shift registers or from the B port.
I haven't yet digested this!
Cheers
Ed
Posted: Sun Jan 02, 2011 9:46 am
by kc5tja
I think he means to use SPI as the video interface, where MOSI is used (through a resistor network) to drive the NTSC analog signal.
Anything like using the VIA's SR, shifting out free-running at the T2 rate and following it with an RC for a 9-level D/A converter (slightly better than 3-bit resolution)? (Tip of the Day, #5, at
viewtopic.php?t=342 )
If you want 1/9th the horizontal resolution, sure. If all you care about is monochrome, then you can just use a voltage divider to bring +Vcc down to 0.7V at a 75-ohm impedance, and that'll drive a VGA monitor or NTSC input fine.
Posted: Sun Jan 02, 2011 9:47 am
by Arlet
The easiest way to digest the video circuitry may be to instantiate all the components in a HDL, and run it on a simulator.
Plus, you can then put it in an FPGA and try it out.
Re: apple1 video hardware
Posted: Sun Jan 02, 2011 9:49 am
by kc5tja
Looks like the shift registers are 1k long
I thought the 2519 was the recirculating shift register used. I wasn't even aware the 2504 chips were the main frame buffer.
See
http://www.applefritter.com/node/8752
Posted: Sun Jan 02, 2011 9:57 am
by kc5tja
The easiest way to digest the video circuitry may be to instantiate all the components in a HDL, and run it on a simulator.
Plus, you can then put it in an FPGA and try it out.
This assumes you know what all the components actually do. I was completely unaware that the 2504 was a 1024-bit shift register, which was my missing piece of the puzzle.
Re: apple1 video hardware
Posted: Sun Jan 02, 2011 9:59 am
by BigEd
Looks like the shift registers are 1k long
I find this a bit unbelievable; the Signetics data sheet for the recirculating shift register indicates it's shift registers are only 40 bits wide.
See
http://www.applefritter.com/node/8752
Have a look instead at the
datasheet for the 2504
These Signetics 2500 Series 1024-bit multiplexed dynamic shift registers consist of enhancement mode P-channel MOS devices integrated on a single monolithic
Edit: Ah, Samuel saw his mistake and already corrected his post. For my part, I'd missed that the 2519 is also a shift register. The 40-bit depth is presumably a line of characters (character addresses for the character generator ROM)
Posted: Sun Jan 02, 2011 10:21 am
by Arlet
This assumes you know what all the components actually do. I was completely unaware that the 2504 was a 1024-bit shift register, which was my missing piece of the puzzle.
Correct. The old datasheets may be hard to find.
ETA: There's a .zip file with the datasheets of the 2504, 2513 and 2519 on the sb-projects download link:
http://www.sbprojects.com/projects/apple1/download.htm
Re: A small Apple I emulator (was: Another 6502 emulator...)
Posted: Tue Jan 25, 2011 11:09 pm
by jesari
I've been working on a logic-based emulator - with gcc -Os it compiles into less than 4K (not counting 'shell'), which means it'll be a good choice for running on an AVR or ARM Corrtex. In theory one could make a one-chip Apple I with this on a very cheap LPC 111x.
EDIT: I haven't commented it enough yet to make sense, but it's now an Apple I emulator and can run at least basic BASIC programs. The stripped -Os i386 a.out (including basic and woz mon) is ~14K.
Check it out here:
http://code.google.com/p/chadslab/sourc ... nk%2Fm6502 (2-clause BSD licensed)
What I really want to do is make a tight Verilog version and see if I can make something smaller than even Arlet's core (EDIT: I doubt I can make one that's worth the effort, but I might look into optimizing Arlet's...)
While checking the emulator I found the following BASIC error:
Code: Select all
E000R
E000: 4C
>10 FOR I=0 TO 100
10 FOR I=0 TO 100
>20 PRINT I
20 PRINT I
>30 NEXT I
30 NEXT I
>LIST
LIST
10 FOR I=0 TO 100
20 PRINT I
30 NEXT I
>RUN
RUN
0
*** >32767 ERR
STOPPED AT 30
>32767 ERR means a BASIC overflow. Probably something is wrong with emulation (maybe V flag...). It seems to happen with every NEXT instruction.
BTW, the emulator was cross-compiled for ARM and ran on an x86 Linux box using qemu-arm (today we got so many MIPS to waste

)
Posted: Wed Jan 26, 2011 8:17 am
by happycube
Fixed it (I think - it's hard to figure out how to handle V

) - the for/next loop runs now.
And yeah - we've got such an amazing amount of CPU power these days...