From f6408e16cb1aaf7f2583c02cdca506f2fe24b993 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Fri, 1 May 2020 15:44:30 +0200 Subject: [PATCH] Reconstruct SSV 22 source code. The file IMLAC; SSV 52 dated 1973-01-07 was edited to match the Imlac block loader format file http://www.ubanproductions.com/Imlac/ssv, which claims to be SSV 22. SSVMSE 38 from 1977-12-13 was also helpful in the process. IMSRC; SSVCHR 22 is entirely from disassembly. The original file would have been machine generated by SYMFOR. --- bin/imlac/_prgm_.normal | 1 - bin/imlac/ssv.22 | 165 ----- build/misc.tcl | 10 + doc/programs.md | 1 + src/imsrc/ssv.chars | 1 + src/imsrc/ssv22.1 | 1564 +++++++++++++++++++++++++++++++++++++++ src/imsrc/ssvchr.22 | 829 +++++++++++++++++++++ 7 files changed, 2405 insertions(+), 166 deletions(-) delete mode 120000 bin/imlac/_prgm_.normal delete mode 100644 bin/imlac/ssv.22 create mode 120000 src/imsrc/ssv.chars create mode 100644 src/imsrc/ssv22.1 create mode 100644 src/imsrc/ssvchr.22 diff --git a/bin/imlac/_prgm_.normal b/bin/imlac/_prgm_.normal deleted file mode 120000 index 716e23f4..00000000 --- a/bin/imlac/_prgm_.normal +++ /dev/null @@ -1 +0,0 @@ -imlac/ssv.22 \ No newline at end of file diff --git a/bin/imlac/ssv.22 b/bin/imlac/ssv.22 deleted file mode 100644 index 6ecf752e..00000000 --- a/bin/imlac/ssv.22 +++ /dev/null @@ -1,165 +0,0 @@ -!blk ldr! - @BAJH@@IBGOLBGOMCONGCONGH@@FBGONCOMOGOOHAGLL@@@@BGOOCOMOJGOOCOMHCGOO - CGONAGLMCOMOGGOLHD@AAGL@@@@@@@@@H@@HFOOL@D@DH@@DBGOLIGMH@@@@H@@IBGOM - CONGCONGCONGCONGIGMO@@@@@DB@AGNHH@@I@BAKBGKODOOIGOOJAGNHFGKODOOKBOOM - @F@C@F@AEGOMBGOMIGNGOOOO@@G@@@D@@@@O@@@@@@@@@@@@@@@@OOL@ - - @D@@@AB@FB@FAAB@FCA@DHEGAN@B@@AD@E@HAOOOBE@GAN@@D@A@FLA@FG@@@@@BLD@B - CI@B@C@FD@I@DBFEKOCHDBC@FDA@EDH@@A@BAAGMKLA@EDHH@AB@FDFEL@B@GBA@ELC@ - FEA@ELHH@JB@FEFF@MEMLABF@MCIEAF@FCEHNHAN@@EN@F@AF@FB@BGBI@@@@@@@@@@@ - @@@@OOOF@@@@CKLCCKMGCKNOCHGGA@FO@MLBCHDB@B@J@H@B@BFA@BGBHDA@CKOKHDB@ - CLKAA@GB@@@@H@@AJELCJ@AEBEIOLFNIAN@@GLBEJ@FELDJELEF@AECJ@CJELFFELGJE - LHFELIJELJF@AEBEJABEJBFELEBEJCFELCBEJDI@GG@@@@CHKNA@HOI@HN@@@@CHN@A@ - ICI@IB@@@@CHIKCHN@CHIKCHLFAN@@IJI@IF@@@@HH@ABA@ACHN@A@INH@@ABA@AI@IK - @@@@HH@ABA@ACHKNA@JFH@@ABA@ACHKNI@JCI@JC@@@@HH@ABA@ACHKNA@K@H@@ABA@A - CHKNI@JMHH@AFMJCODJHAN@@KHBEJEFELKOMJECI@BCKAII@JM@@@@@H@AFMJCBEJEH@ - @DBEJF@H@AFMJBBEJGNEJBHD@AA@LNGMLLA@MFCA@AA@M@C@KNI@KNCJ@NGELM@D@BA@ - MFCK@HCJLOKA@LAN@@MFFEJGCJ@CJEJFNEJBJEJCFELDJEJECEJBCEJCI@KN@@@@HH@A - FMJCBEJEHH@AFMJBBEJGNEJEHD@AA@NNGMLLA@OGCA@AA@O@C@N@I@N@CJAEGELNHD@B - A@OFF@HBAN@@ODCJMLCJOINEJEJEJGFEJGBEJBCJ@CJEJCFELDJEJEFEJEBEJCI@N@@@ - @@@@@@BMJBGELOBMJBJEJBFEJCB@@HFEJBCJ@CJ@@HCIBCCHKNIA@B@@@@NEJBHD@ACL - COAN@AABIA@OGMLLAAALCJAMGMM@AAALCK@HAAALCJMLH@@@CEJBFEJCB@@HFEJBCJ@C - J@@HIA@O@@@@HH@EFMJBGEJCBEJHGMMAAABMFEKAHD@A@CLICEJHIABCFEKAKEOIAN@A - C@HD@A@CLIHH@JBEKMFELCB@@HB@@IN@@HGMLLAACGCEKMAACGN@@HJ@@IGMLDAACLN@ - @HJ@@INELJCJ@IG@@HFH@ICJ@CJELJFEJDG@@HFH@IBEJDFEJCG@@HCADGAN@ADNFH@I - BEJCIABC@@@@H@@ABEJIFEMBB@@OHH@DBEJJ@IGGBEJKHH@DFMJBGEJCBEJLH@@ABMJL - OEJK@D@BAAFECEJLAAF@NMJKBMJL@D@AAAFNGMJIAAFOFEMCMMJCAN@AFLJ@@OAAGCCE - JIFMMDBEJMNEJMJ@@OCEJKCEJJAAENIAEA@CNH@@FD@@@J@@@A@@@@CJLDBEJNCJLDBE - JO@H@AGEJOFMJ@HD@AAAIB@D@BAAHMH@@FBEK@CHIFDHFMAN@AHJCEK@AAHIAAICBEK@ - CHJMCEK@AAHNAAICCHIK@H@AGEJNHD@AIAGKBEK@NEJBGMLKAAILAAJBHD@AAAJBCHKN - CEK@AAIHIAGKFEMECI@BCEK@AAJBIAGK@@@@JFNJAN@AJHCHIKCILGIAJG@@@@CIJGCI - @OCI@OIAJK@@@@CHN@AAKDIAK@CI@OAAKA@@@@NEJBHD@AIAKFCI@OAAKG@@@@CHN@AA - L@IAKLNEJBGMLLAALECHKNIAKLCI@O@CKMAN@ALFAAKM@@@@NEJBHD@AIALGFEJBB@@H - N@@HGMLLAAMAIALGCI@OAALH@@@@FEKA@D@AAAMJCHN@CI@OIAMC@HGOCIOBIAMC@@@@ - BMKAHD@BAANDBMKACIOBIAMMNOLEAN@ANDBMKACEKBAANKBEKCFEMCCI@BFEKCGMMFAA - O@CLKHCKAIIAMMCLKHIAMM@@@@@DD@AAOC@BBCIAOB@@@@FELKCI@BCKAICHIFIAOG@@ - @@FEJDH@@DCJ@CJELJAKLJAN@B@BIAOM@@@@GEMGHD@BFMMHFMMHIB@C@@@@DMMI@D@B - EMMJIB@I@@@@HHAENMLHJELHCEJ@FEJ@IB@N@@@@@HAENMLHJELHHH@AFMJ@BEJ@IBAE - @@@@HH@AFMIOLBN@AN@BB@BEIOIBAM@@@@F@EDEMMKB@EDFEMCBF@MIBBB@@@@CHIBCM - FG@D@AABBOIBBICIOBGMMFABCECJLDGMMLABCBCHKNABBK@@@@CJBICHGGIBCG@@@@FE - KA@D@BB@MLAN@BCNIBCK@H@MCIMMCHN@ABDDABDGNEJBGMMCABDACHKNCMFGCIOBGMMF - ABDGCHKNIBCK@@@@CHIBCMFG@D@AABEDIBDNGMMMCJEHCHKNABE@@@@@BEKCHOOOBEKM - JOLHAN@BEL@BAJCEKMABELFEKCCIOBIBEH@@@@H@@ABEKDFEJCBEJEHH@AFMJEBEJENE - JEHD@AABGOGMLKABG@ABGOGMLLABGCABFGGMMCABGFABFGCJHHABGMFEKDDMMNBMDLAN - @BGJFMMOBEKDABFGCEKDABFGFEKDDMMNGEN@HD@BIBFB@FCBFMNACI@BIBFB@@@@BEKC - DMNBGENC@D@BABIAGEND@D@BCBHHFEKCIBHH@@@@NEJBGMLKABJACJFBLBHNAN@BIHFE - KDGEND@D@BABIGFENECI@BFEMECI@BIBICCHKNABIDABIG@@@@CJLDFMNFBEJEGENGHD - @BIBJDNEJEHD@AIBJDBEJEKMJEIBJD@@@@HCBKHBLKH@IBH@IBODJCAN@BKFH@IBHCBN - HCLIHCLC@@@@CJLDBEJEDMNHHD@AABLBFEJEIBKJFEJEADKF@@@@@DB@ABLEH@@A@BAK - DMNIIBLD@@@@FENJCI@BIBLK@@@@HH@JBEKMCEJDNEJDCGIGAN@BMDGMLLABMBCJAMCJ - AECEKMABMBCIOMIBLO@@@@HH@JBEKMNEJD@D@AABNDCBMLIBMLHH@AFMJDBEJDNEJDHD - @AABNNGMLLABNDCEKMABNDCIOM@H@JFMIOBEIOM@JMAN@BOB@H@JFMJ@BEJ@HHMBNMLH - JELHIBML@@@@HH@JBEKMHH@AFMJABEJANEJAGMLLABOLCJAMCEKMABOL@H@AJEJAIBOI - @@@@NEJA@D@AAC@NCC@HIC@HFELLJEJAAKJDAN@CA@@H@JFMIOBEIOCEJANEJADMNK@D - @AACACIC@H@@@@FELLCI@BCEIOFEIOGMNLICAIFEJ@GENM@D@BACBFCJLOICAICJOIIC - AI@@@@@CLIICBH@@@@@BGAA@B@CAMKAN@CBN@@@@@BGAIEMG@@@@NENNEMNOJENNICCA - GOOIACBBBCL@GOOMB@@@@HB@@@@@CJKJDMO@@FAABEKEH@@A@D@DHH@ABEKFCJKJBEKG - DMOA@D@AHH@ABEKHFEKGB@DCAN@CDLDMOB@FBC@FBBEEKEDMOCBEKEICCL@@@@CEKFAC - EIFEKEH@@FBEKE@J@@FMKEBEKEICEC@@@@CKCLCKECEMMGBEKICKCLCKECEMODBEKJFE - OECI@BFEKICI@BFNBAAN@CFJFEKJCI@BACENICEM@@@@CKCLBEKIH@@ACEKHFEODBCKI - FEOFCEKFH@@ABCKJCKCLBEKJFEOGCEKHH@@AECKIBCKIFEODCEKFH@@AECKJBCKJCKIL - ACFO@@@@OKHBAN@CHHFEOFBCKICJKJ@FAABEKIH@@AHD@DACIAFEOFBCKJCJKJ@FAABE - KJHD@DACIJFEODECKJBCKJCKILACHH@@@@FEKJGEKIBCKH@D@A@D@BACJKH@@FBCKHFE - KIN@GNAN@CJFBMKJBEKIFEMGECKJBCKJFCKHDMNBEEOFCI@BFEKIECKIEEOHCI@BFEKJ - ECKJEEOHCI@BICIL@@@@@@@@@@@@@@@@FEKA@D@AACLACKLCICKKCKLIICKK@@@@KBDB - AN@CLDHH@ABEKAFEMCJEOIICLC@@@@H@@ABEKAFEOJJEOIICLI@@@@FEKKHD@AACMECK - MOICLOCKMGICLO@@@@@HB@BEKKFEMCJEOKFEOLJEOMICMG@@@@H@@ABEKKJNMCAN@CNB - FEONJEOKFEMCJEOMICMO@@@@F@DJ@D@BACNMCKOEICNGCKNOICNG@@@@FEOOB@DJFEMC - JF@@ICNO@@@@FEOHB@DJFF@AJF@@ICOE@@@@H@@I@BACBEKLHHA@COLHAN@D@@B@FDFF - @BB@GB@LBNB@@HHHDABEKMFEKLCMIBADBGADBEDN@CHD@AADABFEKLDMOBCIOBICOKFE - KLDN@DGF@E@D@BICOKGEOAHD@BADALDMO@ADBEGELO@D@BF@AFAN@DANICOKGF@FHD@B - ICOKFN@GDMNIEMKKCIMMICOKCLBIICOK@@@@BDBNKLBNIDBIIDBI@@@@@@HBHBCK@BHD - HAKF@@HDH@JC@@HEH@KN@BHEHALG@BHFHAK@@@HFODLEAN@DCLH@IF@BHHHAKL@@HHH@ - N@@CHIHCBK@BHIH@FF@AHIHCLC@@HJ@@@J@AHJH@JM@@HL@@@L@AHLHCKK@@HM@@@M@A - HMHAOG@AHNHBDN@BHNHBCG@@HNHBBI@@HOBMNFAN@DEJH@HN@AHOH@IB@AIHHAJG@@IH - HBBB@BIHH@GG@AIIHCNG@@IIHCLO@@IJHAMC@@IK@@AK@CIKHCBN@@ILHAJK@@IMHBIC - @AIMHCCA@@IN@@AO@BIOHAMC@@IOJOJDAN@DGH@@@I@AJ@@@B@@BJ@@@B@@BJL@@EK@B - JM@@EO@BJN@@EM@BJO@@EL@AK@@@@H@BK@@@GL@BKF@@GN@BKG@@F@@BKH@@GK@BKI@@ - GM@BKJ@@EN@BKK@@D@@CLABLANAN@DIF@@EK@CLB@@EL@CLC@@EM@CLD@@EN@CLE@@EO - @CLF@@D@@CLL@@AL@CLM@@AM@CLN@@AN@CLO@@AO@CM@@@@@@@OO@@GO@AOOHAMC@COO - H@GG@@@@HH@ABEKBMOMKAN@DKDH@@I@BAKCLKHIDKA@@@@DMNIBEKNFEKAHD@BADLC@L - MIB@@HHHAGBEKMADLG@LMGB@@HHHADBEKMFEKNCMIBADMFADMDGEOA@D@BIDKAGF@HHD - @BIDKAFN@IFHD@AN@DMBBEJENEJECI@BIDKHCLBIIDKH@@GOHA@O@@@AHBJD@@@GHCBH - @@@HEFEI@@@IHBFB@@@JHCAI@@@KH@JM@@@MEFFA@@@NHAGK@@@OH@N@@@A@HAKF@@AA - HALGFJGJAN@DO@@@ABH@GG@@ACHAJG@@ADH@IB@@AEH@HN@@AHHA@O@@AIH@KN@@AJH@ - IF@@AKEFFC@@@LH@GG@@AMHCEM@@ANHCFN@@AOHCHGEFFFEFFIEFG@EFGFEFHBEFI@NN - KEAN@E@NEFIOEFJKEFK@EFKGEFKOEFLGEFLMEFMCEFMGEFMMEFNBEFNNEFOGEG@AEG@K - EGADEGAOEGBLEGCDEGDAEGDLEGEEEGENEGFDEGFJEGG@EGGIEGHGEGI@EGILCDJEAN@E - BLEGJEEGJOEGKIEGLBEGLLEGMEEGMNEGNGEGNOEGOFEGONEH@GEHAAEHAJEHBDEHBNEH - CIEHDBEHDLEHEEEHF@EHFGEHFOEHGHEHGOEHHEEHHMEHIBEHIFEHIKEDLDAN@EDJEHJF - EHKAEHKIEHLDEHLMEHMEEHMOEHNGEHNNEHOFEHOOEI@FEI@NEIAEEIANEIBHEICCEICI - EIDAEIDIEIEBEIEJEIFCEIFJEIGCEIGJEIHCEIHKEIIE@@@@AHIGAN@EFHNEJBGMMCAE - FMCHKNAEFHCJHHAEGA@H@IAEI@GMNAAEGE@H@HAEI@GMLLAEGI@H@JAEI@GMLKAEGM@H - @MAEI@GN@JAEHA@HAKAEI@BEKN@M@GB@@HHHEOBEKMOIG@AI@EHFFEKNOH@HAEHJAEHN - CEKMAEHGH@@AAEI@HLNHFH@HBEKNIEFG@@@@OH@HAEIFAEIKC@@HCEKMAEICCEIBAEIM - N@@HHD@BCEIBIEIBCBKNAN@EKO@IIKAD@AFNAD@@@@@IMKEF@M@IML@IMMBCL@@IMDFI - ML@IMJEFFAEFEL@@BB@@@K@@@A@@BA@AOC@IJM@H@@@EAHEFFF@@@MA@@@G@@@HOOOI@ - @@@@@I@@@FELNDAN@EMM@@@J@@GH@@@H@@F@EFEI@OOO@FDA@@AHEGEE@BKA@BKJOON@ - @@GOEFALOOON@@BL@@AF@IIMEKCF@@CO@@B@@@AO@COOB@@@GOOID@@@F@@@H@@@@IKD - FIKIKMMAA@@EOK@ILBFFAD@F@MFILIC@FD@ILIFIMBHDA@@B@@@@OO@@J@@@CJ@@OK@@ - EO@EFGEFFCFHKJAN@F@M@H@@C@HEHGMHMHMHHCI@HAD@FFAIC@HELGMHMHMHLCI@HAD@ - C@KHKHKHK@F@EFB@EFB@EFB@@HB@C@KOKOK@MHMHMHMHKHKHLCLCLCLCLCLCLCLCKHKH - MHMHKIOFAN@FBKMHMHKOJOHGHGHGHGF@F@@H@@C@JHOGOGM@M@M@M@OCOCHHF@C@H@H@ - H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@H@F@A@GHFFCGA@M@FFCGAABHFFCGAAH@FFCGNH - D@AN@FDIAAMHFFCGABC@FFCGABHHFFCGABN@FFCGACCHFFCGACI@FFCGACNHFFCGADD@ - FFCGC@K@KHKHKHF@C@HGHGHGHGHGHGHGF@F@A@B@@HB@EH@GEFEIFFHBC@IHOAANAN@F - FGIHIHI@F@C@HKHKHKHKLGLGLGHGL@IHIHHHF@C@HKHKHCHCLOICLOIOIGHGF@C@LKLK - LKLKKGJMMHM@M@HBHBNONONONOKCKAMHM@M@IGIEF@C@HBMFM@M@MBDOOJAN@FHELBOA - OAOAOALBMBM@M@MFKKJJLGLGLGLGLGLGIKI@I@F@C@MCMCMCMCKNJHNINHNMLFLMLHLI - LBHGHGLILHLMLFNMNHNILBININHHF@F@C@HBLBMCMCLANINHKHIEAN@FJCNMLEMGMGMG - HKOFOFO@OBINIHIHI@F@F@C@IKHCHCMCIOIOHGHGF@C@IKIKHCHCOENNLGLGLNMEIHI@ - F@C@HKHKHCHCMELNLGLGNNOEIHIHIHF@F@C@ICMCMC@AGLAN@FLAK@K@MGMGHKOHOHIO - IOIHHHF@C@IJHILCLCKOMHMHIOHOF@F@C@IOHHLKLANHLELHIHIHF@F@C@HKHKM@M@IO - IGF@C@I@I@LALHLENHIHIHHHF@F@C@MCMCMCEJKBAN@FMOMCIOHGHGHGF@C@HCLCLCMC - M@M@MGLGLGOGO@O@OCHGMCMCMCMCIOHGHGHGF@C@IKHCHBHBLJLHLGLGLGLGK@M@M@I@ - I@F@F@C@HCHCHCMCM@M@MGLFOEOEOEM@MHAN@FOMOELGMHMHM@IHF@F@C@HCMGM@M@MC - LAOJMJLAOCO@O@OGIOIOIOI@F@F@C@IHI@LCLCLCLCNHOGOGLEMHMHM@IOHFF@F@C@HB - MFM@M@MBLBLBOBOHOHLBLBMHBC@FAN@GAKM@M@IOHOHGHGF@F@C@I@OBLCLBLBMCM@M@ - MGKNKNK@MBM@M@MFLGOFO@O@IHIHIHF@F@C@HCHCHCLKMHM@M@NONONONOIHI@I@F@C@ - I@OBLBMBM@M@MBLBOBKNAOAN@GCIO@O@OFLFMFI@I@MFLFOFO@O@IHIHIHF@C@HCMGM@ - M@MCLCLBLBOBO@O@OFLGMFM@M@MBIOHFHFF@C@I@I@LALHLENHHBHBLALHLENHIOIMHH - F@F@C@IOHHLKJKCFAN@GEGLANHLELHHBHBLANHLELHININF@F@C@IIIIOBOBMBMBIOIG - HFHFF@C@ICHBM@M@HBO@O@IOIOIMF@C@IBMBMBOBOBIOIOIOHEF@F@C@HCHCHCMCM@M@ - MGLFOFJFBEAN@GGEOFLEHFL@IHI@I@F@C@IKIKIAOAO@OELGMEM@MALCLANKNIO@O@NM - NOLFLFLOLMM@M@MBINF@C@LKLKLKLKLOLOLOLOJKOHOHIOIHIHHHF@F@C@LCLCLCLCMH - DDADAN@GICM@MNLFONOHO@IHI@MNLFONOHO@IHIHIHI@F@C@I@OCLCLCMCM@M@MGHGHG - OGO@O@IHIHIHF@C@LCLCLCLCM@M@MEMGLFLFOGOEO@O@IHIHIHI@F@C@LCLCLCHG@IAN - @GKALCMHMHM@KGJOOHO@HGHGMHMHM@IHF@F@C@LCLCLCLCMHMHM@KOHGOHO@IOIOIHI@ - F@F@C@I@OCLCLCMCM@M@MGKOMHLGOGO@O@IHIHIHF@F@C@LCLCLCLCHGLCNOAN@GLOHG - MHMHM@LCLCHGHGLGLGIHF@C@I@M@M@K@LCLCLCLCI@O@O@IOIOIOHGF@F@C@HJLNM@LJ - LCLCLBLBI@O@OHIOIOIOHGF@F@C@LCLCLCLCIHIHI@OOOOOFIBONDDAN@GNMMOMOIHF@ - C@HCHCHCHCLGLGLGLGMHMHM@IHF@C@LCLCLCLCMGMGMCMCLGLGLGLGIHF@F@C@LCLCLC - LCMGMGMGMGLCLCLCLCIOHGHGHGF@C@HCLCLCMCM@M@MGIKMAAN@H@KLGLGOGO@O@OCIO - IHIHI@F@F@C@LCLCLCLCMHM@MNLFONOHO@IOIOIHI@F@F@C@HCLCLCMCM@M@MGLGLGOG - O@O@OCIHI@MOIHF@F@C@LCLCLCLCMHM@MNLFONIMEHAN@HBIOHO@IHI@LNLNLNIHF@F@ - C@HBMFM@M@MBLBOAOAOAOALBMBM@M@MFIOHGHFHFF@F@C@I@I@LCLCLCLCI@I@OHOHO@ - IOIOIOIGF@F@C@HCHCHCHCLGLGLGMGM@HAKLAN@HDGM@MCLCLCLCIOHGHGHGF@C@HCHC - HCHCLOLOLOLOLKLKLKLKIOHGHGHGF@C@HCHCHCHCLGLGLGMGLHLKLOLHMCLCLCLCIOHG - HGHGF@C@MCMCMCMCKHKHK@MGMGE@AKAN@HFEMGMGIHF@C@I@I@LCLCMCMCKHKHK@MGMG - IOIOHHF@C@HCHCHCHCMHMHM@OGOGOGOGMHMHM@IHF@F@C@IKIKHCHCOHLGLGLGLGMHIH - I@F@C@HCHCHCHCMGMGMGNDFIAN@HHCMGIHF@F@C@ICHCHCHCMHLGLGLGLGOHIHIHIHF@ - F@C@HKHCHCMJMNIOHOHGF@C@JNMHMHMHM@HJF@C@IKHCHCHCMGIOIOHGF@C@HKHCHALI - M@M@LMLGLFLFHADOHJAN@HJAOEO@OALCMAM@MEIOHMF@C@HHLCLCLCLBHGHFMBM@MFLF - LFOFO@OBINIHIHHHF@F@C@IKIKHHOBO@OFLFLFMFM@MBINHHF@F@C@IKIKHKHBLGLGLG - LFHBOFO@GEKFAN@HKOOBLBLBMBM@MFIOHOF@F@C@HJHBMHMHLBOBO@OFLFLFMFM@MBIE - IEF@F@C@HHLCLCLCMBM@MFLEKNOHIOIOI@I@F@C@HMMFM@MBLCLCLCHFOBO@OFLFLFMF - M@KDHEAN@HMMMBIEIEF@C@HHLCLCLCLBHGHFMBM@MFLGLGIHHHF@C@IMI@NILCLCLBHB - L@IOIOHOHEF@C@IELNLHLJLCLCLCHBL@IOIOHFHFF@F@C@HHLCLCLCLBIOIHOEOEKCDD - AN@HOKOEIAMGMGI@I@F@F@C@IKHKHCHBLGLGLGLFLMIIIHF@F@C@LCLBLBLILHMGMCLH - LMLGLFLFIHF@F@C@HHLCLCLBHFMBM@MFLGLGIHHHF@C@HJLBLBMBM@MFLFAOLIAN@IAI - LFOFO@OBINIHI@I@F@F@C@HOLCLCLCLBHFMBM@MFLFLFOFO@OBINIHI@I@F@C@HJLBLB - MBM@MFHBLGLGLGLFHCHBOFO@OBINIHI@I@F@C@HHLCLCLBHFMBM@GLE@AN@ICGMFIOHO - F@C@HJMFM@MBLAOIOILAMBM@MFIOHOF@F@C@IKIKHBO@O@ICLGLGLGLFLMIIIHF@F@C@ - HKHCHBLGLGMFM@MBLCLCHGHGLFI@I@F@F@C@HKHCHBLFLOHBILAN@IEELOM@LKLKLBIO - HOHFF@F@C@HCHCHBLGLGLNLHMCMGLHLJLCLCIOHGHFF@C@HHMCMBMCKHKHMGMFMGI@I@ - F@F@C@HMMFM@MBLCLCLCKHKHLGLGMFM@MBINHHF@LGOBAN@IGCC@HKHCHBMHMHOGOFOG - MHMHI@I@F@C@IKIKHCHCNHNMLFLFNMLMLFLFLMLHIHI@F@C@HKHKHKHKHCLGLGLGLGLG - LGIKIHHHF@C@ICHCHCHCLHLMLFLFLMNMLFEEAGAN@IIALFNMNHIHIHIHF@F@C@HKHCHC - MBMFMBIOHOHGHFF@@H@A@L@E@H@@GOOIBCN@A@B@EHBNEHBNEHDLEFMGEFOGEFOGGOOI - A@N@EGILEGI@EHDBEGKIEGFD@H@@DDLBAN@IJO@H@@@H@@@H@@GOOIAAJ@@H@@EHCIEH - CIEHFGFIKMEGJOEGJEEGMEEHCIEFFFEGOFEH@GEGJEEGJOFILIGOOIABF@EFMCEHDBEG - ILEFMC@H@@GOOIABK@EFMCHDGBAA@ILMEGHGEHDBEHCIEH@GEFMCGOOIA@@@@@@@EGFD - EGFJGOOIA@B@BCL@@@@@@@@@@@@@@@@@JIGO@BCOLKIGLL@@FGIHCCOOOOOO - PEACE WITH HONOR - KILL - diff --git a/build/misc.tcl b/build/misc.tcl index 965c1da6..9b9a88de 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -1360,6 +1360,16 @@ expect ":KILL" respond "*" ":midas sys2; ts tvedit_sysen2; tvedit\r" expect ":KILL" +# SSV 22, Imlac scroll saver +respond "*" ":midas;324 sysbin;_imsrc; ssv22\r" +expect ":KILL" +respond "*" ":imtran\r" +respond "@" "imlac; ssv22 iml_sysbin; ssv22 bin\r" +respond "@" "\021" +expect ":KILL" +respond "*" ":link imlac; .prgm. normal, imlac; ssv22 iml\r" +type ":vk\r" + # Assemble SSV4. respond "*" ":midas imlac; ts assv4_assv4\r" expect ":KILL" diff --git a/doc/programs.md b/doc/programs.md index b9adf6b2..9823aa83 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -301,6 +301,7 @@ - SPROUTS, topological game invented by Conway. - SRCCOM, compares/merges source files, and compares binary files. - SRDATE, set reference date on a file. +- SSV, scroll saver for Imlac PDS-1. - SSV4, SSV for Imlac PDS-4. - STINK, linker. - STINKR, new linker (binary only). diff --git a/src/imsrc/ssv.chars b/src/imsrc/ssv.chars new file mode 120000 index 00000000..2f54ab75 --- /dev/null +++ b/src/imsrc/ssv.chars @@ -0,0 +1 @@ +imsrc/ssvchr.22 \ No newline at end of file diff --git a/src/imsrc/ssv22.1 b/src/imsrc/ssv22.1 new file mode 100644 index 00000000..0e1a5098 --- /dev/null +++ b/src/imsrc/ssv22.1 @@ -0,0 +1,1564 @@ +TITLE SCROLL SAVER + +; Written for PDS-1D compatible IMLACs, uses DMS display addressing +; modification. Includes ARDS graphics simulator. + +; This source code was reconstructed from an Imlac block loader file +; from Purdue University, by taking the ML file IMLAC; SSV 52 dated +; 1973-01-07 and editing it to match. + +; 22 (06/07/74) minor fixes to PXMIT and SPXMIT. + +%VERSIO==22. + + .INSRT IMSRC;IMDEFS > + .ADDR.=1 + REPT=2000 + CTRL=1000 + SHIFT=400 + + LEFT=40 ; LEFTMOST CHARACTER POSITION + TOP=1700 ; TOPMOST CHARACTER POSITION + + PXACK=6 ; IMEDIT'S ACK CHARACTER + CRIKY=17777 ; HIGH DISPLAY LIST ADDRESS + +; MACRO FOR DISPATCH TABLES + DEFINE DSP DISCOD,DISGO + DISCOD + DISGO + TERMIN + + LOC 1 + DAC ASAVE + RAR 1 + DAC LSAVE ; SAVE ON INTERRUPT + JMP AFT100 + +; LOCATIONS 24 THROUGH 37 ARE DEFINED TO CONTAIN +; CONSTANTS AND VARIABLES OF INTEREST TO PROGRAMS THAT +; MIGHT BE OVERLAID ON TOP OF SSV + LOC 24 + +JMSTAB: LIST40 ; 24/ TABLE OF CHARACTER DJMSS +BUFEND: CRIKY ; 25/ END OF SSVS DISPLAY BUFFER + +; PROGRAM START UP LOCATIONS + LOC 100 + + JMP GO100 ; NON ERASING STARTUP + JMP INIT ; ERASING STARTUP + +DSTART: 0 ; RESTART DISPLAY (ONLY ENABLED INTERRUPT) + DCF + SCF + DLA + DON + I JMP DSTART + +; here for refresh interrupt +AFT100: LAC [DORIG] + JMS DSTART + +TAUTO: ISZ TICKER ; TICK BOMB + JMP GLV + CLA ; IT EXPLODED HERE + KRB ; GET CURRENT KEYBOARD + SAM KCHAR ; SEE IF KEY HELD DOWN LONG ENOUGH + JMP GLV ; NO + LWC 1 + DAC TICKER ; YES SET 10 PER SECOND REPEAT ONCE IT BLOWS UP + LAC [JMP CONTIN] + DAC LOOPY ; IMPURE DISPATCH, THE ONLY WAY !! +GLV: JMP RESTRZ + +DUD: ISZ TWITCH ; TICK THE TWITCHY + JMP RESTRZ ; NORMAL RESTORE + LWC 12 + DAC TWITCH ; RESET THE TWITCH TICKER + LAC DCURT ; TWITCH THE TWTICHY + XOR [DJMP DFORM#DNOP,] + DAC DCURT +RESTRZ: JMS NUMZIT ; DISPLAY LENGTH OF BUFFER LEFT + LAC LSAVE ; RESTORE PROGRAM CONTROL + RAL 1 + LAC ASAVE + ION + I JMP 0 +ASAVE: 0 +LSAVE: 0 +TICKER: 0 +TWITCH: -12 + INITA: 0 ; SUBROUTINE INIT CALL POINT +INIT: JMS ZTTY ; GET IN TTY MODE + JMS UCASE ; GET IN UPPER CASE MODE + JMS ATON ; GET IN AUTO REPEAT MODE + JMS CLRS ; CLEARS THE SCREEN + JMP GOBOTH + +GO100: LAW [0] ; FWEEP INTERRUPT (IMLAC SAYS IT HELPS) + JMS DSTART ; START DISPLAY + DOF ; AND THEN TURN OFF FOR POWER UP + +GOBOTH: LAW REF ; SCREEN REFRESH INTERRUPT + ARM + ION + +LOOPY: KSN ; SKIP NO KEYBOARD + JMS KEYIN + RSN ; SKIP NO TTY + JMS TTYIN + JMP LOOPY + +CLRS: 0 ; CLEAR THE SCREEN SUBROUTINE + CLA + I DAC [CURRY-1] ; SET THE LIST BOUNDARY + I DAC BUFEND ; SET THE DHLT + DAC LNCNT' ; SET ZERO LINES ON SCREEN + DAC LNPOS' ; POINTING AT THE FIRST LINE + LAC [DJMS DCURT,] + I DAC [CURRY] ; SET THE INLINE CURSOR + LAC BUFEND + JMS ADRJMP + I DAC [CURRY+1] ; SET BUFFER DJMP + LAC [DLYA TOP,] + I DAC [DARROW] ; SET THE LINE POSITION CURSOR + LAC [DJMP CURRY] + I DAC [TWANG] ; SET THE VARIABLE START POINTER + LAC BUFEND + DAC TWONG' ; SET THE VARIABLE END POINTER + DAC CHRPNT' ; CURRENT CHARACTER POINTER + LAC [CURRY] + DAC CURPNT' ; CURSOR SHOVE POINTER + LAC [CURRY-1] + DAC TWONK' ; SET THE VARIBLE START-1 POINTER + I JMP CLRS + HOME: 0 ; FIND END OF LIST + JMS RTAR + JMP .-1 ; RIGHT ARROW FOREVER + I JMP HOME + +HOMEUP: 0 ; FIND BEGINNING OF LIST + JMS LFAR + JMP .-1 ; LEFT ARROW FOREVER + I JMP HOMEUP + +UPAR: 0 ; MOVES CURSOR UP ONE LINE + JMS LBEG ; TO BEGINNING OF CURRENT LINE + JMS LFAR ; END OF PREVIOUS LINE + JMS LBEG ; TO ITS BEGINNING + I JMP UPAR + +LBEG: 0 ; MOVES CURSOR TO BEGINNING OF CURRENT LINE + LWC 1 + DAC ARFLG + JMS LFAR ; CONTINUE UNTIL BUMPED + JMP .-1 + CLA + DAC ARFLG ; MAKE SURE FLAG ISN'T SET FOR OTHER ROUTINES + I JMP LBEG + +DNAR: 0 ; MOVES CURSOR DOWN ONE LINE + LWC 1 + DAC ARFLG + JMS RTAR + JMP .-1 ; CONTINUE + CLA + DAC ARFLG ; MAKE SURE FLAG ISN'T SET AFTER THIS ROUTINE + JMS RTAR + I JMP DNAR + I JMP DNAR ; ALLOW FOR IDIOCY OF TYPIST + +DOWN: 0 ; SAME AS DNAR EXCEPT WILL INSERT CR-LF TO MOVE DOWN + LWC 1 + DAC ARFLG ; SET FLAG + JMS RTAR + JMP .-1 ; RTAR SKIP RETURNS ONE BEFORE LINE FEED + CLA + DAC ARFLG ; NULL FLAG + JMS RTAR ; JUMP OVER LAST LINE FEED + I JMP DOWN ; EXIT HERE IF NO CR-LF PAIR IS NEEDED TO MOVE DOWN + LWC 1 + ADD CURPNT + DAC TEMPNT + LAC [DJMS D015,] + I SAM TEMPNT + JMS INSERT + JMS LNFD + I JMP DOWN + RTAR: 0 ; MOVES CURSOR ONE RIGHT + LAW 1 + ADD CURPNT + DAC TEMPNT' + IAC + DAC TEM2' + LAW 1 + ADD CHRPNT + DAC TEMP2' + I LAC CHRPNT + ASN ; END OF DLIST? + JMP RFAIL ; YES + SAM [DJMS D012,] + JMP RTDO + ISZ ARFLG ; SKIP ON END OF LINE? + JMP RTEST ; NO +RFAIL: ISZ RTAR + I JMP RTAR ; ERROR SKIP RETURNS +RTEST: JMS ILNPOS + SUB [34.] ; GETTING HIGH? + ASP + JMP RTDO ; NO + JMS BOTUP ; YES, DO A ROLLUP OF THE SCREEN BY 10 LINES + JMS TOPUP +RTDO: LAC TEMP2 + JMS ADRJMP + I DAC TEM2 ; NEW DJMP + I LAC CHRPNT + I DAC CURPNT ; MOVE CHAR UP + LAC [DJMS DCURT,] + I DAC TEMPNT ; NEW DJMS + ISZ CHRPNT + ISZ CURPNT ; UPDATE POINTERS + I JMP RTAR + LFAR: 0 ; MOVES CURSOR ONE LEFT + LWC 1 + ADD CURPNT + DAC TEMPNT + LWC 1 + ADD CHRPNT + DAC TEMP2 + I LAC TEMPNT + ASN ; START OF DLIST? + JMP LFAIL + SAM [DJMS D012,] + JMP LFDO+1 + ISZ ARFLG ; FAIL ON BEGINNING OF LINE? + JMP LTEST ; NO +LFAIL: ISZ LFAR + I JMP LFAR ; SKIP RETURN +LTEST: JMS DLNPOS + SUB [11.] + ASM ; GETTING LOW ? + JMP LFDO ; NO + JMS TOPDN + JMS BOTDN ; YES, ROLL DOWN THE SCREEN BY 10 LINES +LFDO: I LAC TEMPNT + I DAC TEMP2 ; MOVE CHAR DOWN + LAC TEMP2 + DAC CHRPNT ; UPDATE CHRPNT + JMS ADRJMP + I DAC CURPNT ; NEW DJMP + LAC [DJMS DCURT,] + I DAC TEMPNT ; NEW DJMS + LAC TEMPNT + DAC CURPNT ; UPDATE CURPNT + I JMP LFAR + +ARFLG: 0 + INSERT: 0 ; INSERT CHARACTER ROUTINE + XAM CHRPNT + SUB [1] + XAM CHRPNT + I DAC CHRPNT ; PUT CHAR IN THE LIST + LAC CURPNT + DAC 10 + LAC CHRPNT + JMS ADRJMP + I DAC 10 ; NEW DJMP + JMS BUFCK ; CHECK IF BUFFER FULL + JMS RTAR + I JMP INSERT + +DELETE: 0 ; DELETE CHARACTER ROUTINE + I LAC CHRPNT + ASN + I JMP DELETE ; EXIT FOR DELETING END OF LIST + SAM [DJMS D012,] + JMP DELI + JMS DLNCNT ; DELETING A LINE FEED + SAM [33.] ; GETTING LOW? + JMP DELI + JMS BOTUP ; BRING BOTTOM UP + JMP DELI + JMS TOPDN ; ELSE PULL TOP DOWN + NOP +DELI: ISZ CHRPNT ; MOVE POINTER DOWN + LAC CURPNT + DAC 10 + LAC CHRPNT + JMS ADRJMP + I DAC 10 ; NEW DJMP + I JMP DELETE + + BUFCK: 0 ; BUFFER SIZE CHECKER + LWC 5 + ADD CHRPNT + SUB CURPNT + DAC TBUF' ; FIND FREE SPACE IN BUFFER + SAM [499.] ; READY TO WARN ? + JMP ZROCK + LAC MODEF + ASN + BEL ; WARN EDIT MODE USERS +ZROCK: ISZ TBUF ; BUFFER CHOCKING? + I JMP BUFCK + + LAC MODEF ; TIME FOR THE BIG CEASE! DELETES THE FIRST TEN LINES + ASN + BEL + LWC 10. + DAC LOOP ; SET LOOP FOR 10 LINE SEARCH + LAC [CURRY-1] + DAC 10 ; SET GET POINTER + DAC 11 ; SET PUT POINTER +SMULCH: I LAC 10 ; MOVES REGISTER 10 THROUGH THE CHARACTER LIST + SAM [DJMS D012,] + JMP SMULCH ; LOOP GOES UNTIL LINE FEED FOUND + ISZ LOOP + JMP SMULCH ; GOES UNTIL 10 LINE FEEDS FOUND + + I LAC 10 ; GETS + I DAC 11 ; PUTS + SAM [DJMS DCURT,] ; DONE? + JMP .-3 ; CHARACTER MOVING UP LOOP + I LAC 10 + I DAC 11 ; MOVES THE LAST CHAR, WHICH IS THE DJMP TO SECOND BLOCK + + I LAC [TWANG] ; LOAD STARTING DJMP + JMS JMPADR ; GET ADDRESS + SUB 10 + ADD 11 + JMS ADRJMP ; NEW DJMP + I DAC [TWANG] ; NEW TWANG POINTER + LAC TWONK + SUB 10 + ADD 11 + DAC TWONK ; RESET TWONK POINTER + + LAC CURPNT + SUB 10 + ADD 11 + DAC CURPNT ; RESET CURPNT POINTER + I JMP BUFCK + NUMZIT: 0 ; ROUTINE DISPLAYS AMOUNT OF BUFFER SPACE LEFT ON THE SCREEN + CLA + DAC DFLAG' ; ZERO TO KILL LEADING ZEROS + LAC [DNUM1-1] + DAC 17 ; OUTPUT POINTER IN 17 + LWC 4 + DAC LOOPIN' + LAW SUBT + DAC SUBPNT' + LWC 4 + ADD CHRPNT + SUB CURPNT + DAC TNUM' + +GOZAP: CLA + XAM TNUM ; LOAD BUFFER SIZE +SUBR: I SUB SUBPNT ; DIVIDE LOOP FOR BASE CONVERSION + ASP + JMP .+3 + ISZ TNUM ; INCREMENT DIGIT COUNT + JMP SUBR + I ADD SUBPNT + XAM TNUM ; LOAD DIGIT, STORE DIVIDEND + ASZ + JMP NONA ; NO + SAM DFLAG ; SUPPRESS LEADING ZEROS ? + JMP NONA+1 ; NO + LAC [DNOP] + I DAC 17 ; KILLS THAT LEADING ZERO + JMP WHAMZ + +NONA: ISZ DFLAG + ADD [LZERO] ; GET ADDRESS OF PROPER DJMP + DAC GRAB' + I LAC GRAB + I DAC 17 ; PUT IT OUT IN THE DISPLAY LIST +WHAMZ: ISZ SUBPNT + ISZ LOOPIN ; CHECK FOR ALL FOUR DIGITS + JMP GOZAP ; CONTINUE TO CONTINUE + I JMP NUMZIT ; EXIT + +SUBT: 1000. ; TABLE OF POWERS OF TEN + 100. + 10. + 1. + ABPOS: 0 ; ABSOLUTE POSITIONING ROUTINE + JMS TGET + DAC HPOS' ; HORIZONTAL POSITION + JMS TGET + DAC VPOS' ; VERTICAL POSITION + LAW 1 + SUB VPOS + ADD LNPOS ; FIND DELTA VERTICAL + = UP, - = DOWN + ASN + JMP GOAL2-1 ; GOOD ALREADY + ASP ; MOVE UP? + JMP DOWNY ; NO + CIA + DAC LOOPR' ; SET LOOP FOR MOVE UP +UPM: JMS UPAR + ISZ LOOPR + JMP UPM + JMP GOAL2 ; DONE MOVING UP +DOWNY: DAC LOOPR +DNM: JMS DOWN ; MOVES DOWN + ISZ LOOPR + JMP DNM + JMP GOAL2 ; DONE MOVING DOWN + JMS LBEG ; GET TO BEGINNING OF THE LINE + +GOAL2: LAW 1 + SUB HPOS + ASN + I JMP ABPOS ; THERE ALREADY !, NORMAL EXIT + DAC LOOPR ; ST LOOP FOR POSITIONING +FCHEK: I LAC CHRPNT + SAM [DJMS D015,] + JMP .+2 ; HIT CARRIGE RETURN? + JMP SPACED ; YES! + ASN ; HIT THE END? + JMP SPACED ; YES! + JMS RTAR ; DO IT! + ISZ LOOPR + JMP FCHEK ; CONTINUE TO MOVE RIGHT + I JMP ABPOS +SPACED: LAC [DJMS D040,] + JMS INSERT ; INSERT SPACES IF NO CHARS THERE ALREADY + ISZ LOOPR + JMP SPACED + I JMP ABPOS ; DONE! + LDELT: 0 ; DELETES THE CURRENT LINE + JMS LBEG + JMS DELRT + I JMP LDELT + +LDELO: 0 ; DELETES LINE PLUS CR - LF + JMS LDELT + JMS DELETE + JMS DELETE ; KILLS THE CR-LF AT THE END OF IT ALL + I JMP LDELO + +DELUP: 0 ; DELETE TO TOP OF BUFFER + JMS LFAR ; DELETES UNTIL LEFT ARROW SKIP FAILS + JMP .+2 + I JMP DELUP + JMS DELETE + JMP DELUP+1 + +DELDN: 0 ; DELETE TO END OF BUFFER + I LAC CHRPNT + ASN ; DELETES UNTIL 0 AT END REACHED + I JMP DELDN + JMS DELETE + JMP DELDN+1 + +DELLF: 0 ; DELETE LEFT TO BEGINNING OF LINE + JMS LFAR + JMP .+2 + I JMP DELLF + I LAC CHRPNT + SAM [DJMS D012,] + JMP .+3 + JMS RTAR + I JMP DELLF + JMS DELETE + JMP DELLF+1 + +DELRT: 0 ; DELETE RIGHT TO END OF LINE + I LAC CHRPNT + ASN + I JMP DELRT + LAC CHRPNT + DAC 10 + I LAC 10 ; LOADS CONTENTS OF CHRPNT+1 + SAM [DJMS D012,] + JMP .+2 + I JMP DELRT ; IF A LINE FEED IS 2 CHARS AWAY, EXIT! + JMS DELETE ; GET THE LAST BUGGER!! + JMP DELRT+1 + +; HERE TO ACTUALLY DELETE +; DELETE CHARACTER TO RIGHT OF CURSOR +FDELT: 0 + LAC MODEF ; CONSOLE MODE + ASZ + JMP .+4 ; TTY MODE + JMS LFAR + JMS DELETE ; LOCAL OR EDIT, REMOVE CHAR + I JMP FDELT + LAW 177 + JMS XMIT + I JMP FDELT + + TXMIT: 0 ; KEYBOARD TRANSMITTER WITH LOCAL MODE + XAM MODEF' + ASM ; SKIPS ONLY IN TTY MODE + JMP FEEDME ; ELSE DO LOCAL MODE KLUDGE + XAM MODEF + JMS XMIT ; SEND IT TO THE PDP-10 + I JMP TXMIT +FEEDME: XAM MODEF ; IN LOCAL MODE + ISZ DNOPF' ; PDP-10 LAST TYPIST ? + JMP UHNUHN ; NO + DAC TEM1' ; YES, ADD A DNOP TO MARK THE DIVIDING LINE + LAC [DNOP] + JMS INSERT + LAC TEM1 +UHNUHN: SAM [015] ; PASSING A CARRIGE RETURN IN LOCAL MODE ? + JMP FOOBOO ; NO, CONVERT JUST THIS CHAR + JMS CVDISP ; YES, ADD A LINE FEED TO IT ! + JMS LNFD + I JMP TXMIT +FOOBOO: JMS CVDISP + I JMP TXMIT + +XMIT: 0 ; TRANSMIT ROUTIINE + TSF + JMP .-1 + TPC + I JMP XMIT + +RCRLF: 0 + LAC [DJMS D015,] + JMS INSERT + JMS LNFD + JMS UPAR + I JMP RCRLF + ADRJPL: 0 ; TURNS A POINTER INTO THE RIGHT + LAC TWONK ; GET POINTER TO ADDRESS-1 + IAC + JMS ADRJMP ; MAKE IT A DJMP + I DAC [TWANG] + I JMP ADRJPL + +ADRJMP: 0 ; MAKES AN ADDRESS INTO A DJMP + SUB [010000] + ASM ; SKIPS IF < 10000 + ADD [070000] + ADD [070000] + I JMP ADRJMP + +JMPADR: 0 ; MAKES A DJMP INTO AN ADDRESS + AND [107777] ; GET RID OF NO.6 BIT + ASP + XOR [110000] ; TRANSFER THE 10000 BIT + I JMP JMPADR + +ILNPOS: 0 ; INCREMENT LINE POSITION CURSOR + LWC 25 + I ADD [DARROW] + I DAC [DARROW] ; FIX DLIST DOWNWARD + ISZ LNPOS ; FIX COUNTER + LAC LNPOS ; LOAD FOR RETURNING IT + I JMP ILNPOS + +DLNPOS: 0 ; DECREMENT LINE POSITION CURSOR + LAW 25 + I ADD [DARROW] + I DAC [DARROW] + LWC 1 + ADD LNPOS + DAC LNPOS ; FIX COUNTER + I JMP DLNPOS + +DLNCNT: 0 ; DECREMENT LINE COUNTER + LWC 1 + ADD LNCNT + DAC LNCNT + I JMP DLNCNT + +TTGLE: 0 ; CURSOR TWITCH TOGGLE + LAC GLV + XOR [DUD#RESTRZ] + DAC GLV + LAC [DNOP] + DAC DCURT ; FORCES NORMAL CURSOR ON SWITCHOFF + I JMP TTGLE + PXMIT: 0 ; PAGE TRANSMIT ROUTINE + JMS HOMEUP ; GET TO THE TOP OF THE WORLD +SMOOCH: JMS CASCII ; GET ASCII VALUE OF NEXT THING IN DLIST + ASZ + JMP TOAD + I JMP PXMIT ; NORMAL EXIT HERE +TOAD: JMS XMIT ; SEND CHARACTER + SAM [015] + JMP RTO + JMS TGET ; GET NEXT CHARACTER HERE + SAM [PXACK] ; ACK CHARACTER? + JMP .-2 ; NO +RTO: JMS RTAR ; KEEP USER INFORMED OF PROGRESS + JMP SMOOCH + +PXERS: 0 ; PAGE TRANSMIT WITH SCREEN CLEAR + JMS PXMIT + JMS CLRS + I JMP PXERS + +LXMIT: 0 ; LINE TRANSMIT ROUTINE + LAC MODEF + ASP + I JMP LXMIT ; PREVENTS TTY MODE HANGUP + LAW 15 + JMS TXMIT ; ADDS A CR TO THE LINE +LLOOP: JMS LFAR ; SEARCH BACK FOR THE START OF IMLAC'S TYPINGS + JMP .+2 + JMP RLOOP + I LAC CHRPNT ; GET CHAR + SAM [DNOP] + JMP LLOOP +RLOOP: JMS RTAR + JMS CASCII + JMS XMIT + SAM [015] + JMP RLOOP + JMS RTAR + I JMP LXMIT + +SPXMIT: 0 ; SLOW PAGE XMIT WITH ECHO SUPRESSION + JMS HOMEUP ; GO TO TOP OF SCREEN +MOOCH: JMS CASCII ; GET ASCII VALUE OF CURRENT CHARACTER + ASZ ; 0 = END OF THE JOB + JMP TOADY + I JMP SPXMIT +TOADY: SAM [012] ; DON'T TRANSMIT LINE FEEDS + JMS SXMIT ; SLOW XMIT SUBROUTINE + JMS RTAR + JMP MOOCH + +SXMIT: 0 ; SLOW TRANSMIT + DAC TEM1 + LWC 7777 + DAC LOOP +GOZ: RCF ; INPPUT CLEARING HERE + ISZ LOOP + JMP .-2 ; DELAY LOOP IS HERE + LAC TEM1 + JMS XMIT ; DO IT! + I JMP SXMIT + TABR: 0 ; SMART TAB ROUTINE + CLA + DAC TABDIS' ; CLEAR DISPLACEMENT + LAC CURPNT + DAC TEMPNT +SBACK: LWC 1 ; BACK UP THE POINTER ONE + ADD TEMPNT + DAC TEMPNT + I LAC TEMPNT ; LOAD CHARCATEER IN BACKWARD SEARCH + ASN ; FOUND A ZERO - DONE! + JMP COOLY + SAM [DJMS D015,] + JMP .+2 + JMP COOLY ; FOUND A CR - DONE! + SAM [DJMS D012,] + JMP .+2 + JMP SBACK ; FOUND A LF - CONTINUE + SAM [DNOP] + JMP .+2 + JMP SBACK ; FOUND A DNOP - CONTINUE + JMS TABCK + JMP RFOOF + LAC TABDIS ; FOUND A TAB - CHARACTER COUNT TO NEXT MODULO 8 VALUE + AND [170] + ADD [10] + DAC TABDIS + JMP SBACK +RFOOF: ISZ TABDIS ; ALL ELSE - ADD ONE TO CHARACTER COUNT + JMP SBACK +COOLY: LAC TABDIS ; LOAD DISPLACEMENT + AND [170] + SUB [140] + ASM + I JMP TABR ; DO NOTHING IF ALL THE WAY OVER + SAR 2 + ADD [DJMS D011+30] ; GET ADDRESS OF CORRECT TAB (ONE OF 12 POSSIBLE ONES) + JMS INSERT + I JMP TABR + TABCK: 0 ; ROUTINE TO CHECK FOR ARGUMENT BEING A TAB OR NOT + DAC TEM1' ; SAVE ARGUMENT + AND [7777] + SUB [D011] + ASP ; SKIPS IF >= MINIMUM POSSIBLE TAB + JMP NOSKIP + SUB [D010-D011] + ASP ; SKIPS IF > MAXIMUM POSSIBLE TAB + ISZ TABCK ; SKIP RETURN ON FINDING A TAB +NOSKIP: LAC TEM1 ; RELOAD THE ORIGINAL ARGUMENT + I JMP TABCK ; RETURN + +COMCOM: 0 ; COMMENT KLUDGE PROGRAM (RYANPROG) + I LAC CHRPNT ; LOAD CURRENT CHARACTER + SAM [DJMS D015,] ; FOUND THE END OF THE LINE + JMP MORLOK +PLOF: JMS TABR ; INSERT A TAB + LAC TABDIS + SUB [D010-D011] + ASP ; SKIPS IF TABBED OVER FAR ENOUGH BY NOW + JMP PLOF ; ELSE CONTINUE TO RIGHT ARROW + LAC [DJMS D073,] ; AUTOMATIC SEMICOLON + JMS INSERT + LAC [DJMS D040,] ; AUTOMATIC SPACE, TOO (CLASS?) + JMS INSERT + I JMP COMCOM +MORLOK: JMS RTAR ; GO FURTHER RIGHT IN CURRENT LINE + JMP COMCOM+1 + JMP PLOF ; RTAR FAIL = END OF THE MAIN PROGRAM, TREAT LIKE A CR + ASETR: 0 ; HANDLES CONTROL "A" SHEISS + JMS TGET + ADD [AXTAB] + DAC TEMPNT + SUB [AXEND] ; CHECK TABLE LIMIT + ASM ; SKIPS IF O.K. + I JMP ASETR + I LAC TEMPNT ; LOAD ADDRESS OF SELECTED ROUTINE + ASN ; IS A ROUTINE ASSIGNED ? + I JMP ASETR ; FORGET IT IF A ZERO ENTRY + DAC TEMPNT ; STORE IT + I JMS TEMPNT ; I JMS TO IT + I JMP ASETR + +AXTAB: 0 + RLOADM+NOP ; ^A^A -- JUMP TO 40 + TECURS+NOP ; ^A^B -- INSERT TECO CURSOR + HOMEUP+NOP ; ^A^C -- HOME UP + HOMEUP+NOP ; ^A^D + HOMEUP+NOP ; ^A^E + TENM+NOP ; ^A^F -- JUMP TO 10000 + ZEDIT+NOP ; ^A^G -- EDIT MODE + ZTTY+NOP ; ^A^H -- TTY MODE +AXEND: + +; convert two chars into number, sign-bit, and dot-bit +GRFIN: 0 + JMS TGET ; read character + DAC TEMPNT + AND [177740] + ASN ; control character? + JMP GRFIN1 ; yes, end of graphics +; not control character, buffer it + LAC TEMPNT ; get character + I JMP GRFIN ; return if not ran out +; control character, game is up +GRFIN1: LAC TEMPNT + JMP TTYIN1 ; regular tty input + + +TGET: 0 ; TTY GET ROUTINE + RSF + JMP .-1 + CLA + RRC + AND [177] ; PROTECTION !! + I JMP TGET + +; insert TECO cursor in buffer +TECURS: 0 + LAC [DJMS XFORM,] + JMS INSERT + I JMP TECURS + TOPUP: 0 ; SCROLLS TOP UP TEN LINES + LWC 10. + DAC LOOP +INHALE: ISZ TWONK ; LOOP SEARCHES FOR LINE FEEDS + I LAC TWONK + SAM [DJMS D012,] + JMP INHALE + JMS DLNCNT + JMS DLNPOS + ISZ LOOP ; 10TH LINE FEED YET? + JMP INHALE + JMS ADRJPL ; YES, CHANGE THE TWANG POINTER TO MOVE THE VIEWPORT + I JMP TOPUP + +TOPDN: 0 ; UNDOES WHAT TOPUP DOES + LWC 10. + DAC LOOP ; SEARCHES BACKWARD FOR 10 LINES + I LAC TWONK + ASZ ; CHECK LIMITING CASE FIRST + JMP .+3 + ISZ TOPDN + I JMP TOPDN ; SKIP RETURNS IF NO MORE TO PEEL DOWN +PEEL: LWC 1 + ADD TWONK + DAC TWONK ; BACK UP THE TWONK POINTER FOR SEARCHING + I LAC TWONK + ASN + JMP PRONK + SAM [DJMS D012,] ; FINDS LINE FEEDS + JMP PEEL + ISZ LOOP ; 10 OF THEM SKIPS + JMP PEEL +PRONK: JMS ADRJPL ; CHANGE DISPATCHER + LAW 10. ; CHANGE POINTERS & COUNTERS FOR 10 LINE SHIFT + ADD LNCNT + DAC LNCNT + LAW 10. ; BORING, ISN'T IT! + ADD LNPOS + DAC LNPOS + LWC 322 + I ADD [DARROW] + I DAC [DARROW] + I JMP TOPDN + BOTDN: 0 ; SCROLLS BOTTOM DOWN 10 LINES BY INSERTING A 01 IN DISPLAY LIST + LWC 10. + DAC LOOP +PULL: LWC 1 ; BACKWARD SEARCH FOR 3 LINE FEEDS + ADD TWONG + DAC TWONG + I LAC TWONG + SAM [DJMS D012,] ; FINDS THE LINE FEEDS + JMP PULL + JMS DLNCNT + ISZ LOOP ; FINDS THE 3RD ONE AND SKIPS + JMP PULL + LAW 1 + I DAC TWONG ; PUT 000001 IN LIST AND KILL DISPLAY WITHOUT CREATING A + I JMP BOTDN ; FALSE ENDING OF THE LIST (MARKED BY 000000) + +BOTUP: 0 ; UNDOES THE BOTTOM DOWN ROUTINE + I LAC TWONG + ASZ + JMP .+3 + ISZ BOTUP ; SKIP RETURNS IF NO MORE TO ROLL UP INTO VIEW + I JMP BOTUP + LAC [DJMS D012,] ; UNBLOCKS THE LIST AT TWONG POINTER + I DAC TWONG + LAW 10. + ADD LNCNT + DAC LNCNT +PUSH: ISZ TWONG + I LAC TWONG + AND [177776] + ASZ ; SEARCHES DOWN FOR THE NEXT 000001 OR 000000 + JMP PUSH ; CONTINUE LOOKING + I JMP BOTUP ; NORMAL EXIT + LNFD: 0 ; LINE FEED ROUTINE + LAC [DJMS D012,] + JMS INSERT ; PUT IN DLIST + ISZ LNCNT ; INCREMENT LINE COUNT + LAC LNCNT + SAM [44.] ; TOO MUCH ON SCREEN YET? + I JMP LNFD ; NO, GO AWAY! + LAC LNPOS ; LOAD LINE POSITION + SUB [22.] + ASP + JMP DOWNR + JMS TOPUP ; LNCNT >= 20, ROLL UP TOP ON LNFD INSERTIONS + I JMP LNFD +DOWNR: JMS BOTDN ; LNCNT < 20, ROLL DOWN BOTTOM ON LNFD INSERTIONS + I JMP LNFD + +DONG: 0 + BEL + I JMP DONG + +RLOADM: 0 ; JUMPS TO 40 + IOF ; SAVE WEIRD BUGS + JMP 40 + +TENM: 0 + IOF + I JMP [10000] + +EDITLN: 0 ; TOGGLE LINE AT 70 CHARACTER PAPER MARGIN + I LAC [DEDLIN] + XOR [DNOP#] + I DAC [DEDLIN] + I JMP EDITLN + +LINE70: DGD +LINELX: DLXA 1442 + DLYA TOP + DGB + DLYA 0 + DRJM + +; process two ards graphics codes +GETARD: 0 +; get and process n1 + JMS GRFIN ; get a character between 100 and 177 + AND [77] ; ignore all but 6 bits + RAR 1 ; shift sign bit into link + DAC POS' ; save 5 most sig bits +; sign bit? + CLA ; zero if link not set + LSZ ; link zero? + LWC 1 ; minus one if is + DAC SIGN' ; save in sign +; get and process n2 + JMS GRFIN + DAC POS1' ; save it +; dots bit? + AND [40] + ASZ ; if dots bit not on, skip + LWC 1 ; -1 if one, so isz will skip + DAC DOTS' ; save it +; do pos=> + LAC POS1 + AND [37] + SAL 3 + SAL 2 + IOR POS + AND [1777] + DAC POS ; save in pos and return in ac + I JMP GETARD + +; get number into co-ordinate format +SETDL: 0 + ISZ SIGN + JMP SETDL1 + LAC POS +; if pos negative + CIA + dac pos +; if pos positive +SETDL1: LAW 1000 + ADD POS + DAC POS + I JMP SETDL + +SETPNT: 0 +; x coordinate + JMS GETARD ; two chars + JMS SETDL ; frob into coordinates + XOR [DLXA 0,] ; make it a dlxa + DAC XPOS' ; save it +; y co-ordinate + JMS GETARD + JMS SETDL + XOR [DLYA 0,] + DAC YPOS' +; insert them + LAC [DGD] + JMS INSERT + LAC XPOS + JMS INSERT + LAC YPOS + JMS INSERT + JMP SETPNT+1 + I JMP SETPNT + +LNGVCT: 0 +; x + JMS GETARD ; two chars + DAC XPOS ; x relative +; check dots bit + CLA ; invisible? + ISZ DOTS ; if dots=-1, invisible + LAC [20000] ; not invisible + DAC LONG1 +; check sign bit + LAC [40000] + ISZ SIGN ; if sign=-1, then negative + CLA + DAC LONG2 + +; y + JMS GETARD + DAC YPOS +; check dots bit + LAC [60000] ; dotted? + ISZ DOTS ; if dots=-1, dotted + CLA ; not dotted + IOR LONG1 + DAC LONG1 +; sign bit + LAC [20000] + ISZ SIGN + CLA + IOR LONG2 ; don't forget x may have sign, too! + DAC LONG2 + JMS VCTDO + JMP LNGVCT+1 + +; short vectors -- no one uses them ever + +SHTVCT: 0 + LAC [40000] + DAC LONG1 + JMS GRFIN + RAR 1 + DAC XPOS + CLA + LSN + JMP SHTY + LAC [40000] +SHTY: DAC LONG2 + JMS GRFIN + RAR 1 + DAC YPOS + LSN + JMP SHTDO + LAC [20000] + IOR LONG2 + DAC LONG2 +SHTDO: JMS VCTDO + JMP SHTVCT+1 + +; hack difference and bit for which is greater +VCTDO: 0 + LAC YPOS ; y + SUB XPOS ; minus x + DAC LONG0 ; (y-x) +; check whether y or x greater + ASZ ; nothing if x=y + ASP ; skip if y>x, must hack + JMP LNGPUT ; x>y is the normal case, super win + +; here y was greater than x, must switch them + CIA + DAC LONG0 ; -(y-x) +; exchange x and y -- greater in first word always + LAC XPOS + XAM YPOS + DAC XPOS + LAC [10000] ; indicate y was greater + IOR LONG2 + DAC LONG2 +LNGPUT: LAC LONG0 + AND [7777] + IOR [40000] + JMS INSERT + LAC XPOS + IOR LONG1 + IOR [100000] ; so can't look like DHLT + JMS INSERT + LAC YPOS + IOR LONG2 + IOR [100000] ; ditto + JMS INSERT ; insert them + I JMP VCTDO + +LONG0: 0 +LONG1: 0 +LONG2: 0 + ZMODE: 0 + LAC MODEF + ASZ + JMP .+3 + JMS ZTTY + I JMP ZMODE + JMS ZEDIT + I JMP ZMODE + +ZTTY: 0 ; SETS TTY MODE + LWC 1 + DAC MODEF + LAC [DNOP] + I DAC [DTTY] + I JMP ZTTY + +ZEDIT: 0 ; SETS EDIT MODE + CLA + DAC MODEF + LAC [DJMP DEDIT,] + I DAC [DTTY] + I JMP ZEDIT + +ZCASE: 0 ; COMPLEMENTS CHARACTER CASE + LAC CASEF + ASN ; SKIPS ON UPPER CASE + JMP .+3 + JMS LCASE ; SET LOWER CASE + I JMP ZCASE + JMS UCASE + I JMP ZCASE + +UCASE: 0 + LAW 40 ; SETS UPPER CASE HERE + DAC CASEF' + LAC [DNOP] + I DAC [DUCF] + LAC [DJMP DFORM,] + I DAC [DCURT] + I JMP UCASE + +LCASE: 0 ; SETS LOWER CASE + CLA + DAC CASEF + LAC [DJMP DAUTF,] + I DAC [DUCF] + LAC [DNOP] + I DAC [DCURT] + I JMP LCASE + ZAUTO: 0 ; TOGGLE TAUTO (AUTO REPEAT) + LAC TAUTO + ASP ; SKIPS IF IT WAS ON + JMP .+3 + JMS ATOFF ; TURN IT OFF + I JMP ZAUTO + jms aton + I JMP ZAUTO + +ATON: 0 ; SET TAUTO TO ON + LAC [ISZ TICKER] + DAC TAUTO + LAC [DNOP] + I DAC [DAUTF] + I JMP ATON + +ATOFF: 0 ; SET TAUTO TO OFF + LAC [NOP] + DAC TAUTO + LAC [DJMP DBELLI,] + I DAC [DAUTF] + I JMP ATOFF + + KEYIN: 0 ; KEYBOARD INPUT SUBROUTINE + CAL + KRC + DAC KCHAR' + LWC 20 + DAC TICKER ; SET 1/2 SECOND AUTO REPEAT BOMB +CONTIN: LAC [KSN] + DAC LOOPY ; CURE THE IMPURE ! + LAW KEYDIS-1 + DAC 10 ; LOAD INDEX + LWC KEYSIZ + DAC LOOP' + LAC KCHAR + JMS DISPCH + JMP DSPR + JMP XTR + AND [CTRL] ; CONTROL BIT ON? + ASN + JMP .+5 + LAC KCHAR + AND [37] + JMS XMIT + I JMP KEYIN + LAC KCHAR ; ELSE CHECK NORMAL RANGES + AND [377] + SUB [240] ; IN RANGE 240 TO 277? + ASP + I JMP KEYIN ; <240, IGNORE IT + SUB [40] + ASM + JMP MISS ; >277 + AND [77] + JMP XTR ; YES, CONVERT & XMIT + MISS: SUB [001] ; IN RANGE 301 TO 372? + ASP + I JMP KEYIN + SUB [72] + ASM + I JMP KEYIN + ADD [373] + AND [177] ; YES, CONVERT & XMIT + XOR CASEF ; SET THE CASE PROPERLY +XTR: JMS TXMIT ; POITIVE=CHAR CONVERSION + I JMP KEYIN +DSPR: JMS IMPER + I JMP KEYIN + +IMPER: 0 ; SUBROUTINE DISPATCH SUBROUTINE + DAC IMP + I JMS IMP + I JMP IMPER + I JMP IMPER ; SOME CAN SKIP RETURN +IMP: 0 ; IMPURE LOCATION + KEYDIS: DSP 202,LXMIT+NOP + DSP CTRL+204,DELDN+NOP + DSP 204,DNAR+NOP + DSP 205,RTAR+NOP + DSP CTRL+205,DELRT+NOP + DSP CTRL+206,DELUP+NOP + DSP 206,UPAR+NOP + DSP CTRL+210,DELLF+NOP + DSP 210,LFAR+NOP + DSP CTRL+SHIFT+211,RLOADM+NOP + DSP CTRL+211,INITA+NOP + DSP SHIFT+211,ZTTY+NOP + DSP 212,12 + DSP SHIFT+212,DOWN+NOP + DSP 214,14 + DSP SHIFT+214,ZMODE+NOP + DSP 215,15 + DSP SHIFT+215,RCRLF+NOP + DSP SHIFT+216,SPXMIT+NOP + DSP CTRL+216,PXERS+NOP + DSP 216,PXMIT+NOP + DSP 217,HOME+NOP + DSP SHIFT+217,HOMEUP+NOP + DSP SHIFT+230,LDELT+NOP + DSP 230,TTGLE+NOP + DSP CTRL+230,CLRS+NOP + DSP SHIFT+231,ZAUTO+NOP + DSP 231,ZCASE+NOP + DSP 232,FDELT+NOP + DSP 233,33 + DSP CTRL+SHIFT+233,TENM+NOP + DSP 234,LDELO+NOP + DSP 235,COMCOM+NOP + DSP SHIFT+235,EDITLN+NOP + DSP 236,37 + DSP CTRL+237,FDELT+NOP + DSP 237,11 + DSP SHIFT+240,40 + DSP CTRL+240,40 + DSP CTRL+254,133 + DSP CTRL+255,137 + DSP CTRL+256,135 + DSP CTRL+257,134 + DSP SHIFT+260,10 + DSP CTRL+260,174 + DSP CTRL+266,176 + DSP CTRL+267,140 + DSP CTRL+270,173 + DSP CTRL+271,175 + DSP CTRL+272,136 + DSP CTRL+273,100 + DSP CTRL+SHIFT+301,133 + DSP CTRL+SHIFT+302,134 + DSP CTRL+SHIFT+303,135 + DSP CTRL+SHIFT+304,136 + DSP CTRL+SHIFT+305,137 + DSP CTRL+SHIFT+306,100 + DSP CTRL+SHIFT+314,34 + DSP CTRL+SHIFT+315,35 + DSP CTRL+SHIFT+316,36 + DSP CTRL+SHIFT+317,37 + DSP CTRL+SHIFT+320,0 + DSP 377,177 + DSP SHIFT+377,FDELT+NOP + DSP CTRL+SHIFT+377,CLRS+NOP +KEYSIZ=<.-KEYDIS>/2 + TTYIN: 0 ; TELETYPE SUBROUTINE + LWC 1 + DAC DNOPF ; SET FLAG THAT PDP-10 WAS THE LAST TYPIST + CAL + RRC +TTYIN1: JMS CVDISP + I JMP TTYIN + +CVDISP: 0 ; CONVERTS ASCII TO DISPLAY LIST + AND [177] ; PROTECTION + DAC TCHAR' + LAC MODEF + ASM ; TTY MODE? + JMP CVEDIT ; NO + LAW TTYDIS-1 + DAC 10 ; SET INDEX + LWC TTYSIZ + DAC LOOP + JMP BSTART + +CVEDIT: LAW EDTDIS-1 + DAC 10 + LWC EDTSIZ + DAC LOOP + +BSTART: LAC TCHAR + JMS DISPCH + JMP TDSPR + JMP GOOLIN + + SUB [40] ; IN RANGE 40 TO 135? + ASP + I JMP TTYIN ; < 40, IGNORE IT + SUB [137] + ASM + I JMP TTYIN ; >176, IGNORE IT + ADD [137+LIST40] + DAC TEMPNT + I LAC TEMPNT +GOOLIN: JMS INSERT + I JMP CVDISP + +TDSPR: JMS IMPER ; dispatch + I JMP CVDISP + +EDTDIS: DSP 177,DELETE+NOP ; ^? -- reverse delete + +TTYDIS: DSP 001,ASETR+NOP ; ^A -- dispatch on next character + DSP 007,DONG+NOP + DSP 010,DJMS D010 ; ^H -- insert backspace + DSP 011,TABR+NOP ; ^I -- tab + DSP 012,lnfd+NOP + DSP 013,down+NOP + DSP 015,DJMS D015 ; ^M -- INSERT CR + DSP 016,ABPOS+NOP + DSP 017,LFAR+NOP + DSP 020,DELDN+NOP + DSP 021,DELRT+NOP + DSP 022,CLRS+NOP + DSP 023,LDELT+NOP + DSP 024,HOMEUP+NOP + DSP 025,HOME+NOP + DSP 030,DELETE+NOP + DSP 031,RTAR+NOP + DSP 032,UPAR+NOP + DSP 033,DJMS D033 ; normal alt-mode +EDTSIZ=<.-EDTDIS>/2 + DSP 014,CLRS+NOP + DSP 035,SETPNT+NOP + DSP 036,LNGVCT+NOP + DSP 037,SHTVCT+NOP +TTYSIZ=<.-TTYDIS>/2 + +LIST40: DJMS D040, ? DJMS D041, ? DJMS D042, ? DJMS D043 + DJMS D044, ? DJMS D045, ? DJMS D046, ? DJMS D047 + DJMS D050, ? DJMS D051, ? DJMS D052, ? DJMS D053 + DJMS D054, ? DJMS D055, ? DJMS D056, ? DJMS D057 +LZERO: DJMS D060, ? DJMS D061, ? DJMS D062, ? DJMS D063 + DJMS D064, ? DJMS D065, ? DJMS D066, ? DJMS D067 + DJMS D070, ? DJMS D071, ? DJMS D072, ? DJMS D073 + DJMS D074, ? DJMS D075, ? DJMS D076, ? DJMS D077 + DJMS D100, ? DJMS D101, ? DJMS D102, ? DJMS D103 + DJMS D104, ? DJMS D105, ? DJMS D106, ? DJMS D107 + DJMS D110, ? DJMS D111, ? DJMS D112, ? DJMS D113 + DJMS D114, ? DJMS D115, ? DJMS D116, ? DJMS D117 + DJMS D120, ? DJMS D121, ? DJMS D122, ? DJMS D123 + DJMS D124, ? DJMS D125, ? DJMS D126, ? DJMS D127 + DJMS D130, ? DJMS D131, ? DJMS D132, ? DJMS D133 + DJMS D134, ? DJMS D135, ? DJMS D136, ? DJMS D137 + DJMS D140, ? DJMS D141, ? DJMS D142, ? DJMS D143 + DJMS D144, ? DJMS D145, ? DJMS D146, ? DJMS D147 + DJMS D150, ? DJMS D151, ? DJMS D152, ? DJMS D153 + DJMS D154, ? DJMS D155, ? DJMS D156, ? DJMS D157 + DJMS D160, ? DJMS D161, ? DJMS D162, ? DJMS D163 + DJMS D164, ? DJMS D165, ? DJMS D166, ? DJMS D167 + DJMS D170, ? DJMS D171, ? DJMS D172, ? DJMS D173 + DJMS D174, ? DJMS D175, +LISTN: DJMS D176 + + CASCII: 0 ; CONVERTS DISPLAY LIST TO ASCII + I LAC CHRPNT ; LOAD FROM INDEX + SAM [DNOP] + JMP .+3 + JMS RTAR + JMP CASCII+1 + JMS TABCK ; CHECKS FOR A TAB + JMP .+3 + LAW 11 + JMP BLAPO + SAM [DJMS D010,] + JMP .+3 ; CHECKS FOR A BACKSPACE + LAW 10 + JMP BLAPO + SAM [DJMS D012,] + JMP .+3 ; CHECKS FOR A LINE FEED + LAW 12 + JMP BLAPO + SAM [DJMS D015,] + JMP .+3 ; CHECKS FOR A CARRIGE RETURN + LAW 15 + JMP BLAPO + SAM [DJMS D033,] + JMP .+3 ; CHECKS FOR AN ALTMODE + LAW 33 + JMP BLAPO + DAC TCHAR + LAW LIST40-1 + DAC 10 ; POINTER TO TABLE + LWC LISTN-LIST40+1 + DAC LOOP ; LIMIT SEARCH + LAC TCHAR +WHOPIE: I SAM 10 ; COMPARE + JMP .+2 + JMP CMATCH + ISZ LOOP ; CHECK FOR LIMIT! + JMP WHOPIE + CLA ; NOT IN TABLE, RETURNS A ZERO + JMP BLAPO +CMATCH: LWC LIST40-40 + ADD 10 ; GET ASCII +BLAPO: DAC TCHAR ; SAVE THE CHARACTER FOR HIGH LEVEL MISUSE + I JMP CASCII + +DISPCH: 0 +; comparison loop +DISCMP: I SAM 10 ; MATCH? + JMP .+2 ; NO MATCH + JMP DISMAT ; MATCH! + ISZ 10 ; SKIP SECOND WORD OF ENTRY + ISZ LOOP ; ALL OF IT? + JMP DISCMP ; NO, LOOP + +; failed -- no matches + ISZ DISPCH + JMP DISXIT + +; won -- return second word of table entry +DISMAT: I LAC 10 + ASM +DISXIT: ISZ DISPCH + I JMP DISPCH + +VARIABLES +CONSTANTS + 0 + +DCURT: DNOP ; REGULAR CURSOR + INC E,D0M1 + INC D0M3,B30 + INC B30,B30 + INC D03,D20 + INC D01,T + DJMP CURRET + +DFORM: INC E,D0M1 ; CURSOR WITH PRONGS + INC B0M3,B30 + INC B30,B30 + INC B03,D20 + INC D01,T +CURRET: INC E,DM30 + INC DM30,DM30 + INC DM20,X + +XFORM: DJMS XXFORM ; TECO CURSOR + DJMS XXFORM + DJMS XXFORM + DRJM + +XXFORM: INC E,DM3M3 ; I-BEAM CURSOR + INC DM3M3,DM20 + INC B30,B30 + INC B30,B30 + INC DM30,DM30 + INC B03,B03 + INC B03,B03 + INC B03,B03 + INC B03,B03 + INC DM30,DM30 + INC B30,B30 + INC B30,B30 + INC DM3M3,DM1M3 + INC D0M3,D0M3 + INC D0M3,D0M3 + INC X,X + DNOP + INC E,DM10 + INC BM2M3,BM2M3 + INC B20,B20 + INC B20,B20 + INC BM23,BM23 + INC D10,X +DWAIT: INC E,P + INC P,P ; 40 MICROSECOND WAIT + INC P,P + INC P,P + INC P,P + INC P,P + INC P,P + INC P,P + INC P,P + INC P,140 +D011: DLXA 170 + DJMP DWAIT + DLXA 320 + DJMP DWAIT + DLXA 450 + DJMP DWAIT + DLXA 600 + DJMP DWAIT + DLXA 730 + DJMP DWAIT + DLXA 1060 + DJMP DWAIT + DLXA 1210 + DJMP DWAIT + DLXA 1340 + DJMP DWAIT + DLXA 1470 + DJMP DWAIT + DLXA 1620 + DJMP DWAIT + DLXA 1750 + DJMP DWAIT + DLXA 2100 + DJMP DWAIT +D010: INC E,DM20 ; BACKSPACE + INC DM30,DM30 + INC DM30,X +D012: INC E,D0M3 ; LINE FEED + INC D0M3,D0M3 + INC D0M3,D0M3 + INC D0M3,D0M3 + INC X,X +D015: DLXA LEFT ; CARRIAGE RETURN + DRJM +D033: DJMS D117 ; ALTMODE + DJMS D010 + DJMP D044 + + .INSRT DSK:IMSRC;SSV CHARS + +DORIG: DADR + DHVS 1 +DEDLIN: DNOP + + DGD + DLYA TOP+40 + DLXA LEFT + DJMS D123 ; SSV.22 + DJMS D123 + DJMS D126 + DJMS D056 + DJMS D062 + DJMS D062 + + DGD + DLXA LEFT+300 + DJMS D103 ; CBUF= + DJMS D102 + DJMS D125 + DJMS D106 + DJMS D075 +DNUM1: DNOP + DNOP + DNOP + DNOP + + DGD + DLXA LEFT+600 +DTTY: DNOP + DJMS D124 ; TTY + DJMS D124 + DJMS D131 + DJMP DMODE +DEDIT: DJMS D105 ; EDIT + DJMS D104 + DJMS D111 + DJMS D124 +DMODE: DJMS D040 + DJMS D115 ; MODE + DJMS D117 + DJMS D104 + DJMS D105 + +DUCF: DJMP DAUTF + DGD + DLXA LEFT+1100 + DJMS D055 ; -UC- + DJMS D125 + DJMS D103 + DJMS D055 + +DAUTF: DNOP + DGD + DLXA LEFT+1220 + DJMS D055 ; -AUTO- + DJMS D101 + DJMS D125 + DJMS D124 + DJMS D117 + DJMS D055 + +DBELLI: DGD + DLXA 0 +DARROW: 0 + DJMS D075 ; => + DJMS D076 + + DGD + DLXA LEFT + DLYA TOP +TWANG: 0 ; DISPLAY DISPATCH POINT NO. 1 + 0 ; BUFFER ZERO TO MARK THE BEGINNING OF IT ALL +CURRY: 0 ; START OF ACTIVE DLIST + 0 + + END INIT diff --git a/src/imsrc/ssvchr.22 b/src/imsrc/ssvchr.22 new file mode 100644 index 00000000..68f7775e --- /dev/null +++ b/src/imsrc/ssvchr.22 @@ -0,0 +1,829 @@ +; This source code was reconstructed from disassembly of a copy of SSV +; from Purdue University. + +D040: INC E,D30 + INC D30,D30 + INC D20,X +D041: INC E,D13 + INC D13,D13 + INC D13,B0M3 + INC B0M3,B0M3 + INC D0M3,B00 + INC D30,D30 + INC D10,X +D042: INC E,D13 + INC D13,D03 + INC D03,B1M3 + INC D23,B1M3 + INC D3M3,D2M3 + INC D0M3,X +D043: INC E,B13 + INC B13,B13 + INC B13,DM2M3 + INC DM1M1,B30 + INC B20,B20 + INC D02,D02 + INC BM1M3,BM1M3 + INC BM1M3,BM1M3 + INC DM23,DM21 + INC B30,B20 + INC B20,D2M3 + INC D2M1,X +D044: INC E,D02 + INC B2M2,B20 + INC B20,B22 + INC B02,BM21 + INC BM21,BM21 + INC BM21,B02 + INC B22,B20 + INC B20,B2M2 + INC DM33,DM12 + INC B0M3,B0M3 + INC B0M3,B0M3 + INC B0M3,B0M3 + INC D33,D20 + INC D20,X +D045: INC E,B23 + INC B23,B23 + INC B23,DM3M2 + INC DM10,BM11 + INC BM10,BM1M1 + INC B0M2,B1M1 + INC B10,B11 + INC B02,D0M3 + INC D0M3,B11 + INC B10,B1M1 + INC B0M2,BM1M1 + INC BM10,BM11 + INC B02,D3M2 + INC D3M2,D10 + INC X,X +D046: INC E,D02 + INC B02,B23 + INC B23,B01 + INC BM11,BM10 + INC BM1M1,B0M1 + INC B2M3,B2M3 + INC B2M3,D13 + INC BM2M2,BM2M2 + INC BM20,BM22 + INC D3M2,D30 + INC D30,D20 + INC X,X +D047: INC E,D33 + INC D03,D03 + INC B23,D3M3 + INC D3M3,D0M3 + INC D0M3,X +D050: INC E,D33 + INC D33,D03 + INC D03,BM2M1 + INC BM1M2,B0M3 + INC B0M3,B1M2 + INC B2M1,D30 + INC D20,X +D051: INC E,D13 + INC D13,D03 + INC D03,B2M1 + INC B1M2,B0M3 + INC B0M3,BM1M2 + INC BM2M1,D30 + INC D30,D30 + INC X,X +D052: INC E,D23 + INC B23,B23 + INC DM20,DM20 + INC B2M3,B2M3 + INC D13,BM30 + INC BM30,D3M3 + INC D3M3,D30 + INC D10,X +D053: INC E,D32 + INC D11,B03 + INC B03,DM3M3 + INC B30,B30 + INC D3M3,D1M3 + INC X,X +D054: INC E,D3M3 + INC D10,B13 + INC B01,BM10 + INC B0M1,B10 + INC D30,D30 + INC X,X +D055: INC E,D13 + INC D13,B20 + INC B20,D3M3 + INC D2M3,X +D056: INC E,D20 + INC D20,B01 + INC B10,B0M1 + INC BM10,D30 + INC D30,D10 + INC X,X +D057: INC E,B23 + INC B23,B23 + INC B23,D3M3 + INC D0M3,D0M3 + INC D0M3,X + +D060: INC E,D03 + INC B03,B03 + INC B23,B20 + INC B20,B2M3 + INC B0M3,B0M3 + INC BM2M3,BM20 + INC BM20,BM23 + INC D0M3,B23 + INC B23,B23 + INC B23,D3M3 + INC D0M3,D0M3 + INC D0M3,X +D061: INC E,D33 + INC D03,D02 + INC D02,B12 + INC B10,B0M3 + INC B0M3,B0M3 + INC B0M3,DM20 + INC B20,B20 + INC D20,D20 + INC X,X +D062: INC E,D03 + INC D03,D03 + INC B23,B20 + INC B20,B2M3 + INC B0M2,BM2M1 + INC BM2M1,BM2M1 + INC BM2M1,B0M3 + INC B30,B30 + INC B20,D30 + INC X,X +D063: INC E,D03 + INC B2M3,B20 + INC B20,B23 + INC B01,BM32 + INC B32,B01 + INC BM23,BM20 + INC BM20,BM2M3 + INC D3M3,D3M3 + INC D3M3,D20 + INC X,X +D064: INC E,D30 + INC D20,B03 + INC B03,B03 + INC B03,BM10 + INC BM2M3,BM2M3 + INC B0M1,B30 + INC B30,B20 + INC D3M3,D0M2 + INC X,X +D065: INC E,D02 + INC B2M2,B20 + INC B20,B22 + INC B02,B02 + INC BM22,BM30 + INC BM30,B02 + INC B02,B30 + INC B20,B20 + INC D3M3,D1M3 + INC D0M3,D0M3 + INC X,X +D066: INC E,D20 + INC BM22,B03 + INC B02,B02 + INC B23,B20 + INC B20,B2M3 + INC DM3M2,DM3M2 + INC DM20,B22 + INC B20,B20 + INC B2M2,B0M3 + INC BM2M2,BM20 + INC BM20,D30 + INC D30,D30 + INC X,X +D067: INC E,D03 + INC D03,D03 + INC B13,B30 + INC B20,B20 + INC BM1M3,BM1M3 + INC BM1M3,BM1M3 + INC D30,D20 + INC D20,X + +D070: INC E,D20 + INC BM22,B02 + INC B22,B20 + INC B20,B22 + INC B02,BM22 + INC BM20,BM20 + INC BM2M2,B0M2 + INC B2M2,D20 + INC D20,B2M2 + INC B0M2,BM2M2 + INC BM20,BM20 + INC D30,D30 + INC D30,X +D071: INC E,D03 + INC B2M3,B20 + INC B20,B23 + INC B03,B02 + INC B02,BM22 + INC BM20,BM20 + INC BM2M2,B0M3 + INC B2M2,B20 + INC B20,B22 + INC D3M3,D0M2 + INC D0M2,X +D072: INC E,D20 + INC D20,B01 + INC B10,B0M1 + INC BM10,D02 + INC D02,B01 + INC B10,B0M1 + INC BM10,D3M3 + INC D3M1,D10 + INC X,X +D073: INC E,D3M3 + INC D10,B13 + INC B01,BM10 + INC B0M1,B10 + INC D02,D02 + INC B01,BM10 + INC B0M1,B10 + INC D3M2,D3M2 + INC X,X +D074: INC E,D31 + INC D31,BM22 + INC BM22,B22 + INC B22,D3M3 + INC D2M3,D0M2 + INC D0M2,X +D075: INC E,D23 + INC D02,B20 + INC B20,D02 + INC BM20,BM20 + INC D3M3,D3M3 + INC D3M1,X +D076: INC E,D22 + INC B22,B22 + INC BM22,BM22 + INC D3M3,D3M3 + INC D3M3,D0M1 + INC X,X +D077: INC E,D03 + INC D03,D03 + INC B23,B20 + INC B20,B2M3 + INC B0M2,BM2M2 + INC BM2M2,B0M1 + INC D0M2,B00 + INC D30,D20 + INC D20,X + +D100: INC E,D33 + INC D33,D21 + INC BM21,BM20 + INC BM2M1,B0M3 + INC B2M1,B20 + INC B21,B03 + INC B01,BM13 + INC BM11,BM20 + INC BM20,BM1M1 + INC BM1M3,B0M2 + INC B0M2,B1M3 + INC B1M1,B20 + INC B20,B22 + INC D3M2,X +D101: INC E,B13 + INC B13,B13 + INC B13,B1M3 + INC B1M3,B1M3 + INC B1M3,DM13 + INC BM30,BM30 + INC D3M3,D30 + INC D30,D10 + INC X,X +D102: INC E,B03 + INC B03,B03 + INC B03,B30 + INC B20,B3M2 + INC B0M2,BM3M2 + INC BM30,BM20 + INC D30,D20 + INC B3M2,B0M2 + INC BM3M2,BM30 + INC BM20,D30 + INC D30,D30 + INC D20,X +D103: INC E,D20 + INC BM23,B03 + INC B03,B23 + INC B20,B20 + INC B2M3,D0M3 + INC D0M3,BM2M3 + INC BM20,BM20 + INC D30,D30 + INC D30,X +D104: INC E,B03 + INC B03,B03 + INC B03,B20 + INC B20,B2M1 + INC B2M3,B0M2 + INC B0M2,BM2M3 + INC BM2M1,BM20 + INC BM20,D30 + INC D30,D30 + INC D20,X +D105: INC E,B03 + INC B03,B03 + INC B03,B30 + INC B30,B20 + INC DM2M3,DM1M3 + INC BM30,BM20 + INC D0M3,D0M3 + INC B30,B30 + INC B20,D30 + INC X,X +D106: INC E,B03 + INC B03,B03 + INC B03,B30 + INC B30,B20 + INC DM3M3,D0M3 + INC BM30,BM20 + INC D3M3,D3M3 + INC D30,D20 + INC X,X +D107: INC E,D20 + INC BM23,B03 + INC B03,B23 + INC B20,B20 + INC B2M3,DM3M3 + INC B30,B0M3 + INC BM2M3,BM20 + INC BM20,D30 + INC D30,D30 + INC X,X +D110: INC E,B03 + INC B03,B03 + INC B03,D0M3 + INC D0M3,B30 + INC B30,B20 + INC B03,B03 + INC D0M3,D0M3 + INC B0M3,B0M3 + INC D30,X +D111: INC E,D20 + INC B20,B20 + INC DM20,B03 + INC B03,B03 + INC B03,D20 + INC BM20,BM20 + INC D3M3,D3M3 + INC D3M3,D0M3 + INC X,X +D112: INC E,D12 + INC B1M2,B20 + INC B12,B03 + INC B03,B02 + INC B02,D20 + INC BM20,BM30 + INC D3M3,D3M3 + INC D3M3,D0M3 + INC X,X +D113: INC E,B03 + INC B03,B03 + INC B03,D30 + INC D30,D20 + INC BM3M3,BM3M3 + INC BM2M2,D22 + INC B3M3,B3M3 + INC D30,X +D114: INC E,D03 + INC D03,D03 + INC D03,B0M3 + INC B0M3,B0M3 + INC B0M3,B30 + INC B30,B20 + INC D30,X +D115: INC E,B03 + INC B03,B03 + INC B03,B2M3 + INC B2M3,B23 + INC B23,B0M3 + INC B0M3,B0M3 + INC B0M3,D30 + INC X,X +D116: INC E,B03 + INC B03,B03 + INC B03,B2M3 + INC B2M3,B2M3 + INC B2M3,B03 + INC B03,B03 + INC B03,D3M3 + INC D0M3,D0M3 + INC D0M3,X +D117: INC E,D03 + INC B03,B03 + INC B23,B20 + INC B20,B2M3 + INC B0M3,B0M3 + INC BM2M3,BM20 + INC BM20,BM23 + INC D3M3,D30 + INC D30,D20 + INC X,X + +D120: INC E,B03 + INC B03,B03 + INC B03,B30 + INC B20,B3M2 + INC B0M2,BM3M2 + INC BM30,BM20 + INC D3M3,D3M3 + INC D30,D20 + INC X,X +D121: INC E,D03 + INC B03,B03 + INC B23,B20 + INC B20,B2M3 + INC B0M3,B0M3 + INC BM2M3,BM20 + INC BM20,BM23 + INC D30,D20 + INC B3M3,D30 + INC X,X +D122: INC E,B03 + INC B03,B03 + INC B03,B30 + INC B20,B3M2 + INC B0M2,BM3M2 + INC BM30,BM20 + INC D30,D20 + INC B1M2,B1M2 + INC B1M2,D30 + INC X,X +D123: INC E,D02 + INC B2M2,B20 + INC B20,B22 + INC B02,BM21 + INC BM21,BM21 + INC BM21,B02 + INC B22,B20 + INC B20,B2M2 + INC D3M3,D0M3 + INC D0M2,D0M2 + INC X,X +D124: INC E,D20 + INC D20,B03 + INC B03,B03 + INC B03,D20 + INC D20,BM30 + INC BM30,BM20 + INC D3M3,D3M3 + INC D3M3,D2M3 + INC X,X +D125: INC E,D03 + INC D03,D03 + INC D03,B0M3 + INC B0M3,B0M3 + INC B2M3,B20 + INC B20,B23 + INC B03,B03 + INC B03,D3M3 + INC D0M3,D0M3 + INC D0M3,X +D126: INC E,D03 + INC D03,D03 + INC D03,B1M3 + INC B1M3,B1M3 + INC B1M3,B13 + INC B13,B13 + INC B13,D3M3 + INC D0M3,D0M3 + INC D0M3,X +D127: INC E,D03 + INC D03,D03 + INC D03,B0M3 + INC B0M3,B0M3 + INC B2M3,B10 + INC B13,B1M3 + INC B10,B23 + INC B03,B03 + INC B03,D3M3 + INC D0M3,D0M3 + INC D0M3,X +D130: INC E,B23 + INC B23,B23 + INC B23,DM30 + INC DM30,DM20 + INC B2M3,B2M3 + INC B2M3,B2M3 + INC D30,X +D131: INC E,D20 + INC D20,B03 + INC B03,B23 + INC B23,DM30 + INC DM30,DM20 + INC B2M3,B2M3 + INC D3M3,D3M3 + INC D10,X +D132: INC E,D03 + INC D03,D03 + INC D03,B30 + INC B30,B20 + INC BM2M3,BM2M3 + INC BM2M3,BM2M3 + INC B30,B30 + INC B20,D30 + INC X,X +D133: INC E,D33 + INC D33,D03 + INC D03,BM30 + INC B0M3,B0M3 + INC B0M3,B0M3 + INC B30,D30 + INC D20,X +D134: INC E,D03 + INC D03,D03 + INC D03,B2M3 + INC B2M3,B2M3 + INC B2M3,D30 + INC X,X +D135: INC E,D23 + INC D03,D03 + INC D03,B30 + INC B0M3,B0M3 + INC B0M3,B0M3 + INC BM30,D30 + INC D30,D30 + INC X,X +D136: INC E,D13 + INC D03,D03 + INC B32,B3M2 + INC D3M3,D1M3 + INC D0M3,X +D137: INC E,DM1M2 + INC B30,B30 + INC B30,B20 + INC D12,X + +D140: INC E,D33 + INC D03,D03 + INC D03,B2M3 + INC D3M3,D3M3 + INC D0M3,X +D141: INC E,D13 + INC D03,D01 + INC B11,B20 + INC B20,B1M1 + INC B0M3,B0M2 + INC B0M2,D01 + INC BM2M1,BM20 + INC BM21,B03 + INC B21,B20 + INC B2M1,D3M3 + INC D1M1,X +D142: INC E,D10 + INC B03,B03 + INC B03,B02 + INC D0M3,D0M2 + INC B22,B20 + INC B2M2,B0M2 + INC B0M2,BM2M2 + INC BM20,BM22 + INC D3M2,D30 + INC D30,D10 + INC X,X +D143: INC E,D33 + INC D33,D10 + INC BM22,BM20 + INC BM2M2,B0M2 + INC B0M2,B2M2 + INC B20,B22 + INC D3M2,D10 + INC X,X +D144: INC E,D33 + INC D33,D13 + INC D02,B0M3 + INC B0M3,B0M3 + INC B0M2,D02 + INC BM2M2,BM20 + INC BM22,B02 + INC B02,B22 + INC B20,B2M2 + INC D3M3,D1M3 + INC X,X +D145: INC E,D12 + INC D02,B30 + INC B30,B02 + INC BM22,BM20 + INC BM2M2,B0M2 + INC B0M2,B2M2 + INC B20,B22 + INC D2M1,D2M1 + INC X,X +D146: INC E,D10 + INC B03,B03 + INC B03,B22 + INC B20,B2M2 + INC B0M1,DM3M2 + INC BM30,D3M3 + INC D3M3,D20 + INC D20,X +D147: INC E,D1M1 + INC B2M2,B20 + INC B22,B03 + INC B03,B03 + INC D0M2,BM22 + INC BM20,BM2M2 + INC B0M2,B0M2 + INC B2M2,B20 + INC B22,D2M1 + INC D2M1,X +D150: INC E,D10 + INC B03,B03 + INC B03,B02 + INC D0M3,D0M2 + INC B22,B20 + INC B2M2,B0M3 + INC B0M3,D30 + INC D10,X +D151: INC E,D3M1 + INC D20,BM11 + INC B03,B03 + INC B02,D02 + INC B00,D3M3 + INC D3M3,D1M3 + INC D0M1,X +D152: INC E,D2M1 + INC B1M2,B10 + INC B12,B03 + INC B03,B03 + INC D02,B00 + INC D3M3,D3M3 + INC D0M2,D0M2 + INC X,X +D153: INC E,D10 + INC B03,B03 + INC B03,B02 + INC D3M3,D30 + INC BM2M1,BM2M1 + INC BM2M1,D21 + INC B2M3,B2M3 + INC D20,D20 + INC X,X +D154: INC E,D33 + INC D13,D03 + INC D02,B0M3 + INC B0M3,B0M3 + INC B0M2,B1M1 + INC D31,D30 + INC X,X +D155: INC E,B03 + INC B02,B02 + INC B11,B10 + INC B2M3,B23 + INC B10,B1M1 + INC B0M3,B0M2 + INC B0M2,D30 + INC X,X +D156: INC E,D10 + INC B03,B03 + INC B02,D0M2 + INC B22,B20 + INC B2M2,B0M3 + INC B0M3,D30 + INC D10,X +D157: INC E,D12 + INC B02,B02 + INC B22,B20 + INC B2M2,B0M2 + INC B0M2,BM2M2 + INC BM20,BM22 + INC D3M2,D30 + INC D20,D20 + INC X,X +D160: INC E,D1M3 + INC B03,B03 + INC B03,B02 + INC D0M2,B22 + INC B20,B2M2 + INC B0M2,B0M2 + INC BM2M2,BM20 + INC BM22,D3M2 + INC D30,D20 + INC D20,X +D161: INC E,D12 + INC B02,B02 + INC B22,B20 + INC B2M2,D02 + INC B0M3,B0M3 + INC B0M3,B0M2 + INC D03,D02 + INC BM2M2,BM20 + INC BM22,D3M2 + INC D30,D20 + INC D20,X +D162: INC E,D10 + INC B03,B03 + INC B02,D0M2 + INC B22,B20 + INC B2M2,D3M3 + INC D1M3,X +D163: INC E,D12 + INC B2M2,B20 + INC B22,B01 + INC BM31,BM31 + INC B01,B22 + INC B20,B2M2 + INC D3M3,D1M3 + INC X,X +D164: INC E,D33 + INC D33,D02 + INC BM20,BM20 + INC D23,B0M3 + INC B0M3,B0M3 + INC B0M2,B1M1 + INC D31,D30 + INC X,X +D165: INC E,D13 + INC D03,D02 + INC B0M3,B0M3 + INC B2M2,B20 + INC B22,B03 + INC B03,D0M3 + INC D0M3,B0M2 + INC D20,D20 + INC X,X +D166: INC E,D13 + INC D03,D02 + INC B0M2,B1M3 + INC B1M3,B20 + INC B13,B13 + INC B02,D3M3 + INC D1M3,D0M2 + INC X,X +D167: INC E,D03 + INC D03,D02 + INC B0M3,B0M3 + INC B1M2,B10 + INC B23,B2M3 + INC B10,B12 + INC B03,B03 + INC D3M3,D0M3 + INC D0M2,X +D170: INC E,D10 + INC B23,B22 + INC B23,DM30 + INC DM30,B2M3 + INC B2M2,B2M3 + INC D20,D20 + INC X,X +D171: INC E,D1M1 + INC B2M2,B20 + INC B22,B03 + INC B03,B03 + INC DM30,DM30 + INC B0M3,B0M3 + INC B2M2,B20 + INC B22,D3M2 + INC D10,X +D172: INC E,D13 + INC D03,D02 + INC B30,B30 + INC BM2M3,BM2M2 + INC BM2M3,B30 + INC B30,D20 + INC D20,X +D173: INC E,D33 + INC D33,D03 + INC D03,BM10 + INC BM1M1,B0M2 + INC B0M2,BM1M1 + INC B1M1,B0M2 + INC B0M2,B1M1 + INC B10,D30 + INC D20,X +D174: INC E,D13 + INC D13,D13 + INC D13,D03 + INC B0M3,B0M3 + INC B0M3,B0M3 + INC B0M3,B0M3 + INC D33,D30 + INC D10,X +D175: INC E,D23 + INC D03,D03 + INC D03,B10 + INC B1M1,B0M2 + INC B0M2,B1M1 + INC BM1M1,B0M2 + INC B0M2,BM1M1 + INC BM10,D30 + INC D30,D30 + INC X,X +D176: INC E,D13 + INC D03,D03 + INC B22,B2M2 + INC B22,D3M3 + INC D1M3,D0M3 + INC D0M2,X