From 8321626c163d98740beef3008b425a578d8cfde0 Mon Sep 17 00:00:00 2001 From: hachti Date: Wed, 27 Jul 2005 17:22:16 +0000 Subject: [PATCH] *** empty log message *** --- bin/frun | 42 ++++ lib/fortran/script/def_recipe.sh | 5 + lib/fortran/script/extractnames | 3 + programs/punchomat/Makefile | 20 ++ programs/punchomat/src/c.f | 18 ++ programs/punchomat/src/o$la.asm | 334 +++++++++++++++++++++++++++++ programs/punchomat/src/punchomat.f | 19 ++ programs/punchomat/src/test.sys | Bin 0 -> 288528 bytes 8 files changed, 441 insertions(+) create mode 100755 bin/frun create mode 100755 lib/fortran/script/def_recipe.sh create mode 100755 lib/fortran/script/extractnames create mode 100644 programs/punchomat/Makefile create mode 100644 programs/punchomat/src/c.f create mode 100644 programs/punchomat/src/o$la.asm create mode 100644 programs/punchomat/src/punchomat.f create mode 100644 programs/punchomat/src/test.sys diff --git a/bin/frun b/bin/frun new file mode 100755 index 0000000..8dfcabe --- /dev/null +++ b/bin/frun @@ -0,0 +1,42 @@ +#!/bin/bash +# FORTRAN IV simple executor + +if [ ! $1 ] ; then + echo "Argument fehlt!" + exit 2 +fi + +name=`basename $1 .obj` + +echo "rest $H316/sys/super2.sys" > $name.go +echo "at ptr $name.obj" >> $name.go +echo "go" >> $name.go +echo "go" >> $name.go +echo "at ptr $H316/lib/fortran/original/flib1" >> $name.go +echo "go" >> $name.go +echo "at ptr $H316/lib/fortran/original/flib2" >> $name.go +echo "go" >> $name.go +echo "at ptr $H316/lib/fortran/original/flib3" >> $name.go +echo "go" >> $name.go +if [ -e $H316/lib/iolib/io.lib ]; then + echo "at ptr $H316/lib/iolib/io.lib" >> $name.go +else + echo "io.lib nicht gefunden!" + exit 3 +fi +echo "go" >> $name.go +echo "r" >> $name.go +echo "! echo -e \"\\n************************\"" >> $name.go +echo "run 1000" >> $name.go +echo "! echo -e \"************************\"" >> $name.go +echo "quit" >> $name.go +#cat $name.go +h316 $name.go + +rm -f $name.par +rm -f $name.go + +exit 0 + + + diff --git a/lib/fortran/script/def_recipe.sh b/lib/fortran/script/def_recipe.sh new file mode 100755 index 0000000..9733b95 --- /dev/null +++ b/lib/fortran/script/def_recipe.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# Stelle Rezept für die gegebene Bibliothek her + +ldc $1 | egrep "^[A-Z].*\((6)|0-0\)"| awk '{printf("org/%s\n",$1);}' \ No newline at end of file diff --git a/lib/fortran/script/extractnames b/lib/fortran/script/extractnames new file mode 100755 index 0000000..0074432 --- /dev/null +++ b/lib/fortran/script/extractnames @@ -0,0 +1,3 @@ +#!/bin/bash + +ldc $1 | egrep "^[A-Z].*\((6)|0-0\)"| awk '{print $1}' \ No newline at end of file diff --git a/programs/punchomat/Makefile b/programs/punchomat/Makefile new file mode 100644 index 0000000..4704c66 --- /dev/null +++ b/programs/punchomat/Makefile @@ -0,0 +1,20 @@ +# Makefile für Apfelmännchenprogramm + +ASM=$(H316)/bin/asm +FRTN=$(H316)/bin/frtn + +build/apfel2.obj : src/apfel2.f + @if [ ! -d build ]; then mkdir build; fi + $(FRTN) src/apfel2.f && mv apfel2.obj build + +clean : + @rm -rf *.obj build/ *.lst *.go *.par + +.PHONY: default clean + + +%.obj:%.f + $(FRTN) $^ + +%.obj:%.asm + $(ASM) $^ \ No newline at end of file diff --git a/programs/punchomat/src/c.f b/programs/punchomat/src/c.f new file mode 100644 index 0000000..466c4ab --- /dev/null +++ b/programs/punchomat/src/c.f @@ -0,0 +1,18 @@ +CCCCCC PUNCHOMAT-HAUPTPROGRAMM, 31.05.2005 +C +C + WRITE(1,1000) +1000 FORMAT(45HPHILIPP HACHTMANN'S COOL VISIBLE PUNCH DEMO! ) + WRITE(1,1001) +1001 FORMAT (10H27.05.2005) +C +C +666 WRITE (1, 1002) +1002 FORMAT (2HPP) + READ (1,1003) PUFF +1003 FORMAT (A2) +1004 FORMAT (A2) + WRITE (1,1004)PUFF + GO TO 666 + END +$0 diff --git a/programs/punchomat/src/o$la.asm b/programs/punchomat/src/o$la.asm new file mode 100644 index 0000000..79ca6f7 --- /dev/null +++ b/programs/punchomat/src/o$la.asm @@ -0,0 +1,334 @@ +* (O$LA) +* +* *********** MODIFIED MODIFIED !!!! ***************** +* +* FOR VISIBLE PUNCHES !!!!! +* +* PROGRAM TITLE: O$LA (O$LA,O$LE,O$LH,O$LC,O$LF) +* LINE PRINTER ROUTINES +* +* REVISIONS: +* 1.0 (2005-02.04) +* +* AUTHOR +* +* PHILIPP HACHTMANN +* +* +* PURPOSE +* +* THESE ARE THE LIBRARY ROUTINES FOR HACHTI'S LINE PRINTER INTERFACE +* +* +* RESTRICTIONS +* +* DEPENDS ON HACHTI'S HARDWARE AND FORTRAN IV COMPILER TAPE +* +* +* STORAGE +* +* 420 (OCTAL) +* 271 (DECIMAL) +* +* +* USE +* +* CALL O$LA +* DAC (BUFFER ADDRESS) +* NORMAL +* +* THIS PRINTS ONE LINE OF LISING TEXT +* (60 2-CHAR WORDS MAX) TO THE LINE PRINTER. +* +* +* CALL O$LH +* DAC (HEADING ADDRESS) +* NORMAL RETURN +* +* SETUP THE LISTING HEADER +* RESETS THE PAGE COUNTER AND SPACES TO THE BEGINNING OF +* THE NEXT PAGE. +* +* +* CALL O$LP +* DAC (BUFFER ADDRESS) +* NORMAL RETURN +* +* PRINT TEXT FROM BUFFER. NO CR OR LF IS OUTPUT. +* +* CALL O$LC +* NORMAL RETURN +* +* PRODUCE A CARRIAGE RETURN ON THE LINE PRINTER. +* +* +* CALL O$LF +* NORMAL RETURN +* +* SEND A LINE FEED COMMAND TO THE PRINTER. +* +* +* CALL O$LE +* NORMAL RETURN +* +* EJECT CURRENT PAGE +* SPACES TO THE BEGINNING OF THE NEXT PAGE BY SENDING +* A FF CHARACTER TO THE PRINTER. +* +******************************************************************************** +* + SUBR O$LA TYPE A COMPLETE LINE WITH CR/LF, HEADING ETC. + SUBR O$LH INITIALISE HEADING + SUBR O$LP,T1 TYPE A LINE, NO CR + SUBR O$LC,T20 RETURN THE CARRIAGE + SUBR O$LF,T30 ADVANCE TO NEXT LINE + SUBR O$LE,FF EJECT PAGE +* + SUBR O$LSK1,SKP1 EMPTY LINES BETWEEN TOP OF PAGE AND HEADING + SUBR O$LSK2,SKP2 EMPTY LINES BETWEEN HEADING AND MAIN TEXT + SUBR O$LLPP,LPP PURE TEXT LINES PER PAGE + SUBR O$LRS,RS DISTANCE FROM PAGE NUMBERING TO RIGHT MARGIN +* +******************************************************************************** +* + REL RELOCATEABLE MODE +* +* CONFIGURATION +SKP1 DEC 1 EMPTY LINES BEFORE HEADING +SKP2 DEC 3 EMPTY LINES BETWEEN HEADING AND TEXT +LPP DEC 60 DATA LINES PER PAGE (WITHOUT HEADING ETC.) +LNW DEC 60 LINE LENGTH IN 2-CHAR WORDS +RS DEC 1 RIGHT DISTANCE FOR PAGE NUMBERING (2-CHAR WORDS) +* +* +O$LA DAC ** + LDA* O$LA BUFFER ADDRESS + STA LBUF STORE + LDA LINE LEFT LINE COUNTER + SZE LINES LEFT ON PAGE? + JMP PGOK YES, JUMP AWAY + JST FF CALL FORM FEED ROUTINE +PGOK LDA LPP LINES PER PAGE + TCA + CAS LINES ARE WE ON THE FIRST LINE? + JMP *+2 NO, WE ARE NOT. + JST NP MAKE HEADER, SPACING ETC. + NOP + IRS LINE BUMP COUNTER + NOP WE DON'T CONTROL THAT HERE ANYMORE + JST T1 PRINT THE LINE +LBUF DAC ** ADDRESS OF LINE BUFFER + JST T20 CARRIAGE RETURN + JST T30 LINE FEED + IRS O$LA MAKE RETURN ADDRESS + JMP* O$LA RETURN +* +* +O$LH DAC ** INIT HEADING + LDA* O$LH + STA P1 POINTER TO SOURCE + LDA HBUP + STA P2 POINTER TO TARGET + LDA LNW LINE LENGTH + TCA + STA CNT +HL1 LDA* P1 + STA* P2 + IRS P1 + IRS P2 + IRS CNT READY? + JMP HL1 NO + LDA LPP LINES PER PAGE + TCA RENEW + STA LINE THE LINE COUNTER + IRS O$LH ADJUST ADDRESS + CRA + STA LN1 CLEAR PAGE NUMBERING + STA LN2 CLEAR PAGE NUMBERING + STA LN3 CLEAR PAGE NUMBERING + JMP* O$LH RETURN +* +* +* +NP DAC ** PREPARE NEW PAGE + LDA SKP1 SPACES BEFORE HEADING + SNZ SPACING REQUIRED? + JMP NHDS NO SPACE BEFORE HEADING + TCA + STA CNT +S1 JST T30 LINE FEED + IRS CNT + JMP S1 +NHDS JST LNNR PREPARE LINE NUMBERING + JST T1 TYPE HBUF +HBUP DAC HBUF ADDRESS OF HEADER BUFFER + JST T20 CARRIAGE RETURN + JST T30 LINE FEED + LDA SKP2 NUMBER OF SPACES BEFORE TEXT + SNZ SPACING REQUIRED? + JMP NSPC NO, IT'S NOT. + TCA NEGATE + STA CNT TO COUNTER +SP1 JST T30 LINE FEED + IRS CNT DEC COUNTER, SKIP IF READY + JMP SP1 NOT READY +NSPC JMP* NP RETURN +* +* FORM FEED +FF DAC ** + JMP* FF RETURN +* +* +* VARIABLES +XR DEC 0 THE CALLER'S X REGISTER +CNT DEC 0 +HBP DAC HBUF +HBUF BCI 20, + BCI 20, + BCI 20, +P1 DEC 0 POINTER 1 +P2 DEC 0 POINTER 2 +LINE DEC -40 NEG LINES LEFT ON PAGE +PGS BCI 5, PAGE XXX +PGSP DAC PGS POINTER TO PGS +* +* +************************************************************ +* +* OUTPUT LINE +T1 DAC ** + STX XR SAVE CALLER'S INDEX REGISTER + LDA* T1 + ADD LNW LINE WIDTH + ADD ='40000 SET TAG + STA T6 + IRS T1 + LDA LNW LINE WIDTH + TCA NEGATE + STA 0 +T3 LDA* T6 + CAS ='120240 + JMP *+2 +* + JMP T8 +T4 JST T14 + IRS 0 + JMP T3 + LDX XR RESTORE CALLER'S INDEX REGISTER + JMP* T1 +T6 *** ** +* +* +T8 LDA 0 + STA T12 +T10 IRS 0 + JMP *+2 + JMP* T1 + LDA* T6 + CAS ='120240 + JMP *+2 + JMP T10 + LDA T12 + STA 0 + LDA ='120240 + JMP T4 +T12 *** ** +* +* +T14 DAC ** + ICA + STA DAT1 + CALL VPUNCH +DAT1 DEC 0 + ICA + STA DAT2 + CALL VPUNCH +DAT2 DEC 0 + JMP* T14 +**** +* +* CARRIAGE RETURN +T20 DAC * + LDA =32 LEERZEICHEN + STA DAT2 + CALL VPUNCH +DAT3 DEC 0 + JMP* T20 RETURN +* +* LINE FEED +T30 DAC ** + JMP* T30 +* +* PRINT LINE NUMBER TO BUFFER +LNNR DAC ** INCREMENT LINE NUMBER, PUT TO BUFFER + JST LNR INCREMENT DIGIT +LN1 DEC 0 LEAST SIGNIFICAND DIGIT + JMP RDY NO CARRY, COUNTING READY + JST LNR INCREMENT DIGIT +LN2 DEC 0 SECOND DIGIT + JMP RDY NO CARRY, COUNTING READY + JST LNR INCREMENT DIGIT +LN3 DEC 0 THIRT DIGIT + NOP NO CARRY, FINE +RDY NOP OVERFLOW, BUT WHAT SHOULD WE DO? +* +* + LDA LN3 LEFTMOST VALUE (100) + JST MDG CONVERT + LRR 8 SHIFT DOWN + LDA =32 SPACE + LLR 8 SHIFT BACK + STA PGS+3 STORE +* + LDA LN1 RIGHTMOST DIGIT (1) + ADD =48 ZERO CHARACTER + LRR 8 SHIFT AWAY + LDA LN2 MIDDLE VALUE (10) + JST MDG CONVERT + LLR 8 SHIFT UP AGAIN + STA PGS+4 STORE INTO POSITION +* +* + LDA HBP HEADER BUFFER ADDRESS + ADD LNW PAGE WIDTH + SUB RS RIGHT SPACING + ADD ='40000 SET INDEX BIT + STA P1 TO POINTER + LDA PGSP PAGE NUMBER BUFFER ADDRESS + ADD =5 ADD PAGE NUMBERING LENGTH + ADD ='40000 SET INDEX BIT + STA P2 TO POINTER + LDA =-5 + STA 0 +PP1 LDA* P2 + STA* P1 + IRS 0 + JMP PP1 + JMP* LNNR RETURN +* +* +MDG DAC ** MAKE DIGIT FROM A + SZE + JMP NZ NO ZERO + LDA =32 IS ZERO->SPACE + JMP* MDG RETURN +NZ ADD =48 THE ZERO CHARACTER + JMP* MDG +* +* +LNR DAC ** DIGIT SERVICE + IRS* LNR INCREMENT DIGIT + LDA* LNR LOAD NEW VALUE OF DIGIT + SUB =10 TEST IF OVERFLOW + SZE OVERFLOW? + JMP NOFL NO, TAKE FIRST RETURN + STA* LNR YES, CLEAR DIGIT (A WAS ZERO) + IRS LNR TALLY RETURN ADDRESS +NOFL IRS LNR TALLY RETURN ADDRESS + JMP* LNR +* + FIN WRITE OUT LITERALS +* +* PUH..... +* + END diff --git a/programs/punchomat/src/punchomat.f b/programs/punchomat/src/punchomat.f new file mode 100644 index 0000000..78b5474 --- /dev/null +++ b/programs/punchomat/src/punchomat.f @@ -0,0 +1,19 @@ +CCCCCC PUNCHOMAT-HAUPTPROGRAMM, 31.05.2005 +C + DIMENSION PUFF(40) +C + WRITE(1,1000) +1000 FORMAT(45HPHILIPP HACHTMANN'S COOL VISIBLE PUNCH DEMO! ) + WRITE(1,1001) +1001 FORMAT (10H27.05.2005) +C +C +666 WRITE (1, 1002) +1002 FORMAT (2HPP) + READ (1,1003) PUFF +1003 FORMAT (40A2) +1004 FORMAT (40A2) + WRITE (4,1004)PUFF + GO TO 666 + END +$0 diff --git a/programs/punchomat/src/test.sys b/programs/punchomat/src/test.sys new file mode 100644 index 0000000000000000000000000000000000000000..dbd6882d5b62c65bdf4ba1ea3e2fa7e475cd33ae GIT binary patch literal 288528 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 kfdEbUv-5iA5k{Zp1tOh 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 literal 0 HcmV?d00001 -- 2.32.0