BIOS / DOS ABI
static mut API: Option<&'static Api> = None;
static mut VGA_CONSOLE: Option<VgaConsole> = None;
#[no_mangle]
pub extern "C" fn main(api: &'static BiosApi) -> !
unsafe {
API = Some(api);
VGA_CONSOLE = Some(VgaConsole::new(api));
}
let version = (api.get_version)();
println!("BIOS version: {}", version);
panic!();
}
BIOS / DOS ABI (redux)
static API: ApiWrapper = ApiWrapper::new();
static VGA_CONSOLE: VgaConsole = VgaConsole::new();
#[no_mangle]
pub extern "C" fn main(api: &'static BiosApi) -> !
API.init(api);
VGA_CONSOLE.init();
let version = API.get_version();
println!("BIOS version: {}", version);
panic!();
}
DOS / Application ABI
- Works the same way
- Entry point gets
&'static OsApi
- CRT sets up args/env and calls normal C-style
main
Where is Neotron at right now?
- Texas Instruments TM4C processor
- 80 MHz Cortex-M4
- 32 KiB RAM
- Real-time VGA over SPI
- PWM Audio, SDMMC, 2x Joytick, MIDI
Where is Neotron at right now?
- Raspberry Pi RP2040 processor
- 2x 133 MHz Cortex-M0+
- 256 KiB RAM
- Hardware-accelerated VGA over PIO
- 16-bit Audio CODEC, SDMMC, Slots
Bonus goodies!
- Neotron Pico is micro-ATX sized
- Design includes a Board Management Controller (BMC)
- Keyboard controller
- Power control
- Status LEDs, Power button, Reset button
- Extra UART
Expanding your computer
- The DEC PDP-11 has Unibus
- 8080/Z80 machine have the S-100 bus
- The PC-compatibles had the ISA bus
- We have the Neotron Bus!
The Neotron Bus
Pin |
Function |
Pin |
Function |
1 |
SPI COPI |
2 |
Ground |
3 |
SPI CIPO |
4 |
Ground |
5 |
SPI CLK |
6 |
Ground |
7 |
SPI /CS |
8 |
/IRQ |
9 |
I²C SDA |
10 |
I²C SCL |
11 |
EEPROM Addr0 |
12 |
EEPROM Addr1 |
13 |
EEPROM Addr2 |
14 |
/RESET |
15 |
5V |
16 |
5V |
17 |
3.3V |
18 |
3.3V |
19 |
Ground |
20 |
Ground |
That's all folks!
- @therealjpster on Twitter (@thejpster everywhere else)
- Visit #neotron on Matrix
- See https://neotron-compute.github.io
- Follow these fine people:
- @bitshiftmask @rustembedded @rustlang
- @foone @ekuber @computermuseum
- Find me later - let's chat!
let's play a game! Everytime I mention a company that's no longer with us, you wave your hands in the air
OS is general purpose, RTOS is embedded, DOS is an OS loaded from and/or for managing (floppy) disks
Talk about batch processing, paper tapes, etc
You will need *some* non-volatile memory to boot, unless you want to flip toggle switches
1965-1978; 64Kx8 memory; 8-bit; microcoded; 1 MHz; 35k op/sec; 8 cycle register access; 2x 5MB Magnetic disk drives; $133k
1982; 4.77 MHz 8088; 64K RAM; 320K FDD; BASIC in ROM; Cassette interface...
2021; 256K RAM; 2MB Flash; 2x 32-bit @ 133 MHz; $3.
Let's play higher-lower
Name, Timestamp, Directory, Size, Location of Contents
bitsavers_onrASurveyomputers1953_8778395
Needed 32K, but really 128K or more. CPU speeds out-stripped disk speeds. Written in ASM. z/OS is compatible
Multiplexed Information and Computing Service
Honeywell bought GE's computer division
Uniplexed Information and Computing Service. Ported to PDP-11/20 in 1970, roff written for processing patents
This is the simple version!!
single user, single tasking
it was also sold with CP/M-86 and UCSD p-System but not at launch. You can't make a file called CON even on Windows 11
Windows 1.0, with non-overlapping windows!
256 bytes of Wozmon! System isn't multi-tasking, and has a dumb name
systemd, pipewire, Wayland - it's a pick-and-mix OS!
Used to be user-space APIs for buttons and widgets, but it's more common to just provide a blank 'canvas' for the application to draw on
Debian has no fixed API across x86/ARM/PPC/etc. FreeBSD AMD64 presents ABI compatibility with Linux AMD64
Rust on Windows comes in MSVC or MinGW flavours
Applications can load more code into RAM and jump to it if they wish (overlays)
2.5m lines of AMDGPU driver, out of around 28m lines total in Linux 5.9, of which 1.8m is auto-genenerated header file
EEPROM Addr pins give the slot number; wire to a 24C256 EEPROM, which indicates what is fitted to that slot