On 2025-08-20 14:45, Noon wrote:
Hello community,
I just wanted to let you know that the Internet recovered the sources of Turbo
Pascal 6.0. I haven't tried to compile them yet, but they look complete: https://archive.org/details/tpascal
What's interesting is that the compiler contains an opcode generator for x86 assembly commands - which potentially could pave the way to extend the integrated assembler by 386 commands or above.
I hope that Borland Pascal 7 will appear at some point as well, as this would open up the world for the community to extend their favourite compilers!
I've had these for probably two or more decades. Also never tried to recompile/reassemble them, but I did (and still do, somewhere...) have a program
to actually modify the builtin BASM hash table to include some 386(+) instructions, but using 386(+) code is also possible using const's to define opcodes and use them via db/dw/dd. Extending the assembler to actually handle the new addressing modes of 386(+) instructions will probably be pretty hard.
It would be far more useful to have the source for Virtual Pascal, and work with
that one, although given that that compiler is also written in pretty much uncommented x86 assembler (now how do I know that...), it will be just as hard, but probably far more useful, right now I'm using it with lots of db/dw/dd codes
post Pentium instructions, like (wrapping lines)
{ cmovg edi, eax } db $0f,$4f,$f8
{ cmovg edi, esi } db $0f,$4f,$fe
{ movq [ebx + offset lift_list.sum.km], mm0 } db $0f,$7f,$83; dd offset lift_list.sum.km
{ movq mm0, sum.km } db $0f,$6f,$05; dd offset sum.km
{ movq sum.km, mm0 } db $0f,$7f,$05; dd offset sum.km
{ paddd mm0, [ebx + offset lift_list.dtv.km] } db $0f,$fe,$43,offset lift_list.dtv.km
{ vmovdqu [eax + ecx], ymm0 } db $c5,$fe,$6f,$04,$08
{ vmovdqu [edi + 32], ymm1 } db $c5,$fe,$7f,$4f,32
{ vmovdqu [edi + eax], ymm0 } db $c5,$fe,$7f,$04,$07
{ vmovdqu [edi], ymm0 } db $c5,$fe,$7f,$07
{ vmovdqu [edx + offset minmax.max.km], xmm0 } db $c5,$fa,$7f,$42,offset minmax.max.km
{ vmovdqu swaits, ymm0 } db $c5,$fe,$7f,$05; dd offset swaits
{ vmovdqu xmm0, [edx + offset minmax.min.km] } db $c5,$fa,$6f,$42,offset minmax.min.km
{ vmovdqu ymm0, [esi + eax] } db $c5,$fe,$6f,$04,$06
{ vmovdqu ymm0, [esi] } db $c5,$fe,$6f,$06
{ vmovdqu ymm1, [esi + 32] } db $c5,$fe,$6f,$4e,32
{ vpmaxsd xmm0, xmm0, [ecx + offset minmax.max.km] } db $c4,$e2,$79,$3d,$41,offset minmax.max.km
{ vpminsd xmm0, xmm0, [ecx + offset minmax.min.km] } db $c4,$e2,$79,$39,$41,offset minmax.min.km
{ vpxor xmm0, xmm0, xmm0 } db $c5,$f9,$ef,$c0
generating the byte-code via <
https://defuse.ca/online-x86-assembler.htm>
Robert
--
Robert AH Prins
robert(a)prino(d)org
The hitchhiking grandfather -
https://prino.neocities.org/
Some REXX code for use on z/OS -
https://prino.neocities.org/zOS/zOS-Tools.html
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)