Initial commit

This commit is contained in:
Andrew Makousky 2020-08-06 18:02:37 -05:00
commit 4ce5af75c2
30 changed files with 25924 additions and 0 deletions

129
LICENSE Normal file
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

View 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
View 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
View 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.

View 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.

View 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,,,
1 BBU Pin Signal Name Description Device Connection Device Pin
2 1 GND
3 2 RD7
4 3 RD8
5 4 RD9
6 5 RD10
7 6 RD11
8 7 RD12
9 8 RD13
10 9 RD14
11 10 RD15
12 11 EXTPDS
13 12 EN245 Select Data Buffer 74LS245
14 13 VCC
15 14 /WR
16 15 /CAS-SIMM3 SIMM3 2
17 16 /CAS-SIMM1 SIMM1 2
18 17 /EOP 53C80
19 18 /CAS-SIMM4 SIMM4 2
20 19 /CAS-SIMM2 SIMM2 2
21 20 /RAS
22 21 GND
23 22 VCC
24 23 A23
25 24 A22
26 25 A21
27 26 A20
28 27 A19
29 28 A17
30 29 A9
31 30 /IPL1 68000
32 31 /IPL0 68000
33 32 IRQ 65C22/6523
34 33 /LDS 68000
35 34 /BERR 68000
36 35 /UDS
37 36 /VPA 68000
38 37 CK 68000
39 38 /DTACK 68000
40 39 SELROM Select ROM ROM 20 on ROM HI, LO
41 40 RTxCB, PCLK, ADB CLK All the things 85C30, ADB, GLU 20 & 28 on 85C30, 16 on ADB, 9 on GLU
42 41 /AS
43 42 VCC
44 43 GND
45 44 FCLK SWIM, GLU 24 on SWIM, 19 on GLU
46 45 SELSCC Select SCC 85C30 32 on /CE
47 46 /RD 85C30
48 47 R/W
49 48 SELSWIM Select SWIM SWIM 7 on /DEV
50 49 EXTFLP PWM External Floppy 10 on PWM
51 50 PB7 65C22/6523
52 51 SELSND Select Sound SND
53 52 EXTPDS
54 53 PA6 65C22/6523
55 54 /LDS
56 55 DRQ 53C80 22 on DRQ
57 56 /DACK 53C80 26 on /DACK
58 57 SELSCSI Select SCSI 53C80 21 on /CS
59 58 SELVIA Select VIA 65C22/6523 24 on RS0
60 59 /RST
61 60 HSYNC Horizontal Sync J12 Pin 10 on J12
62 61 VSYNC Veritcal Sync J12, 65C22/6523 Pin 11 on J12, 40 on DB7
63 62 VIDOUT Composite Video Out J12, 65C22/6523 Pin 9 on J12, 28 on PC3
64 63 GND
65 64 VCC
66 65 RA9
67 66 RA7
68 67 RA8
69 68 RA6
70 69 RD0
71 70 RA5
72 71 RA4
73 72 RD1
74 73 RA3
75 74 RD2
76 75 RD3
77 76 RA2
78 77 RD4
79 78 RA1
80 79 RA0
81 80 RD5
82 81 /PMCYC 74F257 /OE
83 82 EN257 Select Address Buffer 74F257
84 83 RD6
85 84 VCC

View 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.

View 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
View File

@ -0,0 +1,3 @@
# pcb
This directory contains Printed Circuit Board (PCB) designs.

View 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

View 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
View 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.

View File

@ -0,0 +1,2 @@
recapamac_se_mlb.jpg
wikipedia_se_mlb.jpg

View 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

View 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
View File

@ -0,0 +1,3 @@
se_mlb_p1.gif
se_mlb_p1_tmp.png
se_mlb_p1_proc.png

View 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

View 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.

View 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

View 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

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.1 MiB