From 3d040114dc5b9db3d3c3088a44a580a54cb232cb Mon Sep 17 00:00:00 2001 From: Ivan Izaguirre Date: Sun, 2 Jun 2019 23:00:31 +0200 Subject: [PATCH] Readme file --- README.md | 138 +++++++++++++++++++++++++++++++++++++++++++++++ doc/dos33.png | Bin 0 -> 6399 bytes doc/karateka.png | Bin 0 -> 10412 bytes 3 files changed, 138 insertions(+) create mode 100644 README.md create mode 100644 doc/dos33.png create mode 100644 doc/karateka.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..662f541 --- /dev/null +++ b/README.md @@ -0,0 +1,138 @@ +# Apple II+ emulator + +Portable emulator of an Apple II+. Written in Go. + +## Features + +- Apple II+ with 48Kb of base RAM +- Sound +- 16 Sector diskettes in DSK format +- Emulated extension cards: + - DiskII controller + - 16Kb Language Card + - 256kb Saturn RAM Card +- Graphic modes: + - Text, Lores and Hires +- Displays: + - Green monochrome monitor with half width pixel support + - NTSC Color TV (extracting the phase from the mono signal) + - ANSI Console, avoiding the SDL2 dependency +- Adjustable speed. +- Fast disk mode to set max speed while using the disks. +- Single file executable with embedded ROMs and DOS 3.3 + + +## Running the emulator + +No installation required. [Download](https://github.com/ivanizag/apple2/releases) the single file executable `apple2xxx_xxx` for linux or Mac, SDL2 graphics or console. + +### Default mode + +Execute without parameters to have an emulated Apple II+ with 64kb booting DOS 3.3 ready to run Applesoft: +``` +casa@servidor:~$ ./apple2sdl +``` + +![DOS 3.3 started](doc/dos33.png) + +### Play games +Download an DSK file ([Asimov](https://mirrors.apple2.org.za/ftp.apple.asimov.net/images/) is an excellent source) and use the `-disk` parameter. +``` +casa@servidor:~$ ./apple2sdl -disk ~/Downloads/karateka.dsk +``` +![Karateka](doc/karateka.png) + + +### Terminal mode +To run text mode right on the terminal without the SDL2 dependency just run `apple2console`. It runs on the console using ANSI escape codes. Input is sent to the emulated Apple II one line at a time: +``` +casa@servidor:~$ ./apple2console + +############################################ +# # +# APPLE II # +# # +# DOS VERSION 3.3 SYSTEM MASTER # +# # +# # +# JANUARY 1, 1983 # +# # +# # +# COPYRIGHT APPLE COMPUTER,INC. 1980,1982 # +# # +# # +# ]10 PRINT "HELLO WORLD" # +# # +# ]LIST # +# # +# 10 PRINT "HELLO WORLD" # +# # +# ]RUN # +# HELLO WORLD # +# # +# ]_ # +# # +# # +############################################ +Line: + +``` + +### Keys + +- F5: Toggle speed between real and fastest +- F6: Toggle between NTSC color TV and green phosphor monochrome monitor +- F7: Save current state to disk +- F8: Restore state from disk +- F12: Save a screen snapshot to a file `snapshot.png` + +Only valid on SDL mode + +### Command line options + +``` + -charRom string + rom file for the disk drive controller (default "/Apple2rev7CharGen.rom") + -disk string + file to load on the first disk drive (default "/dos33.dsk") + -disk2Slot int + slot for the disk driver. -1 for none. (default 6) + -diskRom string + rom file for the disk drive controller (default "/DISK2.rom") + -dumpChars + shows the character map + -fastDisk + set fast mode when the disks are spinning (default true) + -languageCardSlot int + slot for the 16kb language card. -1 for none + -mhz float + cpu speed in Mhz, use 0 for full speed. Use F5 to toggle. (default 1.0227142857142857) + -mono + emulate a green phosphor monitor instead of a NTSC color TV. Use F6 to toggle. + -panicss + panic if a not implemented softswitch is used + -rom string + main rom file (default "/Apple2_Plus.rom") + -saturnCardSlot int + slot for the 256kb Saturn card. -1 for none (default -1) +``` + +## Building from source + +### apple2console + +The only dependency is having a working Go installation. +Run: +``` +$ go get github.com/ivanizag/apple2/apple2console +$ go build github.com/ivanizag/apple2/apple2console +``` + +### apple2sdl + +Besides having a working Go installation, install the SDL2 developer files. + +Run: +``` +$ go get github.com/ivanizag/apple2/apple2sdl +$ go build github.com/ivanizag/apple2/apple2sdl diff --git a/doc/dos33.png b/doc/dos33.png new file mode 100644 index 0000000000000000000000000000000000000000..880cbca2a41a76d2d1e0b917a6d62c1434675e19 GIT binary patch literal 6399 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 Yzlet7v75c2xBxpo-~Aag_{hco0%BC@aR2}S literal 0 HcmV?d00001 diff --git a/doc/karateka.png b/doc/karateka.png new file mode 100644 index 0000000000000000000000000000000000000000..23906d5fa08facb131f56bcad6746ea0ab28e75e GIT binary patch literal 10412 zcmeHNYgkiP){fd@ZKbqBrDKlY`TWg!KFSJ@W^6IQ#6&TJL(- zyVgEucY19xeH-~U0)a5ywsrGv1mX<>0wEH=H~4W45yV^<&Pk7K3LS-lOS}&Z?VoJjfwfG+s&6Fa zdvX==Ft6Ip;=fWNk;n;ZEDEPw)1PZr2!-(ZNV~iQ)ksw2WQ2>QWmv%u->~wP<(-Ou z%rWy3q@AdYr-++tNH+?Nw5x^9)ySR&H@hDQl2^K_RaWf&9ZanxN-gO~V)vU-PuHxJ zXdAjGUrb7B4iSBGe3^q_^c${{_Afb!fSURybXdg+i=9A?E@|yfH*G#@4ktEGVJ@Vy5V@wm1KN?mx!0z zHuM>UwO;C+(d939$9UQYX!k|v=eO?BuA4KOG746da|D2ZswDf|-0DD#3{ohJB*WoX z_)*`wQ?EcdvL!z;-t*vspa{IRPj2I!0aoNEW}S`aFo2!hF@&6yq^voaWouYOe?ZAD zJKhqDzPGNEVuKoO0Fu$lp$t6bDAF(l+EINIKa&g$>YNhAQ(T-4UKIay&tbhv3!9vE4SLVKWA zAnjr*D4L!cTXRy$vAc4^Yx_qYLD_{zV+dSsa&X_o2x&^x15$c1CR(=9V5G)Ib9ufK|(R zc2bsbdlnM{R!>M1kf4b1I|*aIkT@542?Ad#>seo#MICjp3uiddKdPxVgCIW<0Mbwu>%lO)Ampvv30BXcW44L~zSuu=%&rRp)07a? z)QXPm?_Ho1R=M3ZcEZvX$TdBVyoq_r>tHF`c|k1$Rd^Cln9`=>saM<$MZEtefctRM zi^J0913k(i+zDvOQ(CssB|ol^m+~C{-lWs&C71G6m{#|Ixwg!~yOJ=jo?lS- zf7!|M3!|o&`0?9hSz*LM0vkd?(Y>HAmIt)%C^hAlXwu;i2`i+DBTc+ah7|CALICM zA-aAU77ew>d#vWkopVuG52>FpDBSc7DsFK1IFlcLPtXzup|_Q(N3V>*MEYSJ^j#f0 z+ZiPkA$iz+e!aJpLE$DvJXNn5>fJ47$Z9mGKkI{Y=vf0y=9FsfK`beSDzqWp4H;9n7Gp1) zYzON@b9q<^y~*pbZPVOpXkU%z05i%P$F`5T4t9&@EgZflHTO^Cf`XMvNh2nA0{^aR z6>?iz1+Xi0d2mVj{;Ty_=9aafr?otTAMZ|TNa&5m>>bT&Zr7W(@$T!TQtU<%%QFo5 zDW0Zh?#pm0H#9QQom~k8M;A6@n&i&D+5>2%r9ZcH;yZ%^)ykJDbp2k8&0Lmbg=J>A z9nVsBIC>pH6+m;U{fCauQpYaG^NpnqRaX`@Uc zg-E{Gg*t7%oUs_HLoMZq-Vp)cz3$dU_1BM}Y{}(Q%8|(*HDBnoV|{1NgxUvjegk}D z6LXq4Hm2T;iqV{@yrr2o->z597sOc%^fX9K>$+9aZmIeHbE7mQE#0{S$n6}IJDI0a zSdqjk54h2g`)Z@%)D7DXrDav!N|Z@4Y7xR`K)Gn0y9o3Na9EB*<1`d})?>-$AjOQv zP~k>O$c#qHP}@7egN^x>*LFF69{qs3yt`UJOVKk!XCka$t!Hi;yzqfHhG6ep85n_Q zX}cH08Q=5O{pp?i`OQ$yRQ^|X++n>ou$X&fP(;XsVOFB1+yV}!^jV6_ok2iwY>x{l zYNMqG$@Zb=9@#eBb*YVJp*oC)6W42T51P8!4?(4xVRC;zRNIcy2?j^{=Qf#a9D#`c zsB6B(#7kBSqa19A^#leP6_YIb(r!>4rwP&g_1=o(cO=u)5YweEc0-ZSeO2g#0p$qb z(CKvb`YZn5(~*`Cwdc3F4ovrCe(UmIM6(Dghy>gtNdnXd)Efa-Z?6G$F{1WY*QZ7I zeHR1=Hw2Z;Ll>yE#k_^C6~Hlra`ygQo!c1#)nU3upAllfxD!9M(dNmI?!gB)eSo<^u7S1xEE&Wx zPz(f)jAC|L%-TQ%(9nPYjqd4@V)#a=$bZjXUfMR$(hELayQW9$bEM>}T-%1L0G7t- zsXkxISa_Of@1pc3#}VvlZ+@%~Gli`&*!y>I1!?KT5F3rcKH#_yKRdV%Th^Ag0?9-s!X@9VQ_XW{#QKtuVp~Zkv*6B+ z;0oHMc0LmA!83D!&|a=%8%4r5BG%WANOVto&7o2U8Fn?m>z{ym$rNA)hc)h)(B51| zC=&f3i1SdN(MrTdwcUxofi7xiw23fx+;Xzl9dl;TrVmTRVNZj=W@&pqWHOyD7!n?( zs{ljoYW=rdk%f+?ZpH*%a>I7tf>7@(WFs}I^>dMa>8frdn&@K{X}?#?6Cl?Yc|h2& zSdBcExfL!JU(dc>DWj&TqoUjvAlUiHH!ZE~Kr3scS-Wh`4C4ZtLgc3i|8w5L1%6+k z)_4TstRgdo&X(AZfwFeTIK!2ywNL*&t#k9^vGiHbo5`H|Q9j*8p!u315+fm1>+G=V zC-U76jcRH@EgP5&{63F%zUGl*+TDxNB zbSwQJgIZiA-Blo0L~8wpCJ&!&=pUQ9BYmeikwr_-qh)ye32B{5C8Q!jqr$1y6~4Ef z!MVwjRK}y2#(7;oLVfj)>)UqqesXnOSU_)*h}7Rcf6=kC`$Zb@A*d!QO#edHeaPow&y4vw`>>aaO|0)VCNLY$sgud~z5mS9y$ERj7GKKpssqV1s&*DbhZxJ;FdgG`~ zEKky=pB+^F_6fHR&wBRb+V+oX&72T5M1KvnR!_Z2HHgwT??C*;aw zhk2=0nwlC3^WjHHS+lwZI2f9U40n63j;CL(*-~B0jvki}fxCgj!MXKfx$}Tx)oNFr zhmNc~PC09Ti&_~M$K`1`tI(uvyLaV&1Qb`d;RbQY4VJhTWJ>JP46NQ_3|(EHKq8b)1F$2c3?=D z#KsA42Dg9<-4L3UB(7tr;3`~B&5+xT3J=@_2ruvfN^&^r<#C`5CxW1c<8Q#?Ibc0DZY8BL(8?>ZK;&?HWFJ|9XIG&}qN~sBS!4xM-8{_~L zBxAiR95RAE1j7FvZ;Ur2Zkt^xgA3`ZCzG=izz{1DU=@rvgL_j24u`>8-k9S@(ycNF zjV=>AKuhJDY=^ugmtc$6vKo&ayIYlp5IA64%t4-|2onRBgBDwV$vtbiCEo4((k%rHbDT&3G1 zFcQ(dYz{cR{Gg(*Q3{O>VP$1eTr8wYnbWdG-#fj`%bhdc|=rAOET{ zJIwB9w~F0Mpk4c;wd$$<$rlY)%-NB2PQNN*X6wc$9a>4LBJ}h0ZJ%uHtGm0MvIsnX z`QPa;tX`J)$5xqxha0FcX-|K5^|Dfbvez0sjMZLpApAke=@cXE{>cO^g?N(@SVTWB z?YzNo=I&!FpY6w885N<%G(v5p3q`5IF%?pMLW_K;C}VsvJ!F}v5FZoi=Pi6K_iCTF zyLy2I5mS-J@dPh1nN$4Q>_pPIrOc^LeC*bL*MukZIyjv!W_-pFLF90**Rgw*MfCXJ zcN!8CdyB=9zt02CSXMHfU1xmU_A8Ky;`i4c$dY!J{`VADis@n31@g4kzJ53MtD6ll ze6%UXmfk;Z2RP$CgTXx_wx!pxV_tC$*m3wXC7ecPd^Gp;Da&)p^~o!nFQR+Nq%=@B tpAwUMhkidWJm=ct*^j2h0r%;2%b%X5eo{B_9^}kzUwdsX+35ene*onFTp$1d literal 0 HcmV?d00001