From 45cead93309de969420feccb058e90d9b70db315 Mon Sep 17 00:00:00 2001 From: Curtis F Kaylor Date: Wed, 14 Feb 2018 23:42:10 -0500 Subject: [PATCH] Updated Apple 2 headers and added Apple 2 test files --- apple2/a2disk.bat | 4 ++++ apple2/a2test.c02 | 12 ++++++++++ apple2/a2test.dsk | Bin 0 -> 143360 bytes apple2/a2win.bat | 1 + apple2/boot.dsk | Bin 0 -> 143360 bytes apple2/c02.bat | 5 +++++ apple2/include/a2min.a02 | 34 ++++++++++++++++++++++++++++ apple2/include/a2min.h02 | 15 +++++++++++++ apple2/include/apple2.asm | 46 ++++++++++++++++++++++++++++++++++++++ include/apple2.a02 | 29 +++++++++++++++++------- include/apple2.h02 | 5 ++++- 11 files changed, 142 insertions(+), 9 deletions(-) create mode 100644 apple2/a2disk.bat create mode 100644 apple2/a2test.c02 create mode 100644 apple2/a2test.dsk create mode 100644 apple2/a2win.bat create mode 100644 apple2/boot.dsk create mode 100644 apple2/c02.bat create mode 100644 apple2/include/a2min.a02 create mode 100644 apple2/include/a2min.h02 create mode 100644 apple2/include/apple2.asm diff --git a/apple2/a2disk.bat b/apple2/a2disk.bat new file mode 100644 index 0000000..7188ad9 --- /dev/null +++ b/apple2/a2disk.bat @@ -0,0 +1,4 @@ +REM Create Bootable Disk with Binary File +copy /Y boot.dsk %1.dsk +echo BRUN %1 |a2tools in t %1.dsk command +a2tools in b.0C00 %1.dsk %1 %1.bin diff --git a/apple2/a2test.c02 b/apple2/a2test.c02 new file mode 100644 index 0000000..3207669 --- /dev/null +++ b/apple2/a2test.c02 @@ -0,0 +1,12 @@ +/* C02 Apple II Test Program */ + +#include + +char i; + +main: + for (i=32; i:+; i++) { + if (!i&31) newlin(); + prchr(i); + } +goto exit; diff --git a/apple2/a2test.dsk b/apple2/a2test.dsk new file mode 100644 index 0000000000000000000000000000000000000000..5877c325bba2b69af97c037d09f29128901fafd8 GIT binary patch literal 143360 zcmeI&3wRVoo&fNkC!I+klc+eNU;!FJcxBgDWIaei5(jJ^qT*u_+6Owaps29Nd3Vb0 zGF;@+xnW&}xDIJ1nIzp#PiB}jLm)!}B$xyU%}Yg5<4Q0D2#qKpNOJ$0fbQOR?)SO( zeRsDX|6$V8U0qdO_3P@Y>TV4F5iJRt!#`>Yd=eVm6Q$Yi2@a))UD(SCJ#4U-&Acu) zm399^TQ3Wt?h$Q0Y{jSr6PWHE7QW>59`Z&H8FvxFF0oAi#DsnplVL!TjkTJM$xiZg zWym5iRjaaH+`bCssH!C@M^w$!)}gi?QQMBH+^a$IhcLILf|U7`Znes$oKoeC=L|M? z?wXEV;fT8O7$bD3p%3^515JLHa#q!Uu545FF`mJaLQZ?1TgH+dp-@`7$3kX?7g@;5 zVLgGAgvmwk#u-P*Id6!Ct&oX(E5Nk|xECU2;=Vom_B9FrCNRu~gyLh-;&V~SAe@g1 zT~VbyDtsQ5jKYbiWEM_F17Ai9i%!$sUq@F`Az5O)=gr=wX7WbV*ZX$y@hGkS>pk3Z zukvLy>*Q&g9@d1@(Kbl;eMYeMHAIc?>e=9UE&(D)Hi(;b%pmk`fJ4Dfo{4{yj%eUW zl&I0b$!MXypP1a$)pjCUbdu)S_IXtMjAxe;CKfWKJNWc0Ua3=QW{jXmm2cI_y~6P* zPswwewTnD+qtSL_XO!7s;0-;D;bN4DGK}$f4{v}&8BTr3_!!Yx7@ja?0#ir-N|?=^ z?Xx^5easrI)Avw}sT(=b%ha{nzu~i1j3{1ejR_60;)cwBQJ6Y+n$+w4kA}fT4Ng~= zXm+|t?Z!gwymXLk+$hO(p}=B|I7>6tGIfvkZkA&sH&u-ALJma@h1zj{TGyjYJTSP_ z+80{OY;M-N`r?tz8>LUb&+0f`>xBgz9g_17rwfw6v3Zg4&1%iO2ubHKbs6+;)r988 zH0?Mql0y9nh-|+&`Jnc7SA4BS*1i&F^{pz}ml9LBJgtsKd6d~yo>s!tY2AMr00ruf zM>xc6(yr-C_^D>QlAAs|ixd4S<3-z1a+r8B6 zu{_t)w$$8|<}v!yT9QJBsw~o7Tbr_pFq`}%9OQIu?O?ioG)>zMKMu%Xq$$HPN{%gS zs2Ih|qS!@0N2h7VqxV8n)O6mEnSKiyGWaI?Su{Fr*v*&M-&+0lAH8c!D=Oa&D8cIW zks5VFw06_xy4aTbox9ui?0^4*Lmz#7_>)gR>p1%5v99AMPIjOA>de>QoIUsLg^S-^ z>ggp_70So;c8g>rLKs@>$MwQT^~$CQcghP}C%r?-Z5LO z;yPbhxxXJd(ADaH}1M=@DOe9 zzMBsmBtt(OHvE=b(?+DXfBvU0j*QG0)j4|1*m0RZ`?-Glw%hNx^RBG(caQ(YJ^wIa zqQQ29ks;|uhs}1kEx|l$7(2*jWLb0KFxJd68LXWQGBQRs#l{-bQw(-#k0Va?ii z6vyRgaF{{k$B#E=j31vmsP90Ikz-Tgn=yRo*o+ZF$Fhd3k?F(7jfpSV(abg1kG8Ly z#~OYsvQLg2)iLUplt3YIr6&?{&FI&M+J`b#!?KsT5)ACnyph9LG2eP*WutWtAwHo!1le8(U$|yrtE*7c zp_@2Z2i*iL-hzcchcwpt^XOtCUF78F7Fbai_Tj` zbJ2OTXb3xHF?p|3zj37#R$b0jPB@6j#)@dUwX@K_x#YgX#si%$r>pq9h3+#IYTaz? z^#;)zc9z`9G&k6^v!W?{kNaNH7bRccimgqSy~E z&O+@%@VrGdhn?iHE$LcH`Mvi3^x~vf=eeWzYG=fxuv34m#jHOvpADG^vr)_}T55qb zB(K(UOWRV5{R~{+PKhUPZfQGj)ze`JJ8za4$j$|STwSbu>@Mg^ZlbZ)KqOb&d9&7` zx4NY4bk4a&zniPx0ws1j{o}*|tDG*KZ5pSWC8B*UTEfn%+Ku&1W3<)jo}0+wjclkm z-N&p*BilAY2^_a%iTzhOxqkIL$=K-8C3~pb37GfHcX?PF`PG(bOU=AHgA{M6U24AN zj!aYSd9$$8?9YI8OUZe&-BhyF%!#$}F}8|#QnC5Z+yU`jwm*-;)8e^vB-uSdoCQ5% zUP zWw>X*!()QFuW-f+8(`RUPZXDF#_|F(t1k2_s7mOWqZ9oTTkM__V)F8d@ytr9>I>}` zAj-eh_kCgXD}+oT_u>9A`gM}MslZ=w%-}9)v4m2xc)G&^hxFV8rRa;7=pWOPti=P1 zXyEZIzI;q=Rek0sQZHn`W1_v)pQqXU1#sYw9R)iI9DMJ8`TWYNxr5B|o z@*6TQGv3W=*V>fQVWneB?=R&`7nM%)r~kBN@4-S(GPb-73tLxn=8kuHFkb1KcH|FBsD0Ex$$LSEbY9 zn8TnzQo10Ep=oEzHaV8!b;j&or!rgS`}P<8Qr^_rS^TK% zGsPZ|-@LQcex46TAv11iX%G&_w$$rOnr_oa_>9Ff<=yLL?S@uZX)S(S4n8h>8Dl4` zwFuf0Zg(mC{Hu?Fyw94=QFBaLK}1c5Qa0Und3Y|Sd!HKRnv%#rnE zTJfe*s2J1=_Cl)Qqw?EO*}yMlIA#{V;7&#oxTaFEw`i{1T=b;eJy-TIY%HF!W}tN; z&cKFt zF4lOzsdwVlcva*L>6qbz|R?LNA*f$lWgCqgFTJ(5_mScWl;7naCU65TU` z)UFHNT%}##o)Wr-#%F1$wVe&Mc@kG@tYn0;L8$?Do-8bug=b`8fh;VP$>Dk>UVrUo zsNT8YTv?eX54K5<+a&Fc;8U{xYZxa$NIUGaeUc5eY}L-|8)8$W%zOJoPV=BqJT23M z`;@0;o2|-Upe6Y84m~7!iu?tK9+5nW+V5cdVaa3EzEPf%wLh$x0+C9dmHl}o&&XV- z=#-ZA<>VUqT7M|nVp%(;zeAR-<9=5P+9bFRt};1xGc@8MUMCL?5Y8MlGHbjM26*au z0kqD+04)wI*`!h!I{Lc{z@BX>*Y8Q^+Sb9kX06Ec!)TdxER;F4#TFV&de+U$gPZnw z1y!&L-<9+7+<9x}6}SsLd$M?IURnX4PETMHP14PE>gIG6jf*!xdj^}hC5gW zk073sl?Ae9Qx?i_ff?ZB!X{0+P==(W%LgaM#5GsAbNqSkY%-~mOsgb=D&dR>n^g|( zzGzd^Z>5i9#*^>j$EdD^oM?IDMT7Y8m;&NHw~727_K>$Lbvvo9)Xx&RQa?@83@qcN zgfa8vmIUZY7*R44zD#*p4!k6j_A)3)U_pE(9>VpOaSO`C*NQ%_FZ!q+s!##Z50;Tv z%4q`}Y0#|2FUdtO%McKJNe;X$b1#;Y$IIaAUht9({kl&4@7qn>t_rwgQs6sx=j_fQxv+dQH5&9gTbBCD&WjPVrlpoc*>+hN?Mk5C`7m%it3p6th{EPt7&m) zkvrs`zoL4@a~02)y9ksW3eJ0>O!0VGe(oeM%l@e+pO8KIRgL#~vh@kecdlqH-mVrk zs+_G{v3a2kN}`t*fT1Nc3R_j^>7kgH%cDFYLwJ?K%dm%sQw$orp;Uw5A})SXo&qOf zt=~5|wnX;6A;aLrz2fI-X-%|my`~&mCN0z>UjG#LF8_V*-3w-U$-pbYus-j7_igSE zxqTlfJzIoR5$^E2T_nvP@4V@y39AMeK9gwBz|iu%?2V~# zV0e_ZnY!{)Hna}iqC7*}Xb<#3N`EidN{O_=uP&3U@T=6Tu!D~e*ZNqf`UY7XLRO2u zgjiJeE|y`ihd?;)-g1e+kPiK>0s1xwi^?#x?q=Hc0m8Bd`fC+_Lw|Yt^l-W?)X2&V zSx{wY>d>gQ0pAzlPpj&7@1%^W=Z>6ND3nrH}_pQ95+A6IO*9K zQ1R zn*;~b{tq(;fa+Hp zpipp@h_Mpd1JorrTb4{A(}KsmFg1cQ%UQ>49;+;cA>K;z#U-w}^dt}GP^ecGmn<}> z%6!@a6?jSqEw&$RvHomfy6n#pX2`raxOR!WD!UM-7~+s{c8R1mH>7E2;lW(d{c_Pv z+9g6q{rgJpSpwpD28(R6Pa7oxkzNTC06{1z}S&)T0TQPV6 z?_nAG&3N}F4$1Oo9~-kO+v(3a#x$?WmRns;_*wbGYV*of*=;Z)UN5_{j-^4k6COXq zk2}ZZ&gMEQof6%GFV#(Sxfi<^x!fJB0^i#q4$8saU-3yZFh|CLiFY=QKW$GplLlLv53sIg{J+ z^11v6o4Dzdc0M$XE+=u*A84AHpVOHCNdESRXHI^wX~y&iCO$6 zoS8o@XKK@=oCkBb>F-UQ-ZpJIEN09sn>?*-YR)4Clezr;1={3k2Xg6wa_JFs;c&C^ zXHG6S#0*^|E?NhFea%UFhG%nYnEL;s1q2>%wn z-?)F*zHM8#x9rI#cGhe(G>9ICfoIK(5&rtYUvDqN^uBiauXl9nMrffhjf2VDj6ngo zh-NmJ_1hXO+U%C)`U5ai9M%T&#KClyI%QRQW&zA&J7bKY>vL7Vblxy8WLXgAkTYg;v9-aS>WbXp zE_KDEz)>}8QA#*h{|x4kP$Zc2!i|JO%I<$q6%ML!S**&Pd}S^x*~w$?!Uzwu@hKIH z2ExwCf}Y&{m<+k-g`rwcCHI@P+@{hoYZykqbmJwH>Fb1aA%S5`43lV$b69~Q{vph^ zJ$nv_f8)or95Tsfwrbk0ru}<%9O#U0j%==B8eWYIeb*9rIPgLsLs_kK2fhj19Y|4x z;PuL@kyj(H2i^><2>d=k*JFW}z^1?sSZ`-^BisPYmFeREGC!znR$Kaq65)oTRd&W& zWGBx(6(Q;Ga<4_m;dfy$_(BbCQI(jgS=t$xR|}nL@iCROggtYL--*DW6ibkT??k4A z`g1QwJpH&ogrUDlhwI zHRP@kNvbCAN6GkVhzY%JlNyUhiNzDenrmQC6wa!#FKdKuHP%@poKlMqsZy`dt_q*4 z%AX>_N2-IHQ!O#Fcdy#nK1MqaV-CC-`BqgLRN=g;Y*lUWk&Dl%Qi^Z^hStH=#QK~h3lZ6B&IXFjCD%PA;7yq$uoKnbZx`n&KlDsvQYxO0^)s(TWY zmfW7u=6zRBus=<1?ZdvGKO_E44Y2k z3yX|vRW2uOAR9uV#Bi>Y{4xwL%v?OY$bxvvc9nb-xSWPY4(Gx)q=pnuNCIiEv}Z^N z=R;a1tc}DceQRk2pv1rlv+}i(KKZ_^`f5iHd8!*;*PZR|P`MkG@8iR)?4KhvY5c5s zkJi9b-W@e{@6{CTQ=#?_GN(F}0q0OmDtadp&dp4OTk7U;Zk3C?t_0qRG&gHsD*M&I z0Ts5hLVL-@YB*pP`DDGs_@Ik~3B?7Twl{jh=$UW`-Ut~NgfHCu2P1Sa)6T6ZP|il( zc_f#H!=HYkU2#Zp>B4gD6b(WFU6}V_OsbS@SOHSZDj<)B$4j;vc{bU zjR=OQ++aKe`WtaD)D3oa!k9#}&s^`R46TJyN&Z*UE%Y#WW~yq5WfC98K8j;wCkmTe4S$!Lr%GGx4z6z3Qr5 z8UT|5s~;xGkA(VOW>pUKT>+VFvmjzeR=18Y@!I#utq+ctVYQ>26OoW!OJx@E~ zb84Lc>0?%UH`hQck{^;%0(zvd5Z+}9bu~q?nr3)~2-Da{LV;LKVWvepu|_{iwnfR5 zC{)bH=vJRmGy2T2_ncWpz;WO0{FSvo584B!Fm0fC)PT$G~-&X@4z?8`Vxfr=u!Vns0l;It3@PaBb5SazJ z^bi|}MS^t^%@(Yy(V%QVR=he=v<6NF92Bz74+U380pW(Dw}VUv%{o)pHXB!p_60CzXbL zrh4psA)l%qD_oeK4`6z9L_K*}wLOAoxhp1h zZ>K?x5VVyJ`!MV42N|`&tr6|8&Q(Ki2t9Elv|Ir7M&O3wL)Fp!p-Ov(`@ioQZq6Jg zGH{KDb3fTpquH7phG=J?GlO#qSNX@GJy0)gD_xwr91Z$58tEH|l*K!gcOuUXm)pOA zQH@4g&HZBp+N(aaO;MXB>RH+uH1E%jP@g}dK7SOR z!h8(Fs-vrGA!KkgKD3@x7eXFKAdiL6V&LS#bv6vH*dcIxGe|OP10{==3QtT2a3|}# zB%5Z1I~s?_kj26n4|fSpvecVS-%#)=$qdsy{8~C+>g_eyo<7jBb=&@ZTepc#yAST# z^S-!qe@i2ik_@w}p7@;VuPk1%@n);`v`S0RiDI5O& zbb&;#f$1?=nI$r$UBj$q-nx>9@yg1N{_+Mx%8%~E9VmbTD1ZVefC4Ch0w{n2D1ZVe zfC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch z0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2 zD1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVe zfC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch z0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2 zD1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVefC4Ch0w{n2D1ZVe zfC4Ch0w{n2D1ZVefC4Ch0)IsyCE3IiBBUA^X1JY!vb2oFFv4KwFIl0S(|nm%=E&a}K?a7wPi$D*m-4U_Jk>ZDl#=7|lJjxJBwdJ0 zopH4-E`1(X%+krYVwFzCLtn;=iqEj!U&mK4A*yix3s(OUD|sUx=y|*3M4VOs^=@IA zU;Q$ked-KL4_nficq^p)J|o!r8lon5b#HLJkOC1D2gJ=jZjyR7z@cEL$R$5&dpvYB zPPBOFRJ_R9M^5eRY&{t-KE-lu{XDLJCh|)Nmxx$0Tw+GHsMcvLGfpz%>YugAJ<^G| z$jI}W^h+XlquFs|N1WSW5>4Hl=~A4FbDa4^w`hVxnNEMm1vuGU6rC_-0$0cW)^M9U z+GhDq1-R9EN8sTES2uE^pQ~$eej{ctA5pTzo{$<6B@J2srgC-Obfw4tUkyWw8{D2w z+3NO?+Kol}1?3RgxKW{Op~7OdJWIFKa&?dOY^I5kn<_^5A&26IBK<@#z4I|H85mw- z?+vZxHaF>=z46HAjmoFrXLW*Y^}qs-4#`EA+XG49*rLn@X0>Epf~0e}x=i-BazfLN zbp3=VlOp3Oi0r&H`H=o~XL75V>R-vTdN)=5ONA?1mR`rAJjQJ*PhZ2;>0SRb01DKV zjBuFSq+ipU@KfD!B{ySswkUtQEWJs$9!odQ_U=EV8&~$j(JZ}zZ?U6!MIlrvZk?~Yy3ZU;Z|)Z{Rb`W|+S;^DgxeGx;UZ^hYlpDyW9j;KSh*mBk(Nx`D4JN> zP%%oRvfRl&$ENA#WA{N*)D6*;m2oS%dB{!dvv73!uv;!~zqRV^Kl;~}R#d(lQp45j zV>Q}_cVw`K814o2dauV)9N*5%R5$^ zU0xR`D-ZVJs}!2z=-aPx22EBX#4z6UmP8oIjUpyn6cxse)3b}%vXGT6+S`7{S_&PX%eGwdfOn+u{l z?dBA-ZM2i)$8t7vhRd8a+)RFIO*3C>=2Hfe0po^e!MES_nG;70&$@ef*1*Ah);Rd~ z{u)2*j(aoj5_o7S6P^wA6tEO{tIqavE$-#=QIcG~;2* z-g^|+3b6Nl=cn}Eezun6Xo9d*HcwwTBkxdr(J6Wvp66M8!aPYNXm>!3fllI8?#xi0qw zm!m<(9%#%dw6inWIlyl*xX~S~bt@&_jmlbYEwOzbl%*|NaGjLUNR$(1N0+(1lVx-9 z1-oo5zF?J2Q8$%S_qmN5SGZx*<6h~8gUEcMn3Y>U2mPCe_8vAF==QihB^PXLpQT9e z;uEho$o8mv&0SnmgF`@ZHLr*Ke&)J_{ob2j6f9yW}tlTf^HXd)b8jsH7BNoDKl(UML z*dPtbul3#9y2R!@3)i<>5y_idS})j*3>d;LSQQSk^T3}_mna{*8@iI4Sgh3$$EZ=DqVgKHfoov1Qs4tLV)nC0lBj zSZ}>E%Tjy6DlM@FGhy4d=7QB}S+m3{$hFBawn}s}v3bwk3GqFSzlYX6Z zf*vt{P0waavN+%+^%Z z7dbCNl>eyj{le&11erqa!-Hdt>l9~WVX*MH$y?ZLi=<_XY=;dF>AML^(HpOCa7=Tm zo(wEzfhV%X@-ekl^;w@NJ&^s*iO!Z_zU~MX!hzd&7Va!`i9P@8^S`HBFbz?E(*R%S zOu058ABK5OdWK31sq{-KlAl)=$6@tqIQ+-h+hkDLrjkF#loY`m>z#7o@@f@0@XpK1 zFO|jg4JuO3zgg>Cn^rokbZqGZrDEyA(rLkg|a&7k>{OaIc9qr{`e8II@ z+Ws<>yt>I}VWa)4;eP7zIGbBb^QhVxmpoME+9ne{P1-;Mj>J=b|HJ+k{k%};S8`ZT zzr-&t2W3YFsvD@zdMKL%W)=cjA9V3#*(SIK=1^%S&6p=WK(j3K=lJK(_B)(6aGXM< z=}~D&RNkeV5*U|wV69)b zv^dYJ53ZHYS|$gjuPy4#wbEA>#je}br>S9=o}|Lkb)r!3hnoT6J1S^#HPs&);1|_x zG_;k9FtHInt9$ICFt((- zD~^TywnDK$ZOEolvT3a}o0dFIg;?qQY>uU!NgXti=65HYez!WCioN@be@-`bbd)?s z1D3>t^v%0koEOA!95NG@l!oDOd~?0Axbb#lM8I4!lkQnh^&47Xqow2t8h(QMIdcbW zHB0(pVNWTn{yo6KUZK1+xo(z>KCEQV>vP=Mu%TPXoC=TcWEjeI9gA*LY^=NkDugwq zkhkG&USXUGSRo7jb2v9Msc{>u;*@~Mk#dzYvq%m_k~lLQ;Bl(t=yt`an-wx<4mDC) z#T!eZVo)pC3#r17(YK+pp`TMYX0|y0E>4kz#!|Vb_(|GS{50))k_I?Fk<3^(vAU4* zbt7MUY*|&4!!UbzpOImZ+GSPx`S9>w_p_Z1Y^T{d5i*hQRpd2`D2!>Mw3sUW*q#xj zc3tF_D*gJlw8%9qKF>n!ZG5EF*LQ`^D`qGglp0{?QfU#Do}^LRl!0%C76HsVZ~P*EIjN8aT!|EvzY0dLAn7`&ZDs;$h zWod6to{_KhhmtL#`f=kOvUHvByHe05;dOA8(Zns#h;R10MQDI<=Ae<;lZ`MWGS7>k zbsh$2dC;0o8iQe@zqb(V`Q~!t-VC929c=6Niu@pqmf6Q6Swov0ks+je-Q0Y*X`fqI z1)K0)F*o0vzj|(=x6rpYTeRn=7m69|1U9lHUCj<3f4ooDv1VuFPXQ}LZ_zK>Ac0^F z1oMSAyJ7L4-Rd05YB7h3qZiQ`7SdFzES$QCLQ`d7;2(pUyJ3*^K%XKUtW<1-2H;7E z%&lITBPxBMUGoqkbOw}u`Z<;N!(>!V@x#1SNr6*An%FKuFZ?b3*A0AUc+!r>H-@_jAcBSDY)s@CMLMx3kEX|-YQArsy zmo}$BPr}KHm562P%QW;WO4`bxAffrmjbw<>QzpzWlV2$hcYGOWe0^*BBjBpr=Fs|f~p<&`*Ms4%XTeqDcPx09p?lbtuaG-1;O11Q^kw$f*ZM|8p+LGnliJAHQJ8W>t$r2d2k2Zl#k zo0+SqWft8!!J=It@S0^`XYtP%*bXvqtPxxXCHYE1{OFmKeQKU zCMpBQ~SE-`pG>(3szE%-LTMw(bDOg7k+XVKU7p8G3Jbh{?18ujL?HPo9U68pQp zL29GcY=e{j#0KHF8`!NOjFu2h>8m@SE3qpBplj(5r6I@a*@3OW53>e<>Q@_}P;i!r zxf0p~)FnKdDwc?4{^Nd_8bO(9_Hl>LPL(LcTS30~PG~AUCBiwB>NV9vr3Ou%$6BBY zPwAk=_F*kHm?KT6!CYwu73Cqdi|NXoBA8;xH%D{UC|XlPx_%BG%oRUCi)XSf5jyJM zR|+pzvMyx^^d@j`ljF?~=6VbDlk$*g&f&#W|Dwow4tj1;<@{ljUw6p2MRSZ4S`^J$ zp6kt70og@!M3`+D13;uPN9RGOG1oA)h*RN`aEyG-u(K;fuMo2#3vZ5U@&n!@6#C6% z_a@(*9n3jCW@U~$n0uUSTA4#zJZ@O6_+hhY#mbyk7!j|hp6ui45blP@&#?05db~M8 zd!<`pzu?Ps`+B^KybC?vm%T5E9`97|E{|96wur%d_E`MJKxq~YW=juK)$I3Xs}{fa zp5WbkY;4CvGDYkq-H@KB>L zebTOnr?KTEVfurOGYfKe6g*n6{gIiIA8MR2{lUo(O`hI5eMUiR?u;1)({{`(n3g-W zaZ>I>xx)1KrcQ62HXRl-W|mE!RyH;F(Zb0>!GS`3^0b3_>_Bq%X3|pABFlS-T(wwC{$8%N=wz;AILVgMV7QVmZ!0!Fq zwr+3Un?szu)of~zeH;hRnmIH4^?|>h9**mI?ebsG=z$xdg~BurCUY|ehu|Wb*aHi&e*6&KLzthLQ&928Wp`+UFHcjV4 z?b`0oHRHC0gUA;OG`g8|qie=kNZ+ETOs+RFXNe;JF*LOD_*t_#!M|^W^a}C$c(nT0rhg6e0s>$~Cih0Z- z%@|6~Lt+<6i)6QcsKK21um&%up#1Q53aSDnWFi^w!po?vQNZENQ@3c|Nl;pH)B4`M z@Ky#M|1ip9K-tbHpN|Ru8e>T=^zQ6}onOJuGq96zF;W#`a}vlHwzVkybdx|-<~%F& z1Z4x+5Q+4S=DEqwqwvDaBf^U;h^KDX$VZ{eX;|cF9{h&Xkirc~Anld*3<=?UC`+Za zvE-z0Evo>O7&u{8zBbk?-(azeWzRx1rufS@@WAsn4kUU@|YVQ z{Bb_sTj=rTcSKHjR-{BKra^g&oF9wwXu?;QG-}bjHTyIeESp>+mkg`jr>)Fm0Wc}B z2Vs)@Xr%W=-qskj&J!`X?oP%6*>DwYj&^dW7bNhC+BA=%7`QV-V#^o*iOqooOi&=Oj3ZbDL6yEWMFKRLek$I5Ii149A zEL<1U9pSnf9m)n|C97h^tKnq8K_TmcNO)B&1i#IYMs1|5<~u1IKrBhVtA*FS&1T)+ zzjrLT{9aZ)uSv(_>IIFxYW|ZZeHB-~(4@2M{c=Yf9udKVB6#f!?HVRt(E3lrBPLP( zCNB4BCI&BCo1KPP=2yd0TX>1ShYfvdyS4|0zUQF-Vw<06zMCKrb{^4u16jytn$OuA z@~P&t!-eVl0H#MrwNpnl#|!6-3pttgPYdzkLV%H9> zb(K z2-?bqeVFz2fs9(=)`)dj=c}PNgr0Z@v|Ir7$KZzHL(SFop~iZK2fptaZpj)Zb8wAE z^FG;GqdS@!Zr0C2X9njKuJVr~d!b(XR<<~OIU4kBEYdd+DO+@@@5EjhPTRhLQH@1f zCH!*?+N&|N)zGr8cLl5y&S>z^z-M%IvBI9#R0CQYC!JyUc+lsbuXd>?Vhc{jjFdg6 zW4>#Z9=M~2F8OXK^4b_&=&l#oH4pKt;8{z+>Z&~#^F#i2xc=9iixsu#UA_cd=&BKu z3{8K%_wc$&bVJr5L-V+j{V1dtpf~vT)pM*fXxeSW^sgX4BNeXiGujR3V!e5t6=C#} zjzN3WU<8xkT%Ta&Y}aHbh5v3bC1P3O8{mSozo0{d&=m`gYx7=g*IqoTy?6|s!h8(F zs;jee0c3D2IkcYA7C;_HA&&*nV&LS#bv6vH*qh<@X0T$_2PrmvAUrW0Ae^f2R2;e; z?r2;-Q#KD{JlrL?$r67CdqW|nrE*-?@N3z8si()}c=llP)@=v&Z`~$0?m4u3@B8wu z1I;_Qv{aZ~btmUke`E2=m3?V2{~GSRG7IYsP0mf({PaiuvD7~{&HokuO4)Gz;|2Qq zOD>;4-NlDl5H5@Dc;EXD)=a1zu@$XFg zm&f~|B)IjX1=9Y01BW03ZMWApuj(%!1df9cmTR-n6=>1f=Oi3^r=&Gr{xcWid=<{MF)QWDBvIP zL}HOq00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu` z00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG0 z1yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5 zPyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu` z00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG0 z1yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5 zPyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu`00mG01yBG5Pyhu` a00mG01yBG5Pyhu`00mG01yJDsA@JY)%^eK@ literal 0 HcmV?d00001 diff --git a/apple2/c02.bat b/apple2/c02.bat new file mode 100644 index 0000000..3e79d91 --- /dev/null +++ b/apple2/c02.bat @@ -0,0 +1,5 @@ +@ECHO Compiling File %1.c02 +..\c02.exe %1 + +@ECHO Assembling File %1.asm +C:\Programs\dasm %1.asm -f3 -o%1.bin -l%1.lst -s%1.sym diff --git a/apple2/include/a2min.a02 b/apple2/include/a2min.a02 new file mode 100644 index 0000000..7b6f620 --- /dev/null +++ b/apple2/include/a2min.a02 @@ -0,0 +1,34 @@ +;Apple 1 program initialization code for c02 programs + +;Locations used by Operating System +PROMPT EQU $33 ;ASCII character for INPUT prompt symbol +LOMEM EQU $4A ; +HIMEM EQU $4C +BASIC $67 ;Start of BASIC program +VARBLS $69 ;End of BASIC program and start of variable space +ARRAYS $6B ;Start of defined array space +ARRAYE $6D ;End of defined array space +STRNGS $6F ;Start of string storag + +TIMEDM EQU $BF90 ;Day/month +TIMEYR EQU $BF91 ;Year +TIMEMN EQU $BF92 ;Minute +TIMEHR EQU $BF93 ;Hour + +;ROM Routines +EXIT EQU $3D0 ;Return to BASIC +RDKEY EQU $FD0C ;Waits for keypress and return in A +KEYIN EQU $FD1B ;Waits for keypress and cycle random-number generator +RDCHAR EQU $FD35 ;Read keyboard (processing escapes) +GETLIN EQU $FD6A ;Get Line from Keyboard into Input Buffer +CROUT EQU $FD8E ;Performs a carriage return +PRBYTE EQU $FDDA ;Print Accumulator as Hexadecimal Number +PRHEX EQU $FDE3 ;Print Low Nybble of Accumulator as Hex Digit +COUT EQU $FDED ;Print Character in Accumulator +BELL EQU $FF3A ;Ring Bell through COUT + + ORG $0C00 ;Safe Area for Machine Language + +START: JMP MAIN ;Execute Program + + diff --git a/apple2/include/a2min.h02 b/apple2/include/a2min.h02 new file mode 100644 index 0000000..1d3b6fc --- /dev/null +++ b/apple2/include/a2min.h02 @@ -0,0 +1,15 @@ +/* C02 Minimal Header File for Apple II */ + +/* Monitor Variables */ + +//PIA 6820 Registers +char kbd; //Keyboard Data +char kbdcr; //Keyboard Control Register + +//Monitor Subroutines +void echo(); //Print Character in Accumulator +void prbyte(); //Print Accumulator as Hexadadecimal number +void prhex(); //Print Low Nybble of Accumulator as Hex Digit + +//System Subroutines +char rdkey(); //Wait for raw character from Keyboard diff --git a/apple2/include/apple2.asm b/apple2/include/apple2.asm new file mode 100644 index 0000000..81433ce --- /dev/null +++ b/apple2/include/apple2.asm @@ -0,0 +1,46 @@ +;Apple 1 program initialization code for c02 programs + +;Locations used by Operating System +PROMPT EQU $33 ;ASCII character for INPUT prompt symbol +LOMEM EQU $4A ; +HIMEM EQU $4C +BASIC EQU $67 ;Start of BASIC program +VARBLS EQU $69 ;End of BASIC program and start of variable space +ARRAYS EQU $6B ;Start of defined array space +ARRAYE EQU $6D ;End of defined array space +STRNGS EQU $6F ;Start of string storag + +;Locations used by Hi-Res Graphics +HPLOTX $E0 ;X of last HPLOT +HPLOTY $E2 ;Y of last HPLOT +HCOLOR $E4 ; +HIRES $E6 ; +SCALE $E7 ; +SHAPES $E8 ;Shape table start address +XDRAWS $EA +CSPEED $F1 +ROTATE $F9 + +TIMEDM EQU $BF90 ;Day/month +TIMEYR EQU $BF91 ;Year +TIMEMN EQU $BF92 ;Minute +TIMEHR EQU $BF93 ;Hour + + + +EXIT EQU $FF00 ;Monitor Entry Point +ECHO EQU $FFEF ;Subroutine - Print Character in Accumulator +PRBYTE EQU $FFDC ;Subroutine - Print Accumulator as Hexadadecimal number +PRHEX EQU $FFE5 ;Subroutine - Print Low Nybble of Accumulator as Hex Digit + + ORG $0300 ;Start one page above Monitor input buffer + +START: LDX #$FF ;Reset stack - the monitor doesn't do this + TXS ; (probably because of lack of space) + JMP MAIN ;Execute Program + +RDKEY: BIT KBDCR ;Check the Keyboard Control Register + BPL RDKEY ; and loop if key not pressed + LDA KBD ; Read key into Accumulator + RTS + diff --git a/include/apple2.a02 b/include/apple2.a02 index f443541..45379eb 100644 --- a/include/apple2.a02 +++ b/include/apple2.a02 @@ -5,7 +5,7 @@ DELKEY EQU $08 ;Delete/Backspace Key (Left Arrow) ESCKEY EQU $1B ;Escape/Stop Key (Escape) RTNKEY EQU $0D ;Return/Enter Key (Return) -;Standard Library Variables +;Zero Page Variables (*=System Variable) DSTLO EQU $06 ;Destination String Pointer (string.a02) DSTHI EQU $07 BLKLO EQU $08 ;Block Segment Pointer (block.a02) @@ -13,7 +13,8 @@ BLKHI EQU $09 PTRLO EQU $1D ;System Pointer (pointer.a02) PTRHI EQU $1E RANDOM EQU $1F ;Random Number -RDSEED EQU $4E ;O/S Random Number Low Byte +INVFLG EQU $32 ;*Inverse Flag: $3F=Blinking, $7F=Inverse, $FF=Normal +RDSEED EQU $4E ;O/S Random Number Low Byte ; EQU $4F ;O/S Random Number High Byte SRCLO EQU $71 ;Source String Pointer (stdio.a02) SRCHI EQU $72 @@ -28,11 +29,18 @@ TEMP1 EQU $FD TEMP2 EQU $FE TEMP3 EQU $FF +;Page 3 Vectors +WARMST EQU $3D0 ;Jump vector to DOS warm start +COLDST EQU $3D3 ;Jump vector to DOS cold start + ;I/O Locations KBD EQU $C000 ;Keyboard Data AKD EQU $C010 ;Keyboard Strobe Register ;Monitor Routines +PRBLNK EQU $F94C ;Print 3 blanks +PRBLNX EQU $F94C ;Print X blanks +PRBLAX EQU $F94C ;Print character in A followed by X-1 blanks RDKEY EQU $FD0C ;Waits for keypress and return in A KEYIN EQU $FD1B ;Waits for keypress and cycle random-number generator RDCHAR EQU $FD35 ;Read keyboard (processing escapes) @@ -40,18 +48,18 @@ GETLIN EQU $FD6A ;Get Line from Keyboard into Input Buffer CROUT EQU $FD8E ;Performs a carriage return PRBYTE EQU $FDDA ;Print Accumulator as Hexadecimal Number PRHEX EQU $FDE3 ;Print Low Nybble of Accumulator as Hex Digit -COUT EQU $FDED ;Print Character in Accumulator +COUT EQU $FDED ;Print Character to Current Output Device +COUT1 EQU $FDF0 ;Print Character to Screen BELL EQU $FF3A ;Ring Bell through COUT MONZ EQU $FF69 ;Enter monitor (, leaves the monitor) -ECHO EQU COUT ;Print Character -EXIT EQU MONZ ;Return to Monitor +ECHO EQU COUT1 ;Print Character +EXIT EQU WARMST ;Return to Monitor ORG $0C00 ;Safe Area for Machine Language START: JMP MAIN ;Execute Program - ;Subroutine Poll Keyboard PLKEY: LDA #0 ;Clear Accumulator BIT KBD ;Check Keyboard Strobe Bit @@ -63,12 +71,17 @@ PLKEYR: RTS ;Read Keyboard GETKEY EQU KEYIN ;Alias to Monitor Routine -PRCHR EQU ECHO ;Alias to Monitor Routine +;Print Character to Screen +PRCHR: ORA #$80 ;Set High Bit + CMP #$E0 ; + BCC PRCHRX ;If Lower Case + AND #$DF ; Convert to Upper Case +PRCHRX: JMP ECHO ;Alias to Monitor Routine ;Delete Previous Character DELCHR: LDX #2 ;Two Characters Total LDA #$88 ;Load Backspace Character - JSR PRBLNX ;Print Accumulator and X-1 Blanks + JSR PRBLAX ;Print Accumulator and X-1 Blanks LDA #$88 ;Load Backspace Character JMP PRCHR ;and Print it diff --git a/include/apple2.h02 b/include/apple2.h02 index ba5b263..c7e0f05 100644 --- a/include/apple2.h02 +++ b/include/apple2.h02 @@ -14,7 +14,10 @@ char blklen; //Block Segment Length char temp0, temp1, temp2, temp3; //Temporary Variables -//PIA 6820 Registers +//System Variables +char invflg; //Video Invert Mask + +//Keyboard I/O char kbd; //Keyboard Data char abd; //Keyboard Strobe