It has an EPROM with Wozmon and Basic for now. I have to redo the address decoder, but I like the simple serial interface by Geoffrey. (I hate the PIC18F15Q41, made by Microchip, but still the best minimal option .. for now)
Probably the last time i’ve used a pic was in 1998
I’ve posted in the past something about pl/m. Today i got this running again in a dosbox.
The PL/M programming language (an acronym of Programming Language for Microcomputers) is a high-level language conceived and developed by Gary Kildall in 1973 for Intel’s microprocessors.
PLM86 PROGRAM.PLM
LINK86 PROGRAM.OBJ, PLM\DOSLIBS.LIB, PLM\UTILS.LIB TO %1.LNK INITCODE
LINK PROGRAM.LNK;;;
Tic Tac Toe in PLM
bke:do;
/*DOEL: */
/*Dit programma is boter kaas en eieren voor twee */
/*spelers, er wordt gecontroleerd of iemand gewonnen */
/*heeft. (Je speelt niet tegen de computer) */
/*UPDATE:12/2/90,15/2/90,18/2/90 RELDATE:19/2/90 */
/*PROGRAMMER:H.M.Aanstoot */
/*UPDATE 5/3/90 1:13:23 */
/*De volgende 4 regels zorgen ervoor dat de compiler */
/*de PLM DOS,UTIL routines die op disk staan */
/*meestuurt naar de linker */
/* bla bla 2de versie met STRINGS!! eindelijk gelukt */
$include(plm\doslibs.inc)
$include(plm\doslibs.dcl)
$include(plm\utils.dcl)
dcl naam(3) pointer;
dcl plaats(9) word;
dcl teken(2) pointer;
dcl aanzet word;
dcl loop word;
dcl a word;
dcl winnaar word;
dcl nummer word;
dcl item word;
dcl error_status word;
spelerzet:procedure;
call dsso(naam(aanzet));
call dsso(@(', geef een getal: $'));
invoer:
nummer=dsin;
nummer=nummer-48;
if nummer<1 or nummer>9 then goto invoer;
if plaats(nummer)<>0 then goto invoer;
call dso(nummer+48);
plaats(nummer)=aanzet;
end spelerzet;
update:procedure;
item=1;
call dsso(@(cr,lf,'+-----+-----+-----+',cr,lf,eos));
call dsso(@('| | | |',cr,lf,eos));
call dso(124);call zet;call dso(124);call zet;call dso(124);call zet;
call dsso(@(124,cr,lf,eos));
call dsso(@('| | | |',cr,lf,eos));
call dsso(@('+-----+-----+-----+',cr,lf,eos));
call dsso(@('| | | |',cr,lf,eos));
call dso(124);call zet;call dso(124);call zet;call dso(124);call zet;
call dsso(@(124,cr,lf,eos));
call dsso(@('| | | |',cr,lf,eos));
call dsso(@('+-----+-----+-----+',cr,lf,eos));
call dsso(@('| | | |',cr,lf,eos));
call dso(124);call zet;call dso(124);call zet;call dso(124);call zet;
call dsso(@(124,cr,lf,eos));
call dsso(@('| | | |',cr,lf,eos));
call dsso(@('+-----+-----+-----+',cr,lf,eos));
call dsso(@(' 1 2 3',cr,lf,eos));
call dsso(@(' 4 5 6',cr,lf,eos));
call dsso(@(' 7 8 9',cr,lf,eos));
end update;
zet:procedure;
if plaats(item)=0 then call dsso(@(' $'));
if plaats(item)=1 then call dsso(@(' X $'));
if plaats(item)=2 then call dsso(@(' O $'));
item=item+1;
end zet;
check:procedure;
do a=1 to 2;
if plaats(1)=a and plaats(2)=a and plaats(3)=a then winnaar=a;
if plaats(4)=a and plaats(5)=a and plaats(6)=a then winnaar=a;
if plaats(7)=a and plaats(8)=a and plaats(9)=a then winnaar=a;
if plaats(1)=a and plaats(4)=a and plaats(7)=a then winnaar=a;
if plaats(2)=a and plaats(5)=a and plaats(8)=a then winnaar=a;
if plaats(3)=a and plaats(6)=a and plaats(9)=a then winnaar=a;
if plaats(1)=a and plaats(5)=a and plaats(9)=a then winnaar=a;
if plaats(3)=a and plaats(5)=a and plaats(7)=a then winnaar=a;
end;
end check;
hoofdprogramma:
winnaar=3;
naam(1)=@('Speler 1$');
naam(2)=@('Speler 2$');
naam(3)=@('Niemand$');
do a=1 to 9; plaats(a)=0; end;
teken(1)=@('kruisje$');
teken(2)=@('rondje$');
aanzet=1;
do loop=1 to 9;
call update;
call check;
if winnaar<>3 then goto gewonnen;
call spelerzet;
aanzet=3-aanzet;
end;
call update;
gewonnen:
call dsso(naam(winnaar));
call dsso(@(' heeft gewonnen',cr,lf,eos));
if winnaar=3 then call dsso(@('Helaas, pindakaas!$'));
else call dsso(@('Gefeliciteerd ermee!$'));
call dexit(error_status);
end;