How to build Apple 1 and write a game for it
How to build Apple 1 and write a game for it

![](https://habrastorage.org/webt/3n/_m/7z/3n_m7zcd45iwzuk7vlex-hlyk3a.jpeg)
It has been 40 years since the release of the Apple 1 computer. Today, its capabilities do not reach even simple microprocessor devices or microcontrollers. But in 1976, this novelty made a lot of noise, it was even said about the revolution in the computer world. I suggest the reader with me to assemble Apple 1, to find out what was interesting in it, and write some kind of program.
Immediately I say, I collected it not at once. It took three years to search for components, build and debug in free time, about the same amount to debug, and finally get together and write this article.
Apple 1 specifications
Type: Personal computer
Years of production: July 1976 - March 1977
Processor: MOS 6502
Clock frequency: 1 MHz
Memory: ROM 256 Bytes, RAM 4kB, expandable up to 8 kB
Video: 40x24 characters
Manufactured: about 200 pieces
A bit of history
The creator of Apple 1 is Stephen Wozniak. Actually at the time of creation, it was not yet called Apple 1. And Apple itself was not there yet.
Steve was fond of designing electronic devices from an early age. His first computing machine was a “cream-soda”, designed on integrated circuits without using a central processor, and capable of performing simple mathematical operations. Unfortunately, I could not find any photos or any descriptions of this computer, only rather scarce information from Steve himself, described in his book. The fate of "cream-soda" is also sad - it burned, and there were no attempts to restore it. Later, when Steve worked on calculators in HP, his acquaintance, Allen Baum, invited him to a meeting of the Computer Fans Club in Palo Alto, California. Steve was informed that this meeting was dedicated to terminals and video equipment. At that time, he had already created his own terminal to work in the ARPANET, and had an idea about the terminal technique, only therefore he agreed to go. Steve was a modest guy, and if he knew that it would be about computers, he said he would not go there.
At the meeting, he felt ill at ease, as those present were discussing some strange microprocessors and the Altair 8800 computer.
After the meeting, he was given a sheet describing the microprocessor i8080A. He decided to study it at his leisure, and realized that this is exactly what he did in his first PC “cream soda”, and how it could be made easier. On the same day, he was born the architecture of the future of Apple 1. But the assembly came only a few months later, which went on to study the specifications of new chips and the search for components. The fact is that in the 70s microprocessors and memory were very expensive and scarce. The problem with the processor was solved when the company MOS Technology released a budget processor 6500, and soon 6502, an analogue 6500, but with great potential, and costing only $ 25. It was the legendary 6502 who first fell into the hands of Steve.
The next problem of that time was to prepare the computer for launch. In those years, the boot program, as a rule, was entered into computers manually or from tape, it took up to half an hour, and only after that it was possible to do something with them. The launch video for BASIC and the game program written on it is available on the Altair 8800 via the second link at the end of the article. Steve solved this problem by installing a permanent memory chip (ROM) in his PC, with a control program written to it, which he called “Monitor”. The name reflected the purpose - most of the time she monitored the keystrokes and transferred them to the terminal, and also allowed displaying values in memory cells and starting the program from a specific location. Monitor Wozniak fit in 253 bytes.
But he still didn’t have enough RAM to start the computer. The first version of his PC was compiled on slow static memory. Later, he replaced it with a dynamic one, which reduced the number of microcircuits on the board, and had a positive effect on the speed of work.
Steve showed his PC to the public, and his friend, Steve Jobs, who helped carry the monitor to the club, offered to start producing printed circuit boards for this PC, and organize his own company, which was called Apple.
You can read more about this and many other things in iWoz.
Apple main board 1
![](https://habrastorage.org/webt/kc/gl/az/kcglazfo8edkxf4ynjgimbebvs8.jpeg)
PC architecture
A PC consists of several nodes.

![](https://habrastorage.org/webt/rb/-g/c4/rb-gc4ne96pfqtngeywcrjrfeku.png)
( Source site )
Block of formation and output of the image (terminal)
![](https://habrastorage.org/webt/f_/kw/ni/f_kwni5fr1nslkgget5xdj8pupc.jpeg)
Actually, this is the same terminal for Steve ARPANET. At its entrance is a seven-bit bus, which receives data for display on the TV screen.
It does not have schemes for direct access to video memory (PDU), but it uses a cyclic memory update of 1024 cells of 7 bits each (moreover, 64 cells are not used). Due to the lack of PDP, this terminal works like a typewriter - they gave a symbol to the input, it displayed it on the screen, moved the cursor for the next character, and no graphics. Due to the constant updating of this memory, the operation of the terminal is rather slow. All characters are displayed sequentially, you can not just go back and correct the incorrectly entered character. To edit, you need to enter the Monitor command, which will change the contents of the memory cell where the error was made, and then use the other command to display the byte value from the changed memory cell.
If in our program we want to clear the screen, we need to transfer the carriage to a new line 24 times. By the way, when you click on Return (the current designation is Enter), a generator is started, which until the end of the line prints the Space character.
There is no graphic mode, and the character set is limited to a standard set of ASCII codes, with values from 1 to 127 (only characters from the interval 32-126 are displayed on the screen, some others are used as controllers, for example, 13 is a line feed), therefore the seven-bit bus, and the highest order is always set to one.
Layouts of all displayed characters are recorded in the read-only memory (ROM). After a character arrives at the terminal input, it is first recorded in a small memory (analogous to a modern video memory), and then the counters of the character generator containing the layout of the output symbol are selected through the counter system and this data is mixed in with the generated sync pulses through the shift registers monitor input (or low-frequency input of the TV).
To adjust the brightness of the image, the board has a trimmer resistor. I replaced it with a simple divider in half.
It should also be noted that due to errors in the imaging scheme, it cannot be correctly displayed on most modern digital TVs or monitors, analog TVs forgive these errors. At the end of the article, a three-minute video with my torment on such a monitor.
Microprocessor unit
![](https://habrastorage.org/webt/dt/at/ox/dtatoxgiqxjz-7vbknfyviba7wq.jpeg)
Contains a microprocessor 6502, ROM, input-output port (PIA), buffer amplifiers, a device address decoder, RAM, and some small logic chips.
I / O unit and work with external devices
![](https://habrastorage.org/webt/uw/it/yd/uwitydlg17vcss6zat1w6sfnnz0.jpeg)
The I / O Controller (PIA) 6520 deals with polling the keyboard and transferring the entered character to the data bus. Instead, I installed 6821. And it works great.
Work with external devices occurs as with memory cells. Each device has its own memory area. The inclusion of I / O from a specific device is handled by a port decoder. Its input lines are connected to the address lines of the microprocessor; therefore, when the necessary address is set, the device we need is connected to the data bus. What, and how you can do with it, determines the program, and the device itself.
Since no interrupts are implemented in this PC, the central processor handles the entire data flow (keyboard input, character output, data exchange with external devices, etc.).
To connect an external device, there is one connector on the main board. The only device known to me, created for this PC in the 70s, is an interface board for working with an external data storage device - a tape recorder.
![](https://habrastorage.org/webt/0j/gn/04/0jgn04yqxj16hlsd9lecxfaijvg.jpeg)

Power Supply
![](https://habrastorage.org/webt/vi/cg/et/vicgetextiafygagnzgfghhgvbg.jpeg)
Everything is simple. Four voltages are required to power the computer. + 5V, -5V, + 12V and -12V. The power supply was made by the buyer independently. To do this, it was necessary to separately purchase two step-down transformers, and connect them to the main board, on which the rectifiers and stabilizers were already located. There is a stabilizer on + 5V on the radiator, and it heats up significantly, so many users installed a fan on it, I did not reinvent the wheel, and did the same.
Of course it was possible to put a modern switching power supply, but I wanted a warm tube rumbling at 50 Hertz.
Component search, assembly and commissioning
As I wrote above, it took almost 3 years to search for components, albeit intermittently. The first was bought a printed circuit board, having lain for about a year on the shelf, it began gradually to overgrow with components. First, I soldered the microchip sockets and connectors for power and monitor. Then all passive elements - resistors, capacitors and diodes. True, it was not possible to get the original Sprague capacitors immediately, and instead of them the first half of the year were ordinary modern electrolytes.
Most of the chips were immediately available; moreover, most of them have Soviet analogs of the 155th series. I had to run for such microcircuits:
Video ROM - a certain firmware should be recorded in it, otherwise there will not be an adequate picture.
2504V - seven registers in which the image displayed on the screen is stored.
2519B is a counter used to build an image that has no analogues.
8T97 - data bus buffers that prevent overloading of the microprocessor data bus; in other, they later found a Soviet replacement - K155LP11.
ROM with the control program "Monitor".
After all the components were found, sealed, or installed in the main board, the interesting part itself began - debugging.
The first power up - click the power toggle switch, 5 seconds, turn off - there is no smoke, traffic jams in the apartment are intact, nothing caught fire - order. I turn on, look at the picture - there is garbage from random characters on the screen. I press RESET and behind it CLEAR SCREEN (yes, yes, there is such a button - users were not spoiled by fashionable things then, and the designers thought that the user clears the screen when he needs), nothing happens - the same random garbage.
On top of that, the stabilizer on + 5V is already beginning to bake, the warm tube aroma of freshly burnt varnish lacquer, toli of paint from this stabilizer has gone around the room. I turn off, wait for 5 minutes until full cooling, and I try to debug further in such short series further throughout the debugging, therefore this fact is not further indicated.
If everything worked, then after turning on the computer, the welcome screen would appear on the screen in the form of alternating, flashing "@_" characters in the entire monitor workspace, and after pressing RESET and CS, the screen should clear, and only the cursor for typing the command would remain control program "Monitor".
Visual inspection and dialing of the chains of formation of the image and power gave nothing. And after several days of torment, I discovered that the seller had sent me the wrong analogs of video memory chips. I stood 1403A, although analogs are 1404A. I pulled these registers out of the panels, and nothing has changed on the screen. The seller acknowledged his mistake, and asked to send these registers back to him, but since they were not expensive, I did not bother with it. The original registers cost me about $ 80. They had to wait three weeks.
After replacing the registers, the long-awaited blinking dogs finally appeared (or apples, as you prefer), which means the video memory and along with it the whole video block was working.
I press RESET, CS, the screen is cleared, but the cursor does not appear. So the microprocessor unit does not work. There are not many sources of problems here - either the processor, or the ROM, or a small logic in their binding.
The first component that came under the investigation was a ROM with the “Monitor”, since one of the microcircuits felt warmly.
A little distracted, I will say that the control program is recorded in two memory chips, each of which has 255 memory cells, and each chip has only 4 bits at the output. To control the eight-bit processor, Wozniak put 2 such chips in parallel, received the necessary 8 data bits at the output. And his entire control program fit in 253 bytes (2 bytes remained free).
![](https://habrastorage.org/webt/vn/26/dj/vn26dj0f2ps6q30nt-hs9ium7fy.jpeg)
To read the contents of this memory, I assembled an Arduino-based device on a breadboard.
The controller sequentially went through the addresses of these ROMs, piped 4-bit data into 8-bit and in hexadecimal output to the monitor of the communication channel on the computer. Checking the contents of the ROM, I did not find any errors in it.
Replacing the fine logic also did not produce results, so the suspicion fell on the respectability of the years of the main processor, and its retirement.
I don’t have another 6502-based computer, so I installed it on a mock-up, powered it from Arduinka, 1 MHz generator clock (from the future Specialist PC), installed the NOP command jumpers on the data bus or the ground, and waiting for him to perform an empty action will increase the value of the address counter. But this did not happen. Nothing happened at all. It looks like a stone is now exactly a stone. Ordered another, as befits production MOS. While he was driving, I managed to go on vacation and swim in the sea.

![](https://habrastorage.org/webt/4h/tb/3e/4htb3eiuketvmd8nzjyskokvfyg.jpeg)
Testing the 6502 processor. Yes, it was possible to get 1 MHz from Mega timers, yes, it was possible to do without it at all, I can do it all, but then I wanted to do just that.
After installing the new processor, the inclusion - hello, dogs - RESET - CS - hello command line! The processor unit is working, not even half a year!
The next problem is that I had nothing to enter commands and code into, there was no keyboard.
Keyboard
The keyboard of this PC is a grid of conductors, the nodes of which have buttons. This case is connected to the decoder of the pressed keys, which at the output generates the key code for the pressed key along the seven-bit ASCII line, and a short-term strobe pulse along the separate line. As this pulse passed to the control bus, the processor begins processing the entered character.
![](https://habrastorage.org/webt/mw/li/uh/mwliuhdrirujpivhfv8haawaxxa.jpeg)
To get such a keyboard, in general, the matter is still solved, but this is usually a number with two zeros, and not in domestic rubles. Therefore, I began to think about how to connect a PS / 2 keyboard that I have to a computer.
Nothing more interesting than the Arduino Nano, did not occur. During the evening, I mounted an adapter between PS / 2 and ASCII port with a mounted installation and wrote firmware for it. Since Apple 1 does not have the PgUp and PgDown keys, I used them as the RESET and CLEAR SCREEN buttons. From that day, I didn’t have to hand-to-hand close the legs on the board with tweezers, which was very pleasant.
The typed characters were famously printed on the screen, and even the test program from the documentation for this computer worked. All that it does is to display in a loop all the characters displayed on this computer.
![](https://habrastorage.org/webt/yp/j1/eu/ypj1euz7ppmi2mgpy_avtfryfvk.jpeg)
Top
![](https://habrastorage.org/webt/9t/qa/uf/9tqauffgrfyk6vk6yrtqg8zalis.jpeg)
view bottom view
A funny story happened to the keyboard. Initially, the Return key earned only half - it correctly entered commands into memory, and gave instructions for their execution, but the transfer to a new line did not occur. In general, due to the peculiarities of the terminal, this did not create big problems. But I decided to work this out. I started by studying the concept of a PC, the user Mdesk, with zx-pk.ru, had a great help in this. When I studied the circuit, I didn’t have a single question left in the work of the hardware carriage transfer unit, I sat down at the tester and oscilloscope. The dial of conductors did not give anything - all are whole. Then the oscilloscope went into action. I rang the input signals from the PIA - they were normal, the signal was lost somewhere on the 7451N, I tried to change it to 7450, and the Soviet analogs (155LR1 and 155LR11), this did not work. Untangling the chain further I got to the 74123 one-shot, I had to check the delays it generated. But my adapter physically closes it, which makes the dial uncomfortable.
Then I wrote the test program
280: A9 8D 20 EF FF A9 31 20 EF FF 4C 80 02
All it does is display the sequence Return-1-Return-1 (units with scrolling down).
Launched it, units, as expected, went to the line. Then I took out the adapter from the panel, the units immediately ran down. So the reason is in the adapter. After that, he sped up the problem quickly. The PgUp and PgDown buttons I use to reset and clear the screen. Clearing the screen (CLR) hung on one of Arduin's legs, at the time of cleaning I handed in a unit there, after releasing it dropped to 0. And this same 0 put out the entire CLR line, and in fact it also uses the line feed unit. The solution is simple - I put a diode between Arduinka and CLR, and it all worked!
Since it would be tedious and not always accurate to type a kilobyte hand-to-hand program, I came up with connecting an SD card to the same Arduinka with which you could enter the programs. It works like this - I upload a file named dump.hex to the root, and when I press the TAB key, the controller reads the contents of the file and presses the corresponding keys.
Software
For Apple 1, many programs are not written, I associate this with the imminent appearance of a more advanced computer - Apple 2. And yet there are several games and system programs for it. On the 30th anniversary of Apple 1, enthusiasts even wrote a fairly large demo (link below).
I started all this and looked, but I wanted to write something of my own. I decided to write a game for him 2048. To write the algorithm, coding (before this, under 6502 I couldn’t write) and debugging took 2 pm. The size of the program was 1679 bytes. You can run it on the original hardware, as well as in emulators.
Program
280: 4C F8 08 20 20 20 20 20
288:20 20 32 20 20 20 34 20
290:20 20 38 20 20 31 36 20
298:20 33 32 20 20 36 34 20
2A0:31 32 38 20 32 35 36 20
2A8:35 31 32 31 30 32 34 32
2B0:30 34 38 01 00 00 00 00
2B8:00 00 00 00 00 00 00 00
2C0:00 00 00 2B 2D 2D 2D 2D
2C8:2D 2D 2B 2D 2D 2D 2D 2D
2D0:2D 2B 2D 2D 2D 2D 2D 2D
2D8:2B 2D 2D 2D 2D 2D 2D 2B
2E0:8D 00 A2 00 A9 8D E8 20
2E8:EF FF E0 24 F0 03 4C E6
2F0:02 60 A9 2B 20 EF FF A9
2F8:20 20 EF FF 60 A9 8D 20
300:EF FF 60 0A 2A A8 A9 00
308:79 83 02 20 EF FF C8 A9
310:00 79 83 02 20 EF FF C8
318:A9 00 79 83 02 20 EF FF
320:C8 A9 00 79 83 02 20 EF
328:FF A9 20 20 EF FF 20 F2
330:02 60 20 FD 02 A2 00 BD
338:C3 02 20 EF FF E8 E0 1E
340:F0 03 4C 37 03 60 20 32
348:03 20 F2 02 AD B3 02 20
350:03 03 AD B4 02 20 03 03
358:AD B5 02 20 03 03 AD B6
360:02 20 03 03 20 32 03 20
368:F2 02 AD B7 02 20 03 03
370:AD B8 02 20 03 03 AD B9
378:02 20 03 03 AD BA 02 20
380:03 03 20 32 03 20 F2 02
388:AD BB 02 20 03 03 AD BC
390:02 20 03 03 AD BD 02 20
398:03 03 AD BE 02 20 03 03
3A0:20 32 03 20 F2 02 AD BF
3A8:02 20 03 03 AD C0 02 20
3B0:03 03 AD C1 02 20 03 03
3B8:AD C2 02 20 03 03 20 32
3C0:03 60 32 30 34 38 8D 8D
3C8:57 2D 55 50 8D 41 2D 4C
3D0:45 46 54 8D 44 2D 52 49
3D8:47 48 54 8D 53 2D 44 4F
3E0:57 4E 8D 8D 43 4F 44 45
3E8:3A 20 44 45 4E 49 53 20
3F0:50 41 52 59 53 48 45 56
3F8:8D 8D 50 52 45 53 53 20
400:41 4E 59 20 4B 45 59 A2
408:00 BD C2 03 20 EF FF E8
410:E0 45 F0 03 4C 09 04 AD
418:11 D0 10 FB AD 10 D0 8D
420:E1 02 60 47 41 4D 45 20
428:4F 56 45 52 59 4F 55 20
430:57 49 4E 20 E2 02 A2 00
438:BD 23 04 20 EF FF E8 E0
440:09 F0 03 4C 38 04 A2 34
448:BD C2 03 20 EF FF E8 E0
450:43 F0 03 4C 48 04 AD 11
458:D0 10 FB AD 10 D0 4C F8
460:08 A0 00 AD E1 02 29 0F
468:AA C8 C0 11 F0 C5 BD B3
470:02 C9 00 F0 0A E8 E0 10
478:D0 EF A2 00 4C 69 04 A9
480:01 9D B3 02 8E E1 02 60
488:A2 00 A9 00 9D B3 02 E8
490:E0 10 D0 F8 A9 01 8D B3
498:02 60 00 00 00 00 00 00
4A0:AE 9F 04 BD 9A 04 C9 00
4A8:D0 14 AE 9E 04 BD 9A 04
4B0:AE 9F 04 9D 9A 04 A9 00
4B8:AE 9E 04 9D 9A 04 60 A9
4C0:03 8D 9F 04 A9 02 8D 9E
4C8:04 20 A0 04 A9 02 8D 9F
4D0:04 A9 01 8D 9E 04 20 A0
4D8:04 A9 01 8D 9F 04 A9 00
4E0:8D 9E 04 20 A0 04 A9 03
4E8:8D 9F 04 A9 02 8D 9E 04
4F0:20 A0 04 A9 02 8D 9F 04
4F8:A9 01 8D 9E 04 20 A0 04
500:A9 03 8D 9F 04 A9 02 8D
508:9E 04 20 A0 04 60 20 E2
510:02 A2 00 BD 2C 04 20 EF
518:FF E8 E0 07 F0 03 4C 13
520:05 A2 34 BD C2 03 20 EF
528:FF E8 E0 43 F0 03 4C 23
530:05 AD 11 D0 10 FB AD 10
538:D0 4C F8 08 AE 9E 04 BD
540:9A 04 C9 00 F0 1D AE 9F
548:04 DD 9A 04 D0 15 A8 C8
550:98 AE 9F 04 9D 9A 04 C9
558:0B F0 B3 A9 00 AE 9E 04
560:9D 9A 04 60 A9 02 8D 9E
568:04 A9 03 8D 9F 04 20 3C
570:05 A9 01 8D 9E 04 A9 02
578:8D 9F 04 20 3C 05 A9 00
580:8D 9E 04 A9 01 8D 9F 04
588:20 3C 05 60 20 BF 04 20
590:64 05 20 BF 04 60 AD B3
598:02 8D 9D 04 AD B7 02 8D
5A0:9C 04 AD BB 02 8D 9B 04
5A8:AD BF 02 8D 9A 04 20 8C
5B0:05 AD 9A 04 8D BF 02 AD
5B8:9B 04 8D BB 02 AD 9C 04
5C0:8D B7 02 AD 9D 04 8D B3
5C8:02 AD B4 02 8D 9D 04 AD
5D0:B8 02 8D 9C 04 AD BC 02
5D8:8D 9B 04 AD C0 02 8D 9A
5E0:04 20 8C 05 AD 9A 04 8D
5E8:C0 02 AD 9B 04 8D BC 02
5F0:AD 9C 04 8D B8 02 AD 9D
5F8:04 8D B4 02 AD B5 02 8D
600:9D 04 AD B9 02 8D 9C 04
608:AD BD 02 8D 9B 04 AD C1
610:02 8D 9A 04 20 8C 05 AD
618:9A 04 8D C1 02 AD 9B 04
620:8D BD 02 AD 9C 04 8D B9
628:02 AD 9D 04 8D B5 02 AD
630:B6 02 8D 9D 04 AD BA 02
638:8D 9C 04 AD BE 02 8D 9B
640:04 AD C2 02 8D 9A 04 20
648:8C 05 AD 9A 04 8D C2 02
650:AD 9B 04 8D BE 02 AD 9C
658:04 8D BA 02 AD 9D 04 8D
660:B6 02 60 AD B3 02 8D 9A
668:04 AD B7 02 8D 9B 04 AD
670:BB 02 8D 9C 04 AD BF 02
678:8D 9D 04 20 8C 05 AD 9D
680:04 8D BF 02 AD 9C 04 8D
688:BB 02 AD 9B 04 8D B7 02
690:AD 9A 04 8D B3 02 AD B4
698:02 8D 9A 04 AD B8 02 8D
6A0:9B 04 AD BC 02 8D 9C 04
6A8:AD C0 02 8D 9D 04 20 8C
6B0:05 AD 9D 04 8D C0 02 AD
6B8:9C 04 8D BC 02 AD 9B 04
6C0:8D B8 02 AD 9A 04 8D B4
6C8:02 AD B5 02 8D 9A 04 AD
6D0:B9 02 8D 9B 04 AD BD 02
6D8:8D 9C 04 AD C1 02 8D 9D
6E0:04 20 8C 05 AD 9D 04 8D
6E8:C1 02 AD 9C 04 8D BD 02
6F0:AD 9B 04 8D B9 02 AD 9A
6F8:04 8D B5 02 AD B6 02 8D
700:9A 04 AD BA 02 8D 9B 04
708:AD BE 02 8D 9C 04 AD C2
710:02 8D 9D 04 20 8C 05 AD
718:9D 04 8D C2 02 AD 9C 04
720:8D BE 02 AD 9B 04 8D BA
728:02 AD 9A 04 8D B6 02 60
730:AD B6 02 8D 9A 04 AD B5
738:02 8D 9B 04 AD B4 02 8D
740:9C 04 AD B3 02 8D 9D 04
748:20 8C 05 AD 9D 04 8D B3
750:02 AD 9C 04 8D B4 02 AD
758:9B 04 8D B5 02 AD 9A 04
760:8D B6 02 AD BA 02 8D 9A
768:04 AD B9 02 8D 9B 04 AD
770:B8 02 8D 9C 04 AD B7 02
778:8D 9D 04 20 8C 05 AD 9D
780:04 8D B7 02 AD 9C 04 8D
788:B8 02 AD 9B 04 8D B9 02
790:AD 9A 04 8D BA 02 AD BE
798:02 8D 9A 04 AD BD 02 8D
7A0:9B 04 AD BC 02 8D 9C 04
7A8:AD BB 02 8D 9D 04 20 8C
7B0:05 AD 9D 04 8D BB 02 AD
7B8:9C 04 8D BC 02 AD 9B 04
7C0:8D BD 02 AD 9A 04 8D BE
7C8:02 AD C2 02 8D 9A 04 AD
7D0:C1 02 8D 9B 04 AD C0 02
7D8:8D 9C 04 AD BF 02 8D 9D
7E0:04 20 8C 05 AD 9D 04 8D
7E8:BF 02 AD 9C 04 8D C0 02
7F0:AD 9B 04 8D C1 02 AD 9A
7F8:04 8D C2 02 60 AD B6 02
800:8D 9D 04 AD B5 02 8D 9C
808:04 AD B4 02 8D 9B 04 AD
810:B3 02 8D 9A 04 20 8C 05
818:AD 9A 04 8D B3 02 AD 9B
820:04 8D B4 02 AD 9C 04 8D
828:B5 02 AD 9D 04 8D B6 02
830:AD BA 02 8D 9D 04 AD B9
838:02 8D 9C 04 AD B8 02 8D
840:9B 04 AD B7 02 8D 9A 04
848:20 8C 05 AD 9A 04 8D B7
850:02 AD 9B 04 8D B8 02 AD
858:9C 04 8D B9 02 AD 9D 04
860:8D BA 02 AD BE 02 8D 9D
868:04 AD BD 02 8D 9C 04 AD
870:BC 02 8D 9B 04 AD BB 02
878:8D 9A 04 20 8C 05 AD 9A
880:04 8D BB 02 AD 9B 04 8D
888:BC 02 AD 9C 04 8D BD 02
890:AD 9D 04 8D BE 02 AD C2
898:02 8D 9D 04 AD C1 02 8D
8A0:9C 04 AD C0 02 8D 9B 04
8A8:AD BF 02 8D 9A 04 20 8C
8B0:05 AD 9A 04 8D BF 02 AD
8B8:9B 04 8D C0 02 AD 9C 04
8C0:8D C1 02 AD 9D 04 8D C2
8C8:02 60 AD 11 D0 10 FB AD
8D0:10 D0 8D E1 02 C9 D7 D0
8D8:04 20 96 05 60 C9 D3 D0
8E0:04 20 63 06 60 C9 C1 D0
8E8:04 20 30 07 60 C9 C4 D0
8F0:04 20 FD 07 60 4C CA 08
8F8:20 88 04 20 E2 02 20 07
900:04 20 E2 02 20 61 04 20
908:46 03 20 CA 08 4C 01 09
Video work on youtube.
What's next?
First of all the body, I want to make it beautiful.
Adapter for keyboard and SD card. It is necessary to get rid of the mounted installation, I plan to develop and order a PCB for it in China.
Work with multiple files. I plan to write a file manager for Arduinka, which will allow you to select a file from the card and run it.
I also purchased a connector for expansion cards. I want to solder for him an audio board for the K580VI53 (simply because it is this timer that is lying around the house) and draw a small demo with sound.
This is all likely to be the next article.
Conclusion
To say that I got great pleasure from assembling, debugging and writing a program for Apple 1 is almost nothing to say.
Many thanks to the user Mdesk, and all the guys from zx-pk.ru for their help in explaining the intricacies of the architecture, and for helpful tips in setting up this PC.
Well, the biggest thanks to Steve Wozniak for this wonderful personal computer !!!
useful links
Apple 1 on wiki
Download BASIC on Altair 8800
Apple 1 and modern monitor (three and a half minutes of pain and suffering)
30 years Apple 1 (demo)
Online Apple 1 emulator
Online assembler / disassembler / debugger 6502
Russian sites dedicated to Apple 1:
mdesk. ru
zx-pk.ru