; set console -n log=log.txt | |
; set debug -n debug.txt | |
; set debug stdout | |
; set cpu debug=cmd;data;detail | |
; params: %1 source program card deck to compile | |
; %2 input program data card deck (if empty, do not attach input card) | |
; %3 output program data card deck (if empty, attach deck_out.dck file) | |
set cpu 2k | |
set cpu StorageUnit | |
att cdp0 -n -q print.txt | |
; print FORTRANSIT source program | |
echo | |
carddeck -q print %1 | |
; load FORTRANSIT translator but do not execute it | |
echo *** | |
echo *** Load FORTRANSIT translator deck into drum | |
echo *** | |
att cdr1 -q -l fortransit/fortransit_translator.dck | |
d csw 70 1951 9999 | |
d ar 8000 | |
go | |
; attach and load reconstructed add function title deck | |
att cdr1 -q -l fortransit/fortransit_addfn.dck | |
d csw 70 1951 9999 | |
d ar 8000 | |
go | |
echo *** | |
echo *** Run FORTRANSIT translator | |
echo *** | |
; Now put source cards in reader and start translator (phase I) | |
att cdr1 -q %1 | |
set cdr1 wiring=fortransit | |
att cdp1 -n -q deck_it.dck | |
set cdp1 echo, print, wiring=fortransit | |
d csw 00 0000 1999 | |
d ar 8000 | |
go | |
; check if programed stop because an error is detected | |
if not prop=01 goto translate_ok1 | |
echo | |
echo *** (translation error code in Address Register AR) | |
echo | |
ex ar | |
echo | |
echo *** (show last three source fortransit cards processed) | |
echo | |
carddeck -q echolast 3 cdr1 | |
goto end | |
:translate_ok1 | |
; check if programed stop because normal termination | |
if prop=70 if ar=1951 goto translate_ok2 | |
goto end | |
:translate_ok2 | |
; separate last card (header card), and put it in the | |
; top of deck | |
carddeck -q split -1 cdp1 deck_it.dck deck_it_header.dck | |
carddeck -q join deck_it_header.dck deck_it.dck as deck_it.dck | |
det cdr1 | |
; load IT compiler but do not execute it | |
echo *** | |
echo *** Load IT compiler deck into drum | |
echo *** | |
att cdr1 -q -l fortransit/it_compiler.dck | |
d csw 70 1951 9999 | |
d ar 8000 | |
go | |
echo *** | |
echo *** Run IT compiler | |
echo *** | |
; Now put IT source cards in reader and start compiler (phase II) | |
att cdr1 -q deck_it.dck | |
att cdp1 -n -q deck_out.dck | |
d csw 00 0000 1999 | |
d ar 8000 | |
go | |
; check if programed stop because an error is detected | |
if not prop=01 if not ar=1234 goto compile_ok1 | |
echo | |
echo *** (compilation error code in Upper ACC) | |
echo | |
ex accup | |
goto end | |
:compile_ok1 | |
; check if programed stop because normal termination | |
if prop=70 if ar=1951 goto compile_ok2 | |
goto end | |
:compile_ok2 | |
; separate first card (reservation card), from | |
; generated soap source code deck | |
carddeck -q split 1 cdp1 deck_res.dck deck_soap.dck | |
det cdr1 | |
; Load soap deck into drum (1 word per card format), but does not execute it | |
echo *** | |
echo *** Load SOAP deck into drum | |
echo *** | |
att cdr1 -q -l fortransit/soapII.dck | |
d csw 7019519999 | |
d ar 8000 | |
go | |
; create the phase III deck with | |
; - entry point cards for subroutines | |
; - reservation cards from phase II | |
; - package reservation cards | |
; - subroutines in symbolic SOAP format (if any) | |
; - rest of compilation output from phase II | |
carddeck -q join fortransit/pack_entry_src.txt deck_res.dck fortransit/pack_res2.txt deck_soap.dck as deck_soap.dck | |
echo *** | |
echo *** Run SOAP assembler | |
echo *** | |
att cdr1 deck_soap.dck | |
set cdr1 wiring=soap | |
att cdp1 -n -q deck_out.dck | |
set cdp1 echo, print, wiring=soap | |
d ar 1000 | |
go | |
; check if programed stop because an error is detected | |
if not prop=01 goto assemble_ok1 | |
echo | |
echo *** (assembling error code in AR) | |
echo | |
ex ar | |
goto end | |
:assemble_ok1 | |
; check if programed stop because normal termination | |
if prop=70 if ar=1951 goto assemble_ok2 | |
goto end | |
:assemble_ok2 | |
det cdr1 | |
det cdp1 | |
; create object program deck with | |
; - package cards | |
; - assembled program cards from phase III | |
carddeck -q join fortransit/pack.dck deck_out.dck as deck_out.dck | |
echo *** | |
echo *** Read Object Program Deck | |
echo *** | |
; Load assembled deck into drum | |
; -l switch allows to load the symbolic info so debug cmd info will show | |
; soap source code read from card. | |
set cdr1 wiring=8WORD | |
att cdr1 -l deck_out.dck | |
d csw 7019519999 | |
d ar 8000 | |
go | |
; attach input and output data deck | |
det cdr1 | |
if "%2" == "" goto run1 | |
att cdr1 -q %2 | |
set cdr1 wiring=fortransit | |
:run1 | |
if "%3" != "" att cdp1 -n -q %3 | |
if "%3" == "" att cdp1 -n -q deck_out.dck | |
set cdp1 echo, print, wiring=fortransit | |
; Now execute the loaded program object deck | |
echo *** | |
echo *** Run Program | |
echo *** | |
; set csw negative to activate conditional punch statement | |
; normal program termination will halt cpu at AR=9999 | |
d csw -01 0000 9999 | |
d ar 1999 | |
go | |
; clean up | |
del deck_it_header.dck | |
del deck_it.dck | |
del deck_res.dck | |
del deck_soap.dck | |
:end |