mirror of
https://github.com/quorten/macsehw.git
synced 2024-06-13 00:29:29 +00:00
Initial commit
This commit is contained in:
commit
4ce5af75c2
129
LICENSE
Normal file
129
LICENSE
Normal file
|
@ -0,0 +1,129 @@
|
|||
CC0 1.0 Universal
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically
|
||||
confer exclusive Copyright and Related Rights (defined below) upon the
|
||||
creator and subsequent owner(s) (each and all, an "owner") of an
|
||||
original work of authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work
|
||||
for the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without
|
||||
fear of later claims of infringement build upon, modify, incorporate
|
||||
in other works, reuse and redistribute as freely as possible in any
|
||||
form whatsoever and for any purposes, including without limitation
|
||||
commercial purposes. These owners may contribute to the Commons to
|
||||
promote the ideal of a free culture and the further production of
|
||||
creative, cultural and scientific works, or to gain reputation or
|
||||
greater distribution for their Work in part through the use and
|
||||
efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or
|
||||
she is an owner of Copyright and Related Rights in the Work,
|
||||
voluntarily elects to apply CC0 to the Work and publicly distribute
|
||||
the Work under its terms, with knowledge of his or her Copyright and
|
||||
Related Rights in the Work and the meaning and intended legal effect
|
||||
of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may
|
||||
be protected by copyright and related or neighboring rights
|
||||
("Copyright and Related Rights"). Copyright and Related Rights
|
||||
include, but are not limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
|
||||
ii. moral rights retained by the original author(s) and/or
|
||||
performer(s);
|
||||
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
|
||||
v. rights protecting the extraction, dissemination, use and reuse of
|
||||
data in a Work;
|
||||
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of
|
||||
the European Parliament and of the Council of 11 March 1996 on the
|
||||
legal protection of databases, and under any national
|
||||
implementation thereof, including any amended or successor version
|
||||
of such directive); and
|
||||
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in
|
||||
contravention of, applicable law, Affirmer hereby overtly, fully,
|
||||
permanently, irrevocably and unconditionally waives, abandons, and
|
||||
surrenders all of Affirmer's Copyright and Related Rights and
|
||||
associated claims and causes of action, whether now known or unknown
|
||||
(including existing as well as future claims and causes of action), in
|
||||
the Work (i) in all territories worldwide, (ii) for the maximum
|
||||
duration provided by applicable law or treaty (including future time
|
||||
extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"Waiver"). Affirmer makes the Waiver for the benefit of each member of
|
||||
the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal
|
||||
or equitable action to disrupt the quiet enjoyment of the Work by the
|
||||
public as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any
|
||||
reason be judged legally invalid or ineffective under applicable law,
|
||||
then the Waiver shall be preserved to the maximum extent permitted
|
||||
taking into account Affirmer's express Statement of Purpose. In
|
||||
addition, to the extent the Waiver is so judged Affirmer hereby grants
|
||||
to each affected person a royalty-free, non transferable, non
|
||||
sublicensable, non exclusive, irrevocable and unconditional license to
|
||||
exercise Affirmer's Copyright and Related Rights in the Work (i) in
|
||||
all territories worldwide, (ii) for the maximum duration provided by
|
||||
applicable law or treaty (including future time extensions), (iii) in
|
||||
any current or future medium and for any number of copies, and (iv)
|
||||
for any purpose whatsoever, including without limitation commercial,
|
||||
advertising or promotional purposes (the "License"). The License shall
|
||||
be deemed effective as of the date CC0 was applied by Affirmer to the
|
||||
Work. Should any part of the License for any reason be judged legally
|
||||
invalid or ineffective under applicable law, such partial invalidity
|
||||
or ineffectiveness shall not invalidate the remainder of the License,
|
||||
and in such case Affirmer hereby affirms that he or she will not (i)
|
||||
exercise any of his or her remaining Copyright and Related Rights in
|
||||
the Work or (ii) assert any associated claims and causes of action
|
||||
with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived,
|
||||
abandoned, surrendered, licensed or otherwise affected by this
|
||||
document.
|
||||
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties
|
||||
of title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects,
|
||||
accuracy, or the present or absence of errors, whether or not
|
||||
discoverable, all to the greatest extent permissible under
|
||||
applicable law.
|
||||
|
||||
c. Affirmer disclaims responsibility for clearing rights of other
|
||||
persons that may apply to the Work or any use thereof, including
|
||||
without limitation any person's Copyright and Related Rights in
|
||||
the Work. Further, Affirmer disclaims responsibility for
|
||||
obtaining any necessary consents, permissions or other rights
|
||||
required for any use of the Work.
|
||||
|
||||
d. Affirmer understands and acknowledges that Creative Commons is
|
||||
not a party to this document and has no duty or obligation with
|
||||
respect to this CC0 or use of the Work.
|
||||
|
||||
For more information, please see
|
||||
<http://creativecommons.org/publicdomain/zero/1.0/>
|
64
README.md
Normal file
64
README.md
Normal file
|
@ -0,0 +1,64 @@
|
|||
# Macintosh SE Hardware
|
||||
|
||||
This is my effort to assemble all the pertinent hardware design
|
||||
information on the Macintosh SE into a single coherent information
|
||||
repository. The goal is to be able to have sufficiently detailed
|
||||
information to, in theory, reproduce an identical (or nearly so)
|
||||
physical, functional copy of the Macintosh SE.
|
||||
|
||||
However, my primary interest in having this information available is
|
||||
to have detailed information for studying the Macintosh SE hardware,
|
||||
and for maintaining existing Macintosh SE computers.
|
||||
|
||||
Conventional Macintosh emulator software prioritizes access to
|
||||
application software without regard to the mechanical and electrical
|
||||
design of the actual machine itself. My hope is that this repository
|
||||
of information will enable the same kind of virtual access to the
|
||||
hardware as we have to the vintage Macintosh software through the use
|
||||
of conventional Macintosh emulators.
|
||||
|
||||
## What is currently available?
|
||||
|
||||
Currently, this repository only contains a vector graphics hand
|
||||
trace-over of page 1 of the Macintosh SE Main Logic Board (MLB)
|
||||
schematics. Typed text is used for all legible text. Since pages 2
|
||||
and 3 of the MLB schematics are missing and nowhere to be found on the
|
||||
Internet, they will have to be redrawn from the reverse engineered
|
||||
printed circuit board layout.
|
||||
|
||||
Follow this link to [jump to the redrawn
|
||||
schematic](old_artifacts/schems/retrace_se_mlb_p1.pdf).
|
||||
|
||||
There are lots of other independent projects with good pieces of
|
||||
information out and about on the Macintosh SE. For the time being,
|
||||
these are linked from documentation in the repository. In the event
|
||||
the project has a potentially insecure future or lacks a durable
|
||||
storage location, the pertinent information is copied into this
|
||||
repository.
|
||||
|
||||
## See also
|
||||
|
||||
Check out the GitHub repository repository with redrawn schematics for
|
||||
the Macintosh SE/30:
|
||||
|
||||
https://github.com/mishimasensei/macse30mlb
|
||||
|
||||
## License
|
||||
|
||||
Since a primary goal of this project is to assemble historic
|
||||
information into a coherent repository, as much as possible, new
|
||||
developments are released into the public domain. After all, as is
|
||||
well understood in the vintage computing community, all patents and
|
||||
copyrights are destined to eventually expire with the passing of
|
||||
enough time, at which point the covered works cede into the public
|
||||
domain.
|
||||
|
||||
Therefore, if you don't have an interest in exercising any exclusive
|
||||
rights covered under copyright, you might as well simply declare your
|
||||
works to enter the public domain early, rather than using a permissive
|
||||
license or a copyleft license. For example, the CERN Open Hardware
|
||||
Licence.
|
||||
|
||||
In the event that your jurisdiction does not have the concept of the
|
||||
public domain, the Creative Commons Public Domain Dedication License
|
||||
(CC0) is used as a fallback permissive license.
|
7
RECAPPING.md
Normal file
7
RECAPPING.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Recap project links and info
|
||||
|
||||
Here is a list of links to various Macintosh SE recapping projects.
|
||||
|
||||
----------
|
||||
|
||||
https://recapamac.com.au/macintosh-se/
|
28
VIDEO.md
Normal file
28
VIDEO.md
Normal file
|
@ -0,0 +1,28 @@
|
|||
# Macintosh SE Internal CRT Replacement
|
||||
|
||||
Got a Macintosh SE with a non-functional CRT? No worries, there is
|
||||
actually an easy workaround to get video on your Macintosh SE!
|
||||
|
||||
The CRT is controlled by 3 digital output signals:
|
||||
|
||||
* `VIDOUT`
|
||||
* `*HSYNC`
|
||||
* `*VSYNC`
|
||||
|
||||
These are all 5 V logic signals. Therefore, they can be packed up
|
||||
into a DB-9 connector for TTL or ECL video. Commercially available
|
||||
flat panel displays are avaiable with adapter electronics that can
|
||||
accept TTL or ECL video, since it apparently became very popular in
|
||||
specialized industrial equipment. Once you've got your monitor and
|
||||
connectors all set up, you should be good to go.
|
||||
|
||||
* Visited 2020-08-06:
|
||||
https://allpinouts.org/pinouts/connectors/computer_video/ecl-video/
|
||||
* Visited 2020-08-06:
|
||||
https://allpinouts.org/pinouts/connectors/computer_video/monochrome-ttl/
|
||||
|
||||
It might be relevant that ECL stands for "Emitter Coupled Logic" in
|
||||
other contexts, here is a source for reference.
|
||||
|
||||
* Visited 2020-08-06:
|
||||
https://technobyte.org/logic-families-ttl-cmos-ecl-bicmos-difference/
|
4
firmware/README.md
Normal file
4
firmware/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# firmware
|
||||
|
||||
This directory contains firmware images required for the various ROM
|
||||
chips in the hardware design.
|
4
firmware/adb/README.md
Normal file
4
firmware/adb/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# adb
|
||||
|
||||
This directory contains the firmware for the ADB (Apple Desktop Bus)
|
||||
chip, which is actually an Apple-branded PIC16CR54 microcontroller.
|
9
firmware/rom/README.md
Normal file
9
firmware/rom/README.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
# rom
|
||||
|
||||
This directory can contain ROM dumps of the Macintosh SE's main system
|
||||
firmware boot ROM that is directly accessible to the CPU. However,
|
||||
due to their uncertain copyright status, they are currently not
|
||||
included in the repository.
|
||||
|
||||
Additionally, links to other projects to provide a modern replacement
|
||||
ROM for the Macintosh SE are also provided here.
|
206
firmware/rtc/MacPlusRTC.cpp
Normal file
206
firmware/rtc/MacPlusRTC.cpp
Normal file
|
@ -0,0 +1,206 @@
|
|||
#include <avr/wdt.h>
|
||||
#include <avr/interrupt.h>
|
||||
#include <EEPROM.h>
|
||||
|
||||
/****************************************
|
||||
* *
|
||||
* A drop-in replacement for the custom *
|
||||
* RTC chip in early Apple Macintosh *
|
||||
* computers, using an ATtiny85. *
|
||||
* Uses an external 32.768kHz crystal *
|
||||
* on pins 2 and 3 as a clock source. *
|
||||
* __ __ *
|
||||
* 1SEC -|1 \/ 8|- VCC *
|
||||
* XTAL2 -|2 7|- RTC.CLK *
|
||||
* XTAL1 -|3 6|- RTC.DATA *
|
||||
* GND -|4____5|- !RTC *
|
||||
* *
|
||||
****************************************/
|
||||
|
||||
const int ONE_SEC_PIN = 1; // A 1Hz square wave on PB5
|
||||
const int RTC_ENABLE_PIN = 5; // Active low chip enable on PB0
|
||||
const int SERIAL_DATA_PIN = 6; // Bi-directional serial data line on PB1
|
||||
const int SERIAL_CLOCK_PIN = 7; // Serial clock input on PB2
|
||||
|
||||
const int PRAM_SIZE = 256; // Mac Plus used the xPRAM chip with 256 bytes, time is a separate 4 additional bytes
|
||||
//const int PRAM_SIZE = 20; // Models earlier than the Plus had 20 bytes of PRAM
|
||||
|
||||
volatile byte serialBitNum = 0;
|
||||
volatile byte address = 0;
|
||||
volatile byte serialData = 0;
|
||||
|
||||
|
||||
enum SerialStateType { SERIAL_DISABLED, RECEIVING_COMMAND, SENDING_DATA, RECEIVING_DATA };
|
||||
volatile SerialStateType serialState = SERIAL_DISABLED;
|
||||
|
||||
volatile unsigned long seconds = 0;
|
||||
volatile byte pram[PRAM_SIZE] = {}; // 256 Bytes of PRAM, the first four of which count the number of seconds since 1/1/1904
|
||||
|
||||
/*
|
||||
* The following is potential locations of various bits of PRAM data, none of this is in any way certain:
|
||||
* Sound volume is in pram[0x08]
|
||||
* Alert sound is in param[0x7c - 0x7d]
|
||||
* Machine location and timezone is in pram[0xE4 - 0xEF]
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* An interrupt to both increment the seconds counter and generate the square wave
|
||||
*/
|
||||
void halfSecondInterrupt() {
|
||||
PINB = 1<<PINB0; // Flip the one-second pin
|
||||
if(!(PINB & (1<<PINB0))) { // If the one-second pin is low
|
||||
seconds++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The actual serial communication can be done in the main loop, this way the clock still gets incremented
|
||||
*/
|
||||
void handleRTCEnableInterrupt() {
|
||||
serialBitNum = 0;
|
||||
address = 0;
|
||||
serialData = 0;
|
||||
if(!(PINB&(1<<RTC_ENABLE_PIN))){ // Simulates a falling interrupt
|
||||
serialState = RECEIVING_COMMAND;
|
||||
// enableRTC = true;
|
||||
} else { // Simulates a rising interrupt
|
||||
clearState();
|
||||
}
|
||||
}
|
||||
|
||||
void clearState() {
|
||||
DDRB &= ~(1<<DDB1); // Return the pin to input mode
|
||||
PORTB |= (1<<PORTB1); // Set pullup resistor
|
||||
serialState = SERIAL_DISABLED;
|
||||
serialBitNum = 0;
|
||||
address = 0;
|
||||
serialData = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The ATtiny has EEPROM, lets use it to store the contents of PRAM in case of power failure,
|
||||
* this is an improvement over the original, still a good idea to keep the chip powered by a
|
||||
* battery or supercapacitor so that the clock continues to advance.
|
||||
*
|
||||
*/
|
||||
void savePRAM() {
|
||||
noInterrupts(); // Don't update the seconds counter while we're saving it to ROM, probably unnecessary
|
||||
for(int i = 0; i < 4; i++) {
|
||||
EEPROM.update(i,(seconds>>(8*i))&0xff);
|
||||
}
|
||||
interrupts(); // Go ahead and interrupt us while we save the rest
|
||||
for(int i = 0; i < PRAM_SIZE; i++) {
|
||||
EEPROM.update(i+4,pram[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void goToSleep() {
|
||||
bitClear(MCUCR,SM0); // The two SM bits must be set to 00 to enter idle mode
|
||||
bitClear(MCUCR,SM1); // Sleeping in other modes will disable the timer
|
||||
bitSet(MCUCR,SE);
|
||||
__asm__("sleep" "\n\t");
|
||||
bitClear(MCUCR,SE);
|
||||
}
|
||||
|
||||
void setup() {
|
||||
noInterrupts(); // Disable interrupts while we set things up
|
||||
|
||||
pinMode(ONE_SEC_PIN, OUTPUT); // The 1Hz square wave (used, I think, for interrupts elsewhere in the system)
|
||||
pinMode(RTC_ENABLE_PIN, INPUT_PULLUP); // The processor pulls this pin low when it wants access
|
||||
pinMode(SERIAL_CLOCK_PIN, INPUT_PULLUP); // The serial clock is driven by the processor
|
||||
pinMode(SERIAL_DATA_PIN, INPUT_PULLUP); // We'll need to switch this to output when sending data
|
||||
|
||||
wdt_disable(); // Disable watchdog
|
||||
bitSet(ACSR,ACD); // Disable Analog Comparator, don't need it, saves power
|
||||
bitSet(PRR,PRTIM1); // Disable Timer 1, only using Timer 0, Timer 1 uses around ten times as much current
|
||||
bitSet(PRR,PRUSI); // Disable Universal Serial Interface, using Apple's RTC serial interface on pins 6 and 7
|
||||
bitSet(PRR,PRADC); // Disable Analog/Digital Converter
|
||||
|
||||
bitSet(GIMSK,PCIE); // Pin Change Interrupt Enable
|
||||
bitSet(PCMSK,PCINT0); // turn on RTC enable interrupt
|
||||
|
||||
// for(int i = 0; i < 4; i++) {
|
||||
// seconds += ((unsigned long)EEPROM.read(i))<<(8*i);
|
||||
// }
|
||||
// for(int i = 0; i < PRAM_SIZE; i--) { // Preload PRAM with saved values
|
||||
// pram[i] = EEPROM.read(i+4);
|
||||
// }
|
||||
|
||||
//set up timer
|
||||
bitSet(GTCCR,TSM); // Turns off timers while we set it up
|
||||
bitSet(TIMSK,TOIE0); // Set Timer/Counter0 Overflow Interrupt Enable
|
||||
TCCR0B = 0b111; // Set prescaler, 32,768Hz/64 = 512Hz, fills up the 8-bit counter (256) once every half second
|
||||
TCNT0 = 0; // Clear the counter
|
||||
bitClear(GTCCR,TSM); // Turns timers back on
|
||||
|
||||
interrupts(); //We're done setting up, enable those interrupts again
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if(digitalRead(RTC_ENABLE_PIN)) {
|
||||
clearState();
|
||||
goToSleep();
|
||||
} else if(digitalRead(SERIAL_CLOCK_PIN)) {
|
||||
switch(serialState) {
|
||||
|
||||
case RECEIVING_COMMAND:
|
||||
bitWrite(address,7-serialBitNum,digitalRead(SERIAL_DATA_PIN));
|
||||
serialBitNum++;
|
||||
if(serialBitNum > 7) {
|
||||
boolean writeRequest = address&(1<<7); // the MSB determines if it's a write request or not
|
||||
address &= ~(1<<7); // Discard the first bit, it's not part of the address
|
||||
serialBitNum = 0;
|
||||
if(writeRequest) {
|
||||
serialState = RECEIVING_DATA;
|
||||
serialBitNum = 0;
|
||||
} else {
|
||||
if (address < 4) {
|
||||
serialData = (seconds>>(8*address))&0xff;
|
||||
} if(!(address&0b0110000)) { // Apparently this address range is off-limits for reading
|
||||
serialData = pram[address];
|
||||
}
|
||||
serialState = SENDING_DATA;
|
||||
serialBitNum = 0;
|
||||
pinMode(SERIAL_DATA_PIN, OUTPUT); // Set the pin to output mode
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case RECEIVING_DATA:
|
||||
bitWrite(serialData,7-serialBitNum,digitalRead(SERIAL_DATA_PIN));
|
||||
serialBitNum++;
|
||||
if(serialBitNum > 7) {
|
||||
if(address < 4) {
|
||||
noInterrupts(); // Don't update the seconds counter while we're updating it, bad stuff could happen
|
||||
seconds = (seconds & ~(((long)0xff)<<address)) | (((long)serialData)<<address);
|
||||
interrupts();
|
||||
} else {
|
||||
pram[address] = serialData;
|
||||
}
|
||||
// savePRAM();
|
||||
clearState();
|
||||
}
|
||||
break;
|
||||
|
||||
case SENDING_DATA:
|
||||
digitalWrite(SERIAL_DATA_PIN,bitRead(serialData,7-serialBitNum));
|
||||
serialBitNum++;
|
||||
if(serialBitNum > 7) {
|
||||
clearState();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Actually attach the interrupt functions
|
||||
*/
|
||||
ISR(PCINT0_vect) {
|
||||
handleRTCEnableInterrupt();
|
||||
}
|
||||
|
||||
ISR(TIMER0_OVF) {
|
||||
halfSecondInterrupt();
|
||||
}
|
11
firmware/rtc/README.md
Normal file
11
firmware/rtc/README.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
# RTC
|
||||
|
||||
This directory contains a work-in-progress firmware for implementing a
|
||||
drop-in replacement for the RTC on ATTiny85 microcontroller. I've
|
||||
made a few modification to this particular copy, but it still needs
|
||||
more work to be fully functional.
|
||||
|
||||
Source, Visited 2020-08-05:
|
||||
|
||||
* https://www.reddit.com/r/VintageApple/comments/91e5cf/couldnt_find_a_replacement_for_the_rtcpram_chip/e2xqq60/
|
||||
* https://pastebin.com/baPZ4nN4
|
4
hardware/3d_print/README.md
Normal file
4
hardware/3d_print/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# 3d_prints
|
||||
|
||||
This directory contains 3D printable parts like the external enclosure
|
||||
case, etc.
|
4
hardware/README.md
Normal file
4
hardware/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# hardware
|
||||
|
||||
This directory contains design files, schematics, and related
|
||||
documentation for hardware components.
|
6
hardware/fpga/README.md
Normal file
6
hardware/fpga/README.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
# fpga
|
||||
|
||||
This directory contains hardware description language (Verilog/VHDL)
|
||||
source files for the Field Programmable Gate Arrays (FPGAs) that
|
||||
implement the functions of the custom Application Specific Integrated
|
||||
Circuits (ASICs) found in the original hardware.
|
37
hardware/fpga/bbu/README.md
Normal file
37
hardware/fpga/bbu/README.md
Normal file
|
@ -0,0 +1,37 @@
|
|||
# "BBU" Apple Custom Silicon
|
||||
|
||||
The "BBU", as it is called on the Macintosh SE's printed circuit board
|
||||
silkscreen, is a relatively complex Apple custom silicon chip,
|
||||
compared to the other custom chips on the Macintosh SE's Main Logic
|
||||
Board (MLB). Despite its intimidating look as a chip with a huge
|
||||
number of pins, its purpose can be summarized as follows.
|
||||
|
||||
* Provide a single address bus interface to ROM, RAM, and I/O devices,
|
||||
including simple digital I/O pins.
|
||||
|
||||
* Scan the CRT by driving the primary digital control signals
|
||||
(`*VSYNC`, `*HSYNC`, `VIDOUT`).
|
||||
|
||||
There might be additional processing functions it may provide as a
|
||||
convenience between the CPU and the various other hardware chips, but
|
||||
chances are these processing functions are relatively simple.
|
||||
|
||||
Most of the I/O pins that are connected to the BBU are single-bit
|
||||
digital I/O signals that are relatively easy to understand. Reverse
|
||||
engineering the Macintosh SE's firmware may be required to determine
|
||||
how these pins are mapped into the CPU's address space, but once that
|
||||
determination is made, providing a replica interface to most of the
|
||||
connected hardware should be super-easy.
|
||||
|
||||
The following I/O chips are connected to the BBU:
|
||||
|
||||
* VIA interrupt controller
|
||||
|
||||
* IWM/SWIM floppy disk controller
|
||||
|
||||
* SCSI Controller
|
||||
|
||||
* Serial Communications Controller (SCC)
|
||||
|
||||
Other chips that are connected to the BBU are mainly interfaced via
|
||||
only simple, single-pin interfaces.
|
85
hardware/fpga/bbu/bbu_pinout.csv
Normal file
85
hardware/fpga/bbu/bbu_pinout.csv
Normal file
|
@ -0,0 +1,85 @@
|
|||
BBU Pin,Signal Name,Description,Device Connection,Device Pin
|
||||
1,GND,,,
|
||||
2,RD7,,,
|
||||
3,RD8,,,
|
||||
4,RD9,,,
|
||||
5,RD10,,,
|
||||
6,RD11,,,
|
||||
7,RD12,,,
|
||||
8,RD13,,,
|
||||
9,RD14,,,
|
||||
10,RD15,,,
|
||||
11,EXTPDS,,,
|
||||
12,EN245,Select Data Buffer,74LS245,
|
||||
13,VCC,,,
|
||||
14,/WR,,,
|
||||
15,/CAS-SIMM3,,SIMM3,2
|
||||
16,/CAS-SIMM1,,SIMM1,2
|
||||
17,/EOP,,53C80,
|
||||
18,/CAS-SIMM4,,SIMM4,2
|
||||
19,/CAS-SIMM2,,SIMM2,2
|
||||
20,/RAS,,,
|
||||
21,GND,,,
|
||||
22,VCC,,,
|
||||
23,A23,,,
|
||||
24,A22,,,
|
||||
25,A21,,,
|
||||
26,A20,,,
|
||||
27,A19,,,
|
||||
28,A17,,,
|
||||
29,A9,,,
|
||||
30,/IPL1,,68000,
|
||||
31,/IPL0,,68000,
|
||||
32,IRQ,,65C22/6523,
|
||||
33,/LDS,,68000,
|
||||
34,/BERR,,68000,
|
||||
35,/UDS,,,
|
||||
36,/VPA,,68000,
|
||||
37,CK,,68000,
|
||||
38,/DTACK,,68000,
|
||||
39,SELROM,Select ROM,ROM,"20 on ROM HI, LO"
|
||||
40,"RTxCB, PCLK, ADB CLK",All the things,"85C30, ADB, GLU","20 & 28 on 85C30, 16 on ADB, 9 on GLU"
|
||||
41,/AS,,,
|
||||
42,VCC,,,
|
||||
43,GND,,,
|
||||
44,FCLK,,"SWIM, GLU","24 on SWIM, 19 on GLU"
|
||||
45,SELSCC,Select SCC,85C30,32 on /CE
|
||||
46,/RD,,85C30,
|
||||
47,R/W,,,
|
||||
48,SELSWIM,Select SWIM,SWIM,7 on /DEV
|
||||
49,EXTFLP,PWM,External Floppy,10 on PWM
|
||||
50,PB7,,65C22/6523,
|
||||
51,SELSND,Select Sound,SND,
|
||||
52,EXTPDS,,,
|
||||
53,PA6,,65C22/6523,
|
||||
54,/LDS,,,
|
||||
55,DRQ,,53C80,22 on DRQ
|
||||
56,/DACK,,53C80,26 on /DACK
|
||||
57,SELSCSI,Select SCSI,53C80,21 on /CS
|
||||
58,SELVIA,Select VIA,65C22/6523,24 on RS0
|
||||
59,/RST,,,
|
||||
60,HSYNC,Horizontal Sync,J12,Pin 10 on J12
|
||||
61,VSYNC,Veritcal Sync,"J12, 65C22/6523","Pin 11 on J12, 40 on DB7"
|
||||
62,VIDOUT,Composite Video Out,"J12, 65C22/6523","Pin 9 on J12, 28 on PC3"
|
||||
63,GND,,,
|
||||
64,VCC,,,
|
||||
65,RA9,,,
|
||||
66,RA7,,,
|
||||
67,RA8,,,
|
||||
68,RA6,,,
|
||||
69,RD0,,,
|
||||
70,RA5,,,
|
||||
71,RA4,,,
|
||||
72,RD1,,,
|
||||
73,RA3,,,
|
||||
74,RD2,,,
|
||||
75,RD3,,,
|
||||
76,RA2,,,
|
||||
77,RD4,,,
|
||||
78,RA1,,,
|
||||
79,RA0,,,
|
||||
80,RD5,,,
|
||||
81,/PMCYC,,74F257,/OE
|
||||
82,EN257,Select Address Buffer,74F257,
|
||||
83,RD6,,,
|
||||
84,VCC,,,
|
|
6
hardware/fpga/glu/README.md
Normal file
6
hardware/fpga/glu/README.md
Normal file
|
@ -0,0 +1,6 @@
|
|||
# GLU
|
||||
|
||||
The GLU chip is a Programmable Array Logic (PAL) chip used to
|
||||
facilitate I/O logic and the like. In particular, it is a PAL16L8.
|
||||
The equation list and fusemap that can be used to program a modern
|
||||
ATF16V8 chip is contained here.
|
14
hardware/fpga/rtc/README.md
Normal file
14
hardware/fpga/rtc/README.md
Normal file
|
@ -0,0 +1,14 @@
|
|||
# RTC Apple Custom Silicon
|
||||
|
||||
The RTC (Real-Time Clock) chip within the Macintosh SE is an Apple
|
||||
custom silicon chip that implements the real-time clock and
|
||||
battery-backed PRAM (Parameter RAM). Fortunately, its simplicity has
|
||||
yielded a fairly complete replacement chip design that is based around
|
||||
the pin-compatible ATTiny85 chip running appropriate firmware. See
|
||||
the `firmware` directory for details.
|
||||
|
||||
Nevertheless, if we do get a microscopic chip scan of the original
|
||||
silicon, this directory would contain corresponding design files to
|
||||
replicate the original design as-is. Since the chip design is so
|
||||
simple, this might be easily doable with conventional DSLR macro
|
||||
photography after the packaging is opened up.
|
3
hardware/pcb/README.md
Normal file
3
hardware/pcb/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# pcb
|
||||
|
||||
This directory contains Printed Circuit Board (PCB) designs.
|
13
hardware/pcb/mlb/README.md
Normal file
13
hardware/pcb/mlb/README.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
# mlb
|
||||
|
||||
This directory contains the schematics and circuit board design for
|
||||
the Macintosh SE Main Logic Board (MLB).
|
||||
|
||||
PDF schematics, Gerber files, and other generated files are found in
|
||||
the [output](output) directory.
|
||||
|
||||
Check out this forum thread on the 68kMLA where development on reverse
|
||||
engineering and replicating the Macintosh SE's MLB is happening.
|
||||
|
||||
https://68kmla.org/forums/index.php?app=forums&module=forums&controller=topic&id=60059
|
||||
|
4
hardware/pcb/mlb/output/README.md
Normal file
4
hardware/pcb/mlb/output/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Generated Artifacts
|
||||
|
||||
This directory contains files/data that have been generated from
|
||||
source files within.
|
12
old_artifacts/README.md
Normal file
12
old_artifacts/README.md
Normal file
|
@ -0,0 +1,12 @@
|
|||
# old_artifacts
|
||||
|
||||
This directory contains pertinent information that came from the
|
||||
original manufactured and distributed artifacts.
|
||||
|
||||
* [schems](schems): Scans and vector retraces of photocopied
|
||||
schematics distributed to anyone who requested them.
|
||||
|
||||
* [mlb_stock_photos](mlb_stock_photos): Photographs of the
|
||||
mass-production manufactured Macintosh SE main logic board, as is
|
||||
typically photographed for the sake of Internet forum communications
|
||||
and sales, as opposed to reproduction-oriented photos.
|
2
old_artifacts/mlb_stock_photos/.gitignore
vendored
Normal file
2
old_artifacts/mlb_stock_photos/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
recapamac_se_mlb.jpg
|
||||
wikipedia_se_mlb.jpg
|
11
old_artifacts/mlb_stock_photos/README.md
Normal file
11
old_artifacts/mlb_stock_photos/README.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
These are links to helpful photos of the of the Macintosh SE Main
|
||||
Logic Board (MLB).
|
||||
|
||||
PLEASE NOTE: The MLB in the photo from `recapamac.com` is hacked.
|
||||
|
||||
Source URLs of accompanying web pages and photos:
|
||||
|
||||
* Visited 2020-08-05: https://en.wikipedia.org/wiki/Macintosh_SE
|
||||
* Visited 2020-08-05: https://upload.wikimedia.org/wikipedia/commons/6/65/Apple_Macintosh_SE_Main_PCB.jpg
|
||||
* Visited 2020-08-05: https://recapamac.com.au/macintosh-se/
|
||||
* Visited 2020-08-05: https://recapamac.com.au/wp-content/uploads/2019/08/mac_se_logic.jpg
|
8
old_artifacts/mlb_stock_photos/get_photos.sh
Executable file
8
old_artifacts/mlb_stock_photos/get_photos.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
#! /bin/sh
|
||||
# Use a shell script to download the photos so that we do not add
|
||||
# bloat to the repository size that we don't strictly need. GitHub
|
||||
# has bandwidth limits, so let's try to keep away from those as much
|
||||
# as possible.
|
||||
|
||||
curl -L https://upload.wikimedia.org/wikipedia/commons/6/65/Apple_Macintosh_SE_Main_PCB.jpg -o wikipedia_se_mlb.jpg
|
||||
curl -L https://recapamac.com.au/wp-content/uploads/2019/08/mac_se_logic.jpg -o recapamac_se_mlb.jpg
|
3
old_artifacts/schems/.gitignore
vendored
Normal file
3
old_artifacts/schems/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
se_mlb_p1.gif
|
||||
se_mlb_p1_tmp.png
|
||||
se_mlb_p1_proc.png
|
17
old_artifacts/schems/Makefile
Normal file
17
old_artifacts/schems/Makefile
Normal file
|
@ -0,0 +1,17 @@
|
|||
all: retrace_se_mlb_p1.pdf
|
||||
|
||||
se_mlb_p1.gif:
|
||||
./get_scans.sh
|
||||
|
||||
se_mlb_p1_proc.png: se_mlb_p1.gif
|
||||
./resize-mlb-scan.sh
|
||||
|
||||
retrace_se_mlb_p1.pdf: retrace_se_mlb_p1.svg se_mlb_p1_proc.png
|
||||
inkscape --export-pdf=$@ $<
|
||||
|
||||
mostlyclean:
|
||||
rm -f se_mlb_p1_tmp.png
|
||||
rm -f se_mlb_p1_proc.png
|
||||
|
||||
clean: mostlyclean
|
||||
rm -f se_mlb_p1.gif
|
51
old_artifacts/schems/README.md
Normal file
51
old_artifacts/schems/README.md
Normal file
|
@ -0,0 +1,51 @@
|
|||
These are links to the official Apple Macintosh SE schematics.
|
||||
|
||||
Source website: https://museo.freaknet.org/gallery/apple/stuff/mac/andreas.kann/schemat.html
|
||||
|
||||
Unfortunately, there are no BOMARC schematics available for the
|
||||
Macintosh SE.
|
||||
|
||||
The Internet Archive also has a copy of purportedly the same Macintosh
|
||||
SE schematics scan.
|
||||
|
||||
https://archive.org/details/Macintosh68kSchematics
|
||||
|
||||
----------
|
||||
|
||||
Due to the illegiblity of the original Main Logic Board (MLB) page 1
|
||||
scan, this repository also contains a retrace of the schematic,
|
||||
striving to be as faithful as possible to the original. The retrace
|
||||
was done by hand and careful eyeing in Inkscape, after doing some
|
||||
simple image processing on the input scan. A script that uses the
|
||||
ImageMagick `convert` command is included to reproduce the processing
|
||||
steps.
|
||||
|
||||
Notes related to the accuracy of the retrace.
|
||||
|
||||
* The pinouts of all integrated circuit components have been verified
|
||||
with second sources.
|
||||
|
||||
* The pinouts of the PDS slot and RAM SIMMs have **not** yet been
|
||||
verified with second sources.
|
||||
|
||||
* The resistor values have been checked to be consistent with the
|
||||
reference designators, but **not all reference designators** have
|
||||
been verified to be consistent with the placement on the printed
|
||||
circuit board.
|
||||
|
||||
* The schematic info blocks in the upper and lower left corners have
|
||||
been cross-checked with scans of other official Apple schematics to
|
||||
attempt to make them as faithful as possible to the original
|
||||
contents.
|
||||
|
||||
Notes on the source SVG file:
|
||||
|
||||
* The processed scan is linked as a hidden and locked image object.
|
||||
To view both the retrace and the original scan together, find the
|
||||
image object (possibly in the XML hierarchy) and make it visible.
|
||||
The image object is locked to make it easier to draw on top of.
|
||||
|
||||
* The specific `sans-serif` font I used on my system is DejaVu Sans.
|
||||
So long as your system `sans-serif` font has similar metrics,
|
||||
everything should work just fine, otherwise you can replace the font
|
||||
family name with DejaVu Sans.
|
7
old_artifacts/schems/get_scans.sh
Executable file
7
old_artifacts/schems/get_scans.sh
Executable file
|
@ -0,0 +1,7 @@
|
|||
#! /bin/sh
|
||||
# Use a shell script to download the scans so that we do not add bloat
|
||||
# to the repository size that we don't strictly need. GitHub has
|
||||
# bandwidth limits, so let's try to keep away from those as much as
|
||||
# possible.
|
||||
|
||||
curl -L -o 'se_mlb_p1.gif' https://museo.freaknet.org/gallery/apple/stuff/mac/andreas.kann/SE_P1.GIF
|
43
old_artifacts/schems/resize-mlb-scan.sh
Executable file
43
old_artifacts/schems/resize-mlb-scan.sh
Executable file
|
@ -0,0 +1,43 @@
|
|||
#! /bin/sh
|
||||
# Given the input illegible scan of the Macintosh SE Main Logic Board
|
||||
# Page 1 schematic, apply some image processing magic on it to make it
|
||||
# somewhat more legible.
|
||||
|
||||
# Here's how our image processing operations work.
|
||||
#
|
||||
# 1. The original scanned image is monochrome. Gradation is expressed
|
||||
# linearly through the means of error-diffusion half-toning.
|
||||
#
|
||||
# 2. To convert to grayscale, we simply convert to 8-bit grayscale and
|
||||
# then resize to 80%, using a cubic resize image filtering
|
||||
# algorithm. The resulting 8-bit intensity values will be
|
||||
# expressed in a linear sample space. We then resize by 250% to
|
||||
# get a grayscale image, linear intensity samples, that is twice
|
||||
# the spatial resolution of the original.
|
||||
#
|
||||
# The second resizing step is mainly to ease looking at zoomed in
|
||||
# copies of the image, which you must do almost all the time due to
|
||||
# the illegibility of the original.
|
||||
#
|
||||
# 3. If the image is displayed directly on sRGB displays, it will
|
||||
# appear artificially dark because it is currently using linear
|
||||
# intensity samples, but an sRGB display uses a curve
|
||||
# (approximately gamma = 2.2) to map the image samples to linear
|
||||
# light intensities. Just leave it this way because the source
|
||||
# image is already pretty light to begin with. The artificial
|
||||
# darkening makes the image easier to read.
|
||||
#
|
||||
# To get a gamma-correct image, we would need to apply a `gamma =
|
||||
# 0.45` curve to the image. Or, in other words, "gamma-correct" by
|
||||
# a factor of `1/0.45 = 2.2`. Alternatively, we could use the more
|
||||
# precise sRGB colorspace conversion function.
|
||||
|
||||
set -e # Exit on errors.
|
||||
|
||||
# N.B. We use two conversion command lines because I think otherwise
|
||||
# ImageMagick just replaces the previous resize command with the new
|
||||
# resize command and would only end up resizing the image once.
|
||||
|
||||
convert -depth 8 -resize 80% -filter cubic se_mlb_p1.gif se_mlb_p1_tmp.png
|
||||
convert -resize 250% -filter cubic se_mlb_p1_tmp.png se_mlb_p1_proc.png
|
||||
rm se_mlb_p1_tmp.png
|
BIN
old_artifacts/schems/retrace_se_mlb_p1.pdf
Normal file
BIN
old_artifacts/schems/retrace_se_mlb_p1.pdf
Normal file
Binary file not shown.
25132
old_artifacts/schems/retrace_se_mlb_p1.svg
Normal file
25132
old_artifacts/schems/retrace_se_mlb_p1.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 1.1 MiB |
Loading…
Reference in New Issue
Block a user