Last Updated or created 2024-01-09
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.
We learned to program PL/M at school (MTS)
Below the compiler and lib files
https://media.henriaanstoot.nl/plm86.zip
Compiling a PLM source code
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;