Original Original mach machine ine ? Hard Hard Emula Emulation tion ? Soft Soft Emulation Emulation ?
FOSDEM Brussels, 2 & 3 February 2019
Preserving is not just about storing computers, disks and books in a hangar
Preservation Preserving is not just about storing computers, disks - - PowerPoint PPT Presentation
Retrocomputer Preservation Preserving is not just about storing computers, disks and books in a hangar FOSDEM Brussels, 2 & 3 February 2019 Original Original Hard Hard Soft Soft machine mach ine ? Emula Emulation tion ?
Original Original mach machine ine ? Hard Hard Emula Emulation tion ? Soft Soft Emulation Emulation ?
Preserving is not just about storing computers, disks and books in a hangar
Retrogaming & Retrocomputing
A French non-profit organization for the preservation of videogame and computer heritage
V 2019.02.01
To preserve heritage videogames and
them to people. Silicium manages an ever-growing collection and a regular exhibition schedule.
Back in 1994, it was so obvious that computers should be
testimonies. Once we were seen like Zorg planet inhabitants, but today everyone feels the need to preserve computer heritage. Silicium has some answers.
03
A 25-year history
René René S Speranza peranza
President & cofounder
Has never achieved to transcend the 16-color palette.
04
Benoit Triquet Benoit Triquet
Digital specialist
Not everyone can whisper the true language of the machine to the computer.
Valérie Amiel Valérie Amiel
Management expert
Explains us how to pop around things we need.
The heart of Silicium lies in its unmatched collection
representatives, which are readily available for studies, display & exhibitions
It’s hard to describe what Silicium preserves. Here’s what we consider important.
It all begun with compact Hewlett- Packard HP-85. Instead of being recycled, it launched the idea
preservation in 1989.
Com Computers puters
People ask us to show some fun. Videogames seem to be the right answer. And we know that even the hardcore computer can be fun to play with.
Videogames Videogames
Tons of iron, loads of
maintain the whole thing together in
spirit of computing vivid and unforgettable.
Everything Everything
06
With more than 100 members and a 25-year history, Silicium tries to
Silicium not only manages a huge collection. We also promote this heritage in many ways.
Exhibitions Exhibitions
The main link with people
Expertise Expertise
Need an expert in DEC minicomputers or in Philips Videopac ? Ask Silicium.
Publis Publisher her
Silicium regularly publishes books and games.
Manage community Manage community
Mysilicium forum is a hub for enthusiasts to share their passion.
Con Conference ference
This heritage has a long story to tell.
Preservation Preservation
Unfortunately, many old machines need to be repaired. Silicium experts play a major role.
08
Some fine examples of Silicium activities.
01 01 2013 Odyssud Gameplay was a big exhibition, 02 02 Nothing could be done without enthusiasts and a huge collection, 03 03 . French TV captures an old computer screen drawing live, 04 04 Old technology requires some specific skills to maintain machines in working order.
Let’s achieve our main goal : opening a permanent exhibition.
09
Early ASICs in 8-bit British micros…
Hardware Hardware rots rots
Mass-storage emulators
Me Media dia rots rots
Digitize Reverse-engineer
Do Document cumentatio ation rots rots
We do repair computers but nothing is forever
Preserving is not just about storing computers, disks and books in a hangar
10
11
FPGA-Based emulators Frédéric Requin (co-founder of ArcadeRetroGaming) Gregory Estrade (@Torlus, http://lvt.tl/) Retro Peripherals Projects Projects we use or make at Silicium Projects Projects by our members Reverse Engineering
Tape Decks Hard Drives
3€ generic « SD2IDE » work best in our experience CF-to-IDE are passive, depend on your CF card IDE-to-mSATA are less compatible Open source SCSI2SD We use v5 manufactured by Itead Audio interface is easy: smartphone with headphone jack Digital interfaces are proprietary Atari 800: no emulators but A8CAS
copy-protected tapes and use in emulators
12
electronics
Most 8-bit micros do not have a floppy controller
Atari 800: an Arduino is enough,
BBC Micro: software-defined so anything works, we use Ctorwy31 MMC drive
Oric floppy controller boards are remade
Like Apple II where we use CFFA3000, BigMessOfWires FloppyEmu, …
14
15
industry standard drives
– Motor-on and drive select lines
– 26-pin ribbon cable to 34-pin PC => 2-way success – Beware of reversed +5V and +12V !!!
– By JF Del Nero with contribs from Torlus – Hardware is open source :) firmware is not :(
– Must-have: FlashFloppy open source firmware
16
The case of the Squale by Apollo 7
French microcomputer
1 preserved by French museum CNAM Reverse engineered by Greg Estrade and JF Del Nero Emulator now available
http://hxc2001.free.fr/Squale/ http://torlus.github.io/2015/04/10/cnam-squale
(co-founder of ArcadeRetroGaming)
MCC (Multiple Classic Computer) emulates a C64 J68, a Verilog implementation
Fred Fred
*
31
(@Torlus, http://lvt.tl/)
Sega Megadrive/Genesis Nec PC-Engine/TurboGrafx Atari Jaguar all developed in Verilog on Altera Cyclone Ported to the MiSTer open source project Successor to the MiST FPGA open source project Uses Cyclone V eval board, inexpensive, huge FPGA
Greg Greg
*
PC PC Engine Engine
A real Nec PC-Engine Is priceless :-) and in excess of 200€ on eBay
18
MiSTer MiSTer
Greg’s FPGA core for MiSTer on DE10-nano 140€ to 200€ depending on daughterboards
Raspberry Pi Raspberry Pi
Batocera Linux on Raspberry Pi 3B+ 50€
Bomberman ‘93 running on a…
GTKWave VCD viewer Cosimulation in SystemVerilog Verification of J68 core against Musashi, the 68k emulator used by MAME Veritalor open source, Verilog simulator
Greg and Fred use Verilator
19
20
mod
68_soc ( input t rst_n, n, input t clk, input t uar art_rxd, input t uar art_cts_n _n, input t uar art_dcd_n _n,
ut uar art_txd,
ut uar art_rts_n _n,
Verilog Verilog top top-level level model model
ver erilator r $TOP_FI FILE.v $C $COMPILE_ E_OPT $TR TRACE_OPT PT -top top-module $ $TOP_FIL ILE -exe e $CP CPP_FILES ES cd d ./obj_d _dir mak ake -j j -f V$TOP_ P_FILE.mk mk V$TOP_ P_FILE
Com Compiled piled to to C++ C++ by Veri by Verilato lator
21
int nt main(i (int argc gc, char r **argv, v, char * **env) { { Verila lated::co commandAr Args(argc gc, argv) v); Vj68_s _soc* top
w Vj68_so soc; while e (tb_sst step < NU NUM_STEPS PS) { to top->rst_ t_n = (tb tb_sstep p < (vlui uint64_t) t)24) ? 0 0 : 1; to top->clk k = top->clk ^ 1 1; to top->eval al(); if f (Verila lated::go gotFinish sh()) bre reak; } top top->f >final(); ); }
Instantiation Instantiation
// / in decl claration
// Ini nit VCD t trace du dump Verila lated::tr traceEver erOn(true ue); Verila latedVcdC dC* tfp = = new Ve Verilated edVcdC; top top->t >trace(tf tfp, 99); ); tfp tfp->s >spTrace( e()->set_ t_time_re resolutio ion("1 ps ps"); tfp tfp->o >open(fil ile_name) e); // / in main in loop to top->eval al(); tfp fp->dump( p(tb_time me); if (Ve Verilated ed::gotFi Finish()) )) break; k; }
Add Add tracing tracing
22
reg eg [15:0 :0] r_mem em_blk [0 [0:(1 << < ADDR_WI WIDTH) - 1]; 1]; reg eg [15:0 :0] r_q; // / 68k bus us activt vty always@( @(posedge ge clock) k) begin r_q <= <= r_mem_ m_blk[add ddress][1 [15:0]; if (wr wren) beg egin if ( (byteena na[0]) r_ r_mem_blk lk[addres ess][7:0] 0] <= da data[7:0] 0]; if ( (byteena na[1]) r_ r_mem_blk lk[addres ess][15:8 :8] <= da data[15:8 :8]; end end end end assign q q = r_q; q;
Feed Feed 68k 68k test test program program from from simulated simulated memo memory ry
23 CART::CART(int w, bool debug, int size) … // Binar ary file l loading void CART::load(const char *name, vluint32_t begin, vluint32_t end) … // Cycle le evaluat ate void CAR ART::eval( l(vluint64 64_t cycle le, vluint nt8_t clk, k, // Cycl cle counte ter, clock ck vluint8_ 8_t ce_n, , vluint8_ 8_t oe_n, , // Contr trol signa nals vluint32 32_t a, // // Address ss vluint32 32_t &q, v vluint8_t _t &oe // / Outputs: s: data, o
enable ) { ) { if ( (!clk) re return; a &= &= 0x7ffff fff; swit itch(width th) { ca case 1: // 1 16 bits a &= ~1; 1; q = (me mem_array[ y[a] << 8) 8) | mem_a _array[a + + 1]; break; break; ca case 2: // // 32 bits ts a &= ~3; 3; q = (me mem_array[ y[a] << 24 24) | (mem em_array[a [a + 1] << << 16) | (me mem_array[ y[a + 2] < << 8) | ( (mem_arra ray[a + 3] 3] << 0); break; break; de default: q = mem_ m_array[a] a]; }
= (!ce_n n && !(oe_ e_n & 1)) ) ? 1 : 0; 0;
|= (!ce_n _n && !(oe
)) ? 2 : 0 0; …
Feed Feed 68k 68k test test program program from from simulated simulated memo memory ry
24
imp mport "DP DPI-C" fu function n void dp dpi_trace ce_init() (); imp mport "DP DPI-C" fu function n dpi_tra race_fetc tch( input in integer s sr, input in integer p pc, input in integer u usp, input in integer s ssp, input in integer l lvl ); … always@( @(posedge ge clk) begin begin // Ins nstructio ion fetch ch if (w_ w_dbg_ife fetch) dpi_ i_trace_f _fetch({1 {16'd0, w w_dbg_sr sr_reg}, , w_dbg_p _pc_reg, , w_d _dbg_usp_ p_reg, w_ w_dbg_ssp sp_reg, { {29'd0, , w_dbg_i _irq_lvl} l}); … end end …
DPI DPI (Direct (Direct Programming Programming Interface) Interface)
25
#in include " "svdpi.h .h" ext xtern "C" C" { #in include « « musash shi/m68k. k.h" } voi
_trace_fe fetch(int nt sr, in int pc, i int usp, p, int ss ssp, int t lvl) { m68k_d _disassem emble(dis is_buff, , prev_pc pc, M68K_ K_CPU_TYP YPE_68010 10); fprint ntf(fh_j, j, "PC=%0 %08lX %s %s\n", pr prev_pc, , dis_buf uff); fprint ntf(fh_j, j, "D0=%0 %08X %08X 8X %08X % %08X %08 08X %08X X %08X %0 %08X \n", ", regs[ s[0], reg egs[1], regs[2] 2], regs gs[3], r regs[4], ], regs[ s[5], reg egs[6], regs[7] 7]); …
Con Connect nect the the dis disass assemble embler r from from Musas Musashi hi to to the the DPI DPI
26
re reg = m68 68k_get_r _reg((voi
ULL, M68K 8K_REG_PC PC); m68k_d _disassem emble(dis is_buff, , reg, M6 M68K_CPU_ U_TYPE_68 68010); fprint ntf(fh_m, m, "PC=%0 %08lX %s %s\n", re reg, dis_ s_buff); m68k_e _execute( e(1); // / Musashi hi run 1 1 instruc uction fprint ntf(fh_m, m, "D0=") "); for (i (i = (int nt)M68K_R _REG_D0; ; i <= (i (int)M68K 8K_REG_D7 D7; i++) ) { re reg = m68 68k_get_r _reg((voi
ULL, (m68 68k_regis ister_t)i )i); fp fprintf(f (fh_m, "% "%08lX ", ", reg); ; }
Musas Musashi hi to to same same trace trace format format
PC= C=000002F 2F0 move vea.l A0, 0,A1 D0= 0=1155229 299 33774 74401 000 0000000 0 00000000 00 000000 0000 0000 000000 00 00000000 0 0000000 000 A0= 0=0000800 004 00008 08004 000 0000000 0 00000000 00 000000 0000 0000 000000 00 00000000 0 0000FFF FFC USP SP=000000 0000 SSP= P=0000FFF FFC SR=27 2710 XNZV ZVC=10000 00 PC= C=000002F 2F2 move ve.l #$0 $09010101 01,(A1)+ D0= 0=1155229 299 33774 74401 000 0000000 0 00000000 00 000000 0000 0000 000000 00 00000000 0 0000000 000 A0= 0=0000800 004 00008 08008 000 0000000 0 00000000 00 000000 0000 0000 000000 00 00000000 0 0000FFF FFC USP SP=000000 0000 SSP= P=0000FFF FFC SR=27 2710 XNZV ZVC=10000 00
…and diff traces
At silicium.org ! www.veripool.org/wiki/verilator gtkwave.sourceforge.net sio2sd.gucio.pl/wiki/English www.codesrc.com/mediawiki/index.php/SCSI2SD speedofmac.com/emulation/macifom.php github.com/keirf/FlashFloppy/wiki github.com/mist-devel/mist-board/wiki github.com/MiSTer-devel/Main_MiSTer/wiki github.com/Torlus/FPGAPCE github.com/MiSTer-devel/TurboGrafx16_MiSTer github.com/MiSTer-devel/Genesis_MiSTer
27
Links to open source projects
+33(0)5.61.85.90.33 info@silicium.org
Silicium Silicium.org .org
twitter.com/occitel facebook.com/siliciumasso
You can You can also also f find ind us at: us at:
And share your projects. Silicium action is based on popular support. As the technological heritage is getting bigger each day, Silicium’s members are able to offer extensive knowledge in order to manage large-scale projects, up to the creation of a permanent museum.
28
Original Original mach machine ine ? Hard Hard Emula Emulation tion ? Soft Soft Emulation Emulation ?
Preserving is not just about storing computers, disks and books in a hangar