home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG034.ARK / EXTF.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  18KB  |  1,544 lines

  1. .RADIX 8
  2. .PABS
  3. .XLINK
  4. .XSYM
  5. .SALL
  6. CONFIG=    \"Config <1/z,2pol,3/cpml,4/cpmh>?- "
  7. Z80=    \"Z80 <y1/n0>?- "
  8. MONCLK=    \"Clock <1comptek/2computime>?- "
  9. ;
  10. .ife z80,[RSTINT=1]
  11. .ife z80-1,[RSTINT=0]
  12. ;
  13. .IFE CONFIG-2,[
  14. POL88=1
  15. EXTLOC=    ^H1800
  16. PARAM=    ^H5200
  17. $COM=    ^H5000
  18. BEGIN=    ^H2000]
  19. ;
  20. .IFE CONFIG-3,[
  21. EXTLOC=    ^H400
  22. PARAM=    ^H3400
  23. $COM=    ^H100
  24. BEGIN=    ^H1000]
  25. ;
  26. .IFE CONFIG-4,[
  27. EXTLOC=    ^H0A400
  28. PARAM=    ^H400
  29. $COM=    ^H100
  30. BEGIN=    ^H8000]
  31. ;
  32. PRINIT=BEGIN+^D12
  33. ;
  34. KRET=    ^H0C9
  35. KINP=    ^H0DB
  36. ;
  37. .IFNDEF CALEN,[
  38. CALEN=    0]
  39. ;
  40. .IFE MONCLK-1,[
  41. CLKBAS=    250]
  42. ;
  43. .IFE MONCLK-2,[
  44. CALEN=    2
  45. CLKBAS=    ^H50
  46. ]
  47. ;
  48. COMMON=1
  49. ;
  50. ;****** boiler plate starts *******
  51.     .XLIST
  52. $$SAE=    ^D1
  53. $$SAS=    ^D2
  54. $$SWA=    ^D3
  55. $$SRB=    ^D4
  56. $$SER=    ^D5
  57. $$SLK=    ^D6
  58. $$RXQ=    ^D7
  59. $$SGT=    ^D8
  60. $$SXX=    ^D9
  61. $$RQQ=    ^D10
  62. $$SNQ=    ^D11
  63. $$SRA=    ^D12
  64. $$RVA=    ^D13
  65. $$SHK=    ^D14
  66. $$SPK=    ^D15
  67. $$SLF=    ^D16
  68. $$RNA=    ^D17
  69. $$RNH=    ^D18
  70. $$SAT=    ^D19
  71. $$SFA=    ^D20
  72. $$SDS=    ^D21
  73. $$SDD=    ^D22
  74. $$SWS=    ^D23
  75. $$SAN=    ^D24
  76. $$SFS=    ^D25
  77. $$SGV=    ^D26
  78. $$SSB=    ^D27
  79. $$SPA=    ^D28
  80. $$SRQ=    ^D29
  81. $$SPL=    ^D30
  82. $$RAC=    ^D31
  83. $$RAD=    ^D32
  84. $$RAY=    ^D33
  85. $$RAZ=    ^D34
  86. $$STO=    ^D35
  87. $$STI=    ^D36
  88. $$STL=    ^D37
  89. $$SPR=    ^D38
  90. $$SHR=    ^D39
  91. $$SGQ=    ^D40
  92. $$SXB=    ^D41
  93. $$SXC=    ^D42
  94. $$SUP=    ^D43
  95. $$SMN=    ^D44
  96. $$SDV=    ^D45
  97. $$SUB=    ^D46
  98. $$SPO=    ^D47
  99. $$SRI=    ^D48
  100. $$SXL=    ^D49
  101. $$SLD=    ^D50
  102. ;[DEUQ]
  103. ;
  104. .SYN    RC,JRQC
  105. .SYN    RZ,JRQZ
  106. .SYN    RNC,JRQNC
  107. .SYN    RNZ,JRQNZ
  108. .SYN    RM,JRQM
  109. ;
  110. ;
  111. ;[DEUM]
  112. ;
  113. .DEFINE LINKJ[ADR]=
  114. [    JMP    $COM+3*ADR]
  115. ;
  116. .DEFINE LINKC[ADR]=
  117. [    CALL    $COM+3*ADR]
  118. ;
  119. .DEFINE SKIP1=
  120. [    .BYTE    376]
  121. .DEFINE .T[A,B,C,ADR]=
  122. [.WORD    ((B&7)<15)+((C&37)<10)+((A&37)<2)+((B&30)>3)
  123. .IFNDEF ADR,[
  124.     .WORD    0]
  125. .IFDEF ADR,[
  126.     .WORD    ADR]
  127.  ]
  128. .DEFINE MTAB[TAB]=
  129. [    LXI    H,TAB]
  130. .DEFINE TTAB[M1,M2,ADR]=
  131. [    .BYTE    (M1 & N137) 
  132.     .BYTE    (M2 & N137) 
  133.     .WORD    ADR]
  134. .DEFINE DINX[REG]=
  135. [    INX    REG
  136.     INX    REG]
  137. .DEFINE DDCX[REG]=
  138. [    DCX    REG
  139.     DCX    REG]
  140. .DEFINE JCLA=
  141. [    XRA    A]
  142. .DEFINE DSUB[SBT]=
  143. [    XCHG
  144.     LHLD    SBT
  145.     CALL    MSUB]
  146. .DEFINE TSTA=
  147. [    ORA    A]
  148. .DEFINE MJST2[PTR]=
  149. [    LHLD    PTR+2
  150.     XCHG
  151.     LHLD    PTR
  152.     CALL    MST2]
  153. .DEFINE MBTEST[TEMP]=
  154. [    LDA    TEMP
  155.     TSTA]
  156. .DEFINE MMOVE[PTR]=
  157. [    LHLD    PTR+2
  158.     XCHG
  159.     LHLD    PTR]
  160. .DEFINE SKIP2[REG]=
  161. [.BYTE    001!(((REG)&6)<3)]
  162. ;
  163. .DEFINE MJSSR[TO,FRM,FRME]=;def
  164. [    LHLD    FRM
  165.     MOV    B,H
  166.     MOV    C,L
  167.     LHLD    TO
  168.     XCHG
  169.     LHLD    FRME
  170.     CALL    MSHR
  171.     SHLD    FRME]
  172. ;
  173. ;
  174. ;[DEUZ1]
  175. ;
  176. .SYN RET,JRQ
  177. .IFE Z80,[
  178. .SYN JMP,.JMPR
  179. .SYN JNC,.JRNC
  180. .SYN JC,.JRC
  181. .SYN JNZ,.JRNZ
  182. .SYN JZ,.JRZ
  183. ;
  184. .DEFINE MJSSA[FROM,TO,LNGTH]=
  185. [    LXI    B,LNGTH
  186.     LXI    H,FROM
  187.     LXI    D,TO
  188. ;
  189.     CALL    MSSA]
  190. .DEFINE .DJNZ[ADR]=
  191. [    DCR    B
  192.     JNZ    ADR]
  193. ;
  194. .DEFINE MDSBCD=
  195. [    MOV    A,L
  196.     SUB    E
  197.     MOV    L,A
  198.     MOV    A,H
  199.     SBB    D
  200.     MOV    H,A]
  201.  ]
  202. ;
  203. ;
  204. .IFG Z80,[
  205. .SYN JMPR,.JMPR
  206. .SYN JRNC,.JRNC
  207. .SYN JRC,.JRC
  208. .SYN JRNZ,.JRNZ
  209. .SYN JRZ,.JRZ
  210. ;
  211. .DEFINE MJSSA[FROM,TO,LNGTH]=
  212. [    LXI    B,LNGTH
  213.     LXI    H,FROM
  214.     LXI    D,TO
  215.     LDIR]
  216. .DEFINE .DJNZ[ADR]=
  217. [    DJNZ    ADR]
  218. .DEFINE MDSBCD=
  219. [    JCLA
  220.     DSBC    D]
  221.  ]
  222. ;
  223. ;
  224. P=PARAM
  225. VAR1=    P+14
  226. BOOT=    P+15
  227. MSCI=    P+17
  228. MSRI=    P+22
  229. MSCO=    P+25
  230. MSPO=    P+30
  231. MSLO=    P+33
  232. mscsts=    P+36
  233. MSCHK=    P+41
  234. MSSET=    P+44
  235. MSMCK=    P+47
  236. MSBDOS=    P+52
  237. PSEsym=    P+55
  238. PUIsym=    P+57
  239. PUOsym=    P+61
  240. PULsym=    P+63
  241. TAMsym=    P+65
  242. POAsym=    P+67
  243. POBsym=    P+71
  244. POCsym=    P+73
  245. PODsym=    P+75
  246. PSWsym=    P+77
  247. PSYsym=    P+101
  248. PWAsym=    P+103
  249. tr=    P+105
  250. te=    P+106
  251. RIX=    P+107
  252. BIX=    P+110
  253. MCH=    P+111
  254. TCE=    P+112
  255. CE=    P+114
  256. INPsym=    P+116
  257. OUTsym=    P+120
  258. SPRW3=    P+122
  259. LDRCNL=    P+123
  260. LDRCNH=    P+124
  261. RUBOT=    P+125
  262. RUBO1=    P+126
  263. RUBO2=    P+127
  264. NULCH=    P+130
  265. NULCT=    P+131
  266. PLIN=    P+132
  267. KYN1=    P+133
  268. KYN2=    P+134
  269. CWSAF=    P+135
  270. CWSNF=    P+136
  271. CWSEF=    P+137
  272. CWSPF=    P+140
  273. CWMBF=    P+141
  274. CWMAF=    P+142
  275. CWMNF=    P+143
  276. CWCAS=    P+144
  277. CWCQC=    P+145
  278. CWUNP=    P+146
  279. CWBP1=    P+147
  280. CWEP1=    P+150
  281. CWBP2=    P+151
  282. CWEP2=    P+152
  283. CWBMF=    P+153
  284. CWEMF=    P+154
  285. ENDWC=    P+155
  286. FUTUR0=    P+156
  287. FUTUR1=    P+157
  288. SYN=    P+161
  289. CPCM=    P+167
  290. SYN1=    P+171
  291. SYNR=    P+173
  292. SYNR1=    P+175
  293. CPRP=    P+177
  294. SCEK=    P+204
  295. S1=    P+211
  296. S2=    P+212
  297. S3=    P+213
  298. DSYS1=    P+215
  299. DSYS2=    P+217
  300. DSYS3=    P+221
  301. DSYS4=    P+223
  302. DEXT=    P+225
  303. JMP1TS=    P+230
  304. JMP2TS=    P+231
  305. TAEsym=    P+232
  306. TAHsym=    P+234
  307. TALsym=    P+236
  308. PWR=    P+240
  309. PAE=    P+242
  310. PEL=    P+244
  311. PFL=    P+246
  312. ZERO=    P+250
  313. EXFLG=    P+251
  314. PG1=    P+252
  315. PG1A=    P+253
  316. PG2=    P+254
  317. PG2A=    P+255
  318. BASE=    P+256
  319. LT=    P+257
  320. CH=    P+261
  321. PFI=    P+262
  322. PFF=    P+264
  323. PFN=    P+266
  324. PFT=    P+270
  325. T1=    P+272
  326. T2=    P+274
  327. T3=    P+276
  328. PAL2=    P+300
  329. PAN2=    P+302
  330. PAL=    P+304
  331. PAN=    P+306
  332. PALPL=    P+310
  333. PANPN=    P+312
  334. T4=    P+314
  335. T5=    P+316
  336. T6=    P+320
  337. T7=    P+322
  338. T8=    P+324
  339. T9=    P+326
  340. ADS32=    P+330
  341. ADS33=    P+332
  342. RAND=    P+334
  343. CHA1=    P+336
  344. CHA2=    P+340
  345. PAL21=    P+342
  346. SMSW=    P+344
  347. NULF=    P+345
  348. PNF=    P+346
  349. PNFI=    P+347
  350. ARG1=    P+350
  351. ARG2=    P+352
  352. ARG3=    P+354
  353. TM1=    P+356
  354. MOQOV=    P+357
  355. PCNT=    P+362
  356. ZCNT=    P+363
  357. IOBYT=    P+421
  358. SAMBYT=    P+422
  359. KTRAK=    P+423
  360. DISK1=    P+425
  361. DISK2=    P+427
  362. DISK3=    P+431
  363. DISK4=    P+433
  364. DISK5=    P+435
  365. DISK6=    P+437
  366. DISK7=    P+441
  367. CALDA=    P+443
  368. SAMJM1=    P+446
  369. JMP1AD=    P+447
  370. QWSD0=    P+451
  371. PLTNX=    P+454
  372. PLTNY=    P+456
  373. PLTQD=    P+460
  374. PLTPN=    P+462
  375. PLTCM=    P+463
  376. PLTSX=    P+464
  377. PLTSY=    P+465
  378. PLTWL=    P+466
  379. PLTWR=    P+470
  380. PLTVM=    P+472
  381. TM2=    P+473
  382. TC3=    P+475
  383. TCECT=    P+477
  384. TCEAN=    P+501
  385. SERFLG=    P+502
  386. PKFLG=    P+503
  387. RSTHLD=    P+504
  388. USER1=    P+513
  389. USER1A=    P+514
  390. USER2=    P+515
  391. USER2A=    P+516
  392. USER3=    P+517
  393. USER3A=    P+520
  394. USER4=    P+521
  395. USER4A=    P+522
  396. REGSAV=    P+523
  397. ;[CONSTANTS]
  398. ;
  399. N10=10
  400. N11=11
  401. N12=12
  402. N13=13
  403. N14=14
  404. N15=15
  405. N16=16
  406. N17=17
  407. N20=20
  408. N21=21
  409. N24=24
  410. N30=30
  411. N34=34
  412. N37=37
  413. N40=40
  414. N50=50
  415. N51=51
  416. N60=60
  417. N70=70
  418. N74=74
  419. N76=76
  420. N77=77
  421. N100=100
  422. N110=110
  423. N137=137
  424. N144=144
  425. N133=133
  426. N135=135
  427. N177=177
  428. N200=200
  429. N202=202
  430. N277=277
  431. N300=300
  432. N340=340
  433. N34=34
  434. N377=377
  435. N1K=1000
  436. N1750=1750
  437. N10K=10000
  438. N100K=100000
  439. N2342=23420
  440. ;
  441. K400K=200
  442. K500K=240
  443. K600K=300
  444. K700K=340
  445. ;
  446. KABM=    K600K<N10
  447. KABN=    K700K<N10
  448. KABF=    K400K<N10
  449. KACM=    K500K<N10
  450. ;
  451. N400=400
  452. N47=47
  453. ;
  454. KCRLF=4215
  455. ;
  456. ;[DEU2]
  457. ;
  458. .IFE RSTINT,[
  459. .DEFINE JSLK=
  460. [    RST    6]
  461. .DEFINE JSER=
  462. [    RST    5]
  463. .DEFINE JSWA=
  464. [    RST    3]
  465. .DEFINE JSAS=
  466. [    RST    2]
  467. .DEFINE JSRB=
  468. [    RST    4]
  469. .DEFINE JSAE=
  470. [    RST    1]
  471. ]
  472. ;
  473. .IFG RSTINT,[
  474. .DEFINE JSAE=
  475. [    CALL    MSAE]
  476. .DEFINE JSAS=
  477. [    CALL    MSAS]
  478. .DEFINE JSWA=
  479. [    CALL    MSWA]
  480. .DEFINE JSRB=
  481. [    CALL    MSRB]
  482. .DEFINE JSER=
  483. [    CALL    MSER]
  484. .DEFINE JSLK=
  485. [    CALL    MSLK]
  486. ]
  487. ;
  488. ;
  489. ;
  490. .IFDEF COMMON,[
  491. MSAE=    $COM+3*$$SAE
  492. MSAS=    $COM+3*$$SAS
  493. MSWA=    $COM+3*$$SWA
  494. MSRB=    $COM+3*$$SRB
  495. MSER=    $COM+3*$$SER
  496. MSLK=    $COM+3*$$SLK
  497.  ]
  498. ;
  499. ;
  500. CCNUL=    0
  501. CCSOH=    1
  502. CCSTX=    2
  503. CCETX=    3
  504. CCEOT=    4
  505. CCENQ=    5
  506. CCACK=    6
  507. CCBEL=    7
  508. CCBS=    10
  509. CCHT=    11
  510. CCLF=    12
  511. CCVT=    13
  512. CCFF=    14
  513. CCCR=    15
  514. CCSO=    16
  515. CCSI=    17
  516. ;
  517. CCDLE=    20
  518. CCDC1=    21
  519. CCDC2=    22
  520. CCDC3=    23
  521. CCDC4=    24
  522. CCNAK=    25
  523. CCSYN=    26
  524. CCETB=    27
  525. CCCAN=    30
  526. CCEM=    31
  527. CCSUB=    32
  528. CCESC=    33
  529. CCFS=    34
  530. CCGS=    35
  531. CCRS=    36
  532. CCUS=    37
  533. ;
  534.     .LIST
  535. ;******** boiler plate ends *******
  536.     .LOC    EXTLOC
  537. ;
  538. ;
  539. EXTTAB:
  540. .T "E","X","T",EXTQQ; extended functions
  541. ;
  542. ;[$271/XU]
  543. ;
  544. $271:    MTAB    XUTABQ
  545. SPKSUB:    LINKC    $$SPK
  546.     RC
  547.     PCHL
  548. ;
  549. XULF:    MTAB    XUTABQ
  550.     LINKJ    $$SLF
  551. ;
  552. XUTABQ:    .BYTE    (XUTABE - XUTABB) / 4
  553. XUTABB:
  554. .T "D","M"," ",XUDM;    Duplicate Memory "fill"
  555. .T "D","T"," ",XUDT;    "X" base Define Text
  556. .T "F","M"," ",XUFM;    Fetch Memory
  557. .T "F","T"," ",XUFT;    "X" base Fetch Text
  558. .T "L","F"," ",XULF;    List "XU" functions
  559. .T "M","M"," ",XUMM;    Move Memory
  560. .T "R","C","V",XURCV;    Receive
  561. .T "R","L"," ",XURL;    Read Labelled location
  562. .T "S","U","M",XUSUM;    Sum Memory
  563. .T "T","M"," ",XUTM;    Type Memory
  564. .T "V","M"," ",XUVM;    Verify Memory
  565. .T "W","L"," ",XUWL;    Write in Labelled location
  566. .T "X","M","T",XUXMT;    X"trans"mit
  567. XUTABE:
  568. ;[XURL]
  569. XURL:    LINKC    $$SXL
  570.     MOV    A,M
  571.     INX    H
  572.     MOV    H,M
  573.     MOV    L,A
  574.     LINKJ    $$SXC;h&l
  575. ;
  576. ;
  577. ;[XUDT]
  578. XUDT:    LINKC    $$SFA
  579.     .JRC    XUDT1
  580.     LINKC    $$SDD
  581. XUDT1:    LINKC    $$SPL
  582.     PUSH    H
  583.     MOV    L,A
  584.     MOV    H,A
  585. XUDT2:    LINKC    $$SAE
  586.     .JRC    XUDT3
  587.     INX    H
  588.     JSAS
  589.     .jmpr    XUDT2
  590. ;
  591. XUDT3:    SHLD    PAN
  592.     POP    H
  593.     SHLD    PAL
  594.     MVI    A,200
  595.     LINKC    $$SDS
  596. XUDT4:    LINKC    $$SNQ
  597.     PUSH    H
  598.     LINKC    $$SXX
  599.     POP    H
  600.     INX    H
  601.     MOV    M,C
  602.     .jmpr    XUDT4
  603. ;
  604. ;
  605. ;[XUFT]
  606. XUFT:    LINKC    $$SFA
  607.     RC;jrqc
  608.     JSER
  609.     JSAS
  610. XUFT1:    JSRB
  611.     RC;jrqc
  612.     LINKC    $$SAT
  613.     LINKC    $$SXB;c
  614.     .jmpr    XUFT1
  615. ;
  616. ;
  617. ;[XUFM]
  618. XUFM:    JSER
  619.     call    FROMT2
  620. ;
  621. XUFM1:    LINKC    $$SAT
  622.     MOV    C,M
  623.     LINKC    $$SXB;c
  624.     call    HILOQ
  625.     .jmpr    XUFM1
  626. ;
  627. ;
  628. ;[XUSUM]
  629. XUSUM:    call    FROMT2
  630.     JCLA
  631. XUSUM1:    ADD    M
  632.     MOV    C,A
  633.     call    HILOT
  634.     MOV    A,C
  635.     .JRC    XUSUM1
  636.     LINKJ    $$SXB;c
  637. ;
  638. ;
  639. HILOQ:    call    HILOT
  640.     RC
  641.     POP    D
  642.     RET
  643. HILOT:    MOV    A,L
  644.     SUB    E
  645.     MOV    A,H
  646.     SBB    D
  647.     INX    H
  648.     RET
  649. ;
  650. ;
  651. NUDSET:    MVI    A,2
  652.     STA    NULF
  653. ;
  654. FROMT2:    LINKC    $$SXX
  655.     PUSH    H
  656.     LINKC    $$SXX
  657.     XCHG
  658.     POP    H
  659.     RET
  660. ;
  661. FROMT3:    call    FROMT2
  662.     PUSH    H
  663.     LINKC    $$SXX
  664.     POP    H
  665.     RET
  666. ;
  667. ;[XUDM]
  668. XUDM:    call    FROMT3
  669. ;
  670. XUDM1:    MOV    M,C
  671.     call    HILOQ
  672.     .jmpr    XUDM1
  673. ;
  674. ;
  675. ;[XUMM]
  676. XUMM:    call    FROMT3
  677. ;
  678. XUMM1:    MOV    A,M
  679.     STAX    B
  680.     call    HILOQ
  681.     INX    B
  682.     .jmpr    XUMM1
  683. ;
  684. ;
  685. ;[XUTM]
  686. XUTM:    CALL    NUDSET
  687. ;
  688. XUTM1:
  689. .IFNDEF TRS80,[
  690.     CALL    DOTCHK]
  691. ;
  692. .IFDEF TRS80,[
  693. DOTCHK:    PUSH    B
  694.     MOV    A,M
  695.     MVI    C,"."
  696.     ANI    177
  697.     CPI    41
  698.     .JRC    DOTCH1
  699.     CPI    177
  700.     .JRZ    DOTCH1
  701.     MOV    C,A
  702. DOTCH1:    jswa
  703.     POP    B]
  704. ;
  705.     CALL    HILOQ
  706.     .jmpr    XUTM1
  707. ;
  708. ;
  709. ;[XUWL]
  710. XUWL:    LINKC    $$SXL
  711.     XCHG
  712.     LINKC    $$SXX
  713.     XCHG
  714.     MOV    M,C
  715.     INX    H
  716.     MOV    M,B
  717.     jrq;ret
  718. ;
  719. ;
  720. ;[XUVM]
  721. XUVM:    JSER
  722.     call    FROMT3
  723. ;
  724. XUVM1:    LDAX    B
  725.     CMP    M
  726.     .JRZ    XUVM2
  727.     PUSH    B
  728.     LINKC    $$SAT
  729.     LINKC    $$SXC;h&l
  730.     POP    B
  731. XUVM2:    call    HILOQ
  732.     INX    B
  733.     .jmpr    XUVM1
  734. ;
  735. ;
  736. EXTQQ:    .BYTE    (EXTQE - EXTQB) / 4
  737. EXTQB:
  738. .T "C","W","C",$250;    Change Warning Character
  739. .T "D","A"," ",$259;    Date
  740. .T "S","D","A",$260;    Set Date
  741. .T "S","E","M",$199;    Set Echoplex Mode
  742. .T "S","T","I",$257;    Set Time
  743. .T "T","I"," ",$258;    Time
  744. .T "T","R","S",$TRS;    TRS functions
  745. .T "X","U"," ",$271;    Xperimental User function
  746. EXTQE:
  747. ;[$199/SEM]
  748. $199:    .JRZ    $1991
  749.     INR    A
  750. $1991:    STA    TE
  751.     RET
  752. ;
  753. ;
  754. ;[$196/QFC]
  755. .IFDEF QFC196,[
  756. $196:    LHLD    NULCT
  757.     MOV    H,A
  758.     LINKJ    $$RVA]
  759. ;
  760. ;
  761. ;[$204/QRO]
  762. .IFDEF QRO204,[
  763. $204:    LXI    H,RUBOT
  764.     MOV    C,M
  765.     JSWA
  766.     INX    H
  767.     MOV    C,M
  768.     JSWA
  769.     INX    H
  770.     MOV    C,M
  771.     JSWA
  772.     jrq;ret]
  773. ;
  774. ;
  775. ;[$249/ETB]
  776. .IFDEF ETB249,[
  777. $249:    JSAS
  778.     LHLD    PAL
  779.     PUSH    H
  780.     MOV    D,H
  781.     MOV    E,L
  782. $2491:    DCX    D
  783.     LDAX    D
  784.     MOV    C,A
  785.     DCX    D
  786.     LDAX    D
  787.     MOV    B,A
  788.     ANI    K700K
  789.     .JRNZ    $2494
  790. $2492:    DCX    H
  791.     MOV    M,C
  792.     DCX    H
  793.     MOV    M,B
  794.     MOV    A,C
  795.     CPI    N12
  796.     .JRZ    $2493
  797.     CPI    N15
  798.     .JRNZ    $2491
  799. $2493:    DCX    D
  800.     LDAX    D
  801.     MOV    C,A
  802.     DCX    D
  803.     LDAX    D
  804.     MOV    B,A
  805.     ANI    K700K
  806.     .JRNZ    $2494
  807.     MOV    A,C
  808.     CPI    N40
  809.     .JRZ    $2493
  810.     .jmpr    $2492
  811. $2494:    DDCX    H
  812.     SHLD    PAL
  813.     POP    D
  814.     PUSH    H
  815.     LINKC    $$SUB
  816.     DDCX    H
  817.     LINKC    $$SDV
  818.     SHLD    PAN
  819.     XCHG
  820.     POP    H
  821.     MOV    A,B
  822.     ANI    K700K
  823.     ORA    D
  824.     MOV    M,A
  825.     INX    H
  826.     MOV    M,E
  827.     LINKJ    $$RAD]
  828. ;
  829. ;
  830. ;[$250/CWC]
  831. $250:    MTAB    CWSAF
  832. $2501:    LINKC    $$SRA
  833.     .JRC    $2502
  834.     MOV    M,C
  835.     INX    H
  836.     MOV    A,M
  837.     TSTA
  838.     .JRZ    $2501
  839. ;
  840. $2502:    LDA    CWSAF
  841.     STA    SYN+1
  842.     STA    SYN1+1
  843.     LDA    CWSEF
  844.     STA    CPRP+1
  845.     STA    CPRP+3
  846.     LDA    CWCAS
  847.     STA    CPCM+1
  848.     RET
  849. ;
  850. ;
  851. ;[$259/DA]
  852. ;
  853. .IFE CALEN,[
  854. $259:    JSER
  855.     LXI    H,CALDA
  856.     MVI    B,3
  857. ;
  858. $2591:    LINKC    $$SAT
  859.     MOV    A,M
  860.     INX    H
  861.     STA    PAN2
  862.     LINKC    $$SGV
  863.     .DJNZ    $2591
  864.     jrq;ret]
  865. ;
  866. ;
  867. ;[$260/SDA]
  868. ;
  869. .IFE CALEN,[
  870. $260:    LXI    H,CALDA
  871.     MVI    D,3
  872.     ;
  873. $2601:    PUSH    H
  874.     LINKC    $$SGT
  875.     POP    H
  876.     MOV    M,C
  877.     INX    H
  878.     DCR    D
  879.     .JRNZ    $2601
  880.     jrq;ret]
  881. ;
  882. ;
  883. ;[$258/TI]
  884. ;[$257/STI]
  885. ;
  886. ;[COMPTEK]
  887. ;monclk=1
  888. .IFE MONCLK-1,[
  889. $258:    JSER
  890. .IFE Z80,[
  891.     MVI    A,KINP
  892.     STA    ADS32
  893.     MVI    A,KRET
  894.     STA    ADS32+2]
  895. ;
  896. ;
  897.     MVI    C,CLKBAS+10
  898.     LXI    H,CLKTAB-1
  899.     MVI    B,10
  900. ;
  901. CLKGET:    INX    H
  902.     MOV    A,M
  903.     TSTA
  904.     .JRZ    CLKSEP
  905.     ADD    C
  906.     MOV    C,A
  907. .IFG Z80,[
  908.     INP    A]
  909. .IFE Z80,[
  910.     STA    ADS32+1
  911.     CALL    ADS32]
  912.     ANI    N17
  913.     ADI    N60
  914.     PUSH    B
  915.     MOV    C,A
  916.     JSWA
  917.     POP    B
  918. CLKNXT:    .djnz    CLKGET
  919.     jrq;retQ
  920. ;
  921. CLKSEP:    PUSH    H
  922.     LINKC    $$SAT
  923.     POP    H
  924.     .jmpr    CLKNXT
  925. ;
  926. CLKTAB:    .BYTE    -1
  927.     .BYTE    -1
  928.     .BYTE    0
  929.     .BYTE    -1
  930.     .BYTE    -4
  931.     .BYTE    0
  932.     .BYTE    1
  933.     .BYTE    1]
  934. ;
  935. .IFE MONCLK-1,[
  936. $257:    LXI    H,T4
  937.     MVI    M,0
  938.     INX    H
  939.     MVI    M,0
  940.     MVI    B,6
  941. ;
  942. CLKTI:    INX    H
  943.     LINKC    $$SAE
  944.     .JRC    CLKT0
  945.     PUSH    B
  946.     LINKC    $$SRA
  947.     MOV    A,C
  948.     POP    B
  949.     SUI    60
  950. CLKT0:    MOV    M,A
  951.     .djnz    CLKTI
  952. ;
  953. CLKSM2:    LXI    H,T4
  954.     .jmpr    CLKSEC
  955. CLKSM3:    MVI    A,4
  956.     OUT    CLKBAS+1
  957. ;
  958. CLKSL1:    IN    CLKBAS+7
  959.     CMP    M
  960.     .JRNZ    CLKSL1
  961.     INX    H
  962. ;
  963. CLKSL2:    IN    CLKBAS+6
  964.     CMP    M
  965.     .JRNZ    CLKSL2
  966.     INX    H
  967. ;
  968. CLKSL3:    IN    CLKBAS+5
  969.     CMP    M
  970.     .JRNZ    CLKSL3
  971.     INX    H
  972. ;
  973. CLKSL4:    IN    CLKBAS+1
  974.     CMP    M
  975.     .JRNZ    CLKSL4
  976.     INX    H
  977. ;
  978. CLKSEC:    MVI    A,2
  979.     OUT    CLKBAS+1
  980. ;
  981. CLKSL5:    IN    CLKBAS+2
  982.     CMP    M
  983.     .JRNZ    CLKSL5
  984.     INX    H
  985. ;
  986. CLKSL6:    IN    CLKBAS+3
  987.     CMP    M
  988.     .JRNZ    CLKSL6
  989.     INX    H
  990. ;
  991.     JCLA
  992.     OUT    CLKBAS+1
  993.     CMP    B
  994.     RNZ
  995.     INR    B
  996.     .jmpr    CLKSM3]
  997. ;
  998. ;
  999. ;[COMPUTIME]
  1000. ;Port assignments
  1001. ;
  1002. .IFE MONCLK-2,[
  1003. PCAD=    CLKBAS+0
  1004. PCAC=    CLKBAS+1
  1005. PCBD=    CLKBAS+2
  1006. PCBC=    CLKBAS+3
  1007. ;
  1008. PTAD=    CLKBAS+4
  1009. PTAC=    CLKBAS+5
  1010. PTBD=    CLKBAS+6
  1011. PTBC=    CLKBAS+7
  1012. ;
  1013. K3030=    ^H3030]
  1014. ;
  1015. ;[$259/DA]
  1016. ;
  1017. .IFE CALEN-2,[
  1018. $259:    CALL    READ4
  1019. ;
  1020.     LINKC    $$SAT
  1021.     LHLD    CALDA
  1022.     LINKJ    $$RVA]
  1023. ;
  1024. ;
  1025. ;[$260/SDA]
  1026. ;
  1027. ;    %sda,MMDD,year/
  1028. ;
  1029. .IFE CALEN-2,[
  1030. $260:    CALL    CLKRES
  1031. ;
  1032. SDAT:    MVI    A,^H57
  1033.     CALL    SETDIG
  1034. ;
  1035.     MVI    A,^H77
  1036.     CALL    SETDIG
  1037. ;
  1038.     JSAS
  1039.     LINKC    $$SNQ
  1040.     LINKC    $$SGT
  1041.     SHLD    CALDA
  1042. ;
  1043.     RET]
  1044. ;
  1045. ;
  1046. .IFE MONCLK-2,[
  1047. $258:    MVI    A,^H40
  1048.     CALL    READ4
  1049.     LINKC    $$SAT
  1050.     CALL    RSDIG
  1051. RSDIG:    CALL    RDIGIT
  1052.     MOV    C,A
  1053.     JSWA
  1054.     MOV    A,D
  1055.     ADI    ^H10
  1056.     MOV    D,A
  1057.     RET]
  1058. ;
  1059. ;
  1060. .IFE MONCLK-2,[
  1061. $257:    .JRNZ    ZERSEC
  1062.     CALL    CLKRES
  1063. ;
  1064. STIME:    MVI    A,^H76
  1065.     CALL    SETDIG
  1066. ;
  1067.     MVI    A,^H56
  1068.     CALL    SETDIG
  1069. ;
  1070. STIDON:    MVI    A,^H40
  1071.     OUT    PTBD
  1072.     RET
  1073. ;
  1074. ZERSEC:    MVI    A,^H56
  1075.     OUT    PTBD
  1076.     .JMPR    STIDON]
  1077. ;
  1078. ;
  1079. .IFE MONCLK-2,[
  1080. ;[RDIGIT]
  1081. ;
  1082. RDABT:    LINKC    $$SHK
  1083. RDIGIT:    MOV    A,D
  1084.     OUT    PTAD
  1085.     IN    PTAD
  1086. ;
  1087. RDWAIT:    IN    PTAC
  1088.     RAL
  1089.     .JRNC    RDWAIT
  1090.     IN    PTAD
  1091.     ANI    ^H0F
  1092.     ORI    ^H30
  1093.     RET
  1094. ;
  1095. ;
  1096. ;[READ4]
  1097. ;
  1098. READ4:    PUSH    PSW
  1099.     JSER
  1100.     CALL    CLKINT
  1101.     POP    PSW
  1102.     OUT    PTBD
  1103.     MVI    D,0
  1104. READ4A:    CALL    RDIGIT
  1105.     CALL    RSDIG
  1106.     MOV    A,D
  1107.     CPI    ^H20
  1108.     .JRNZ    READ4S
  1109.     LINKC    $$SAT
  1110.     MOV    A,D
  1111. READ4S:    CPI    ^H40
  1112.     RZ
  1113.     .JMPR    READ4A
  1114. ;
  1115. ;
  1116. ;[SETDIG]
  1117. ;
  1118. SETDIG:    OUT    PTBD
  1119.     MOV    E,A
  1120. ;
  1121.     CALL    GETTWO
  1122. ;
  1123. SETTST:    MOV    A,E
  1124. ;
  1125.     ANI    ^H20
  1126.     MVI    D,0
  1127.     .JRNZ    SETCAL
  1128.     MVI    D,^H20
  1129. SETCAL:    IN    PTBD
  1130. SETWAI:    IN    PTBC
  1131.     RAL
  1132.     .JRNC    SETWAI
  1133.     CALL    RDABT
  1134.     CMP    H
  1135.     .JRNZ    SETCAL
  1136.     MVI    A,^H10
  1137.     ADD    D
  1138.     MOV    D,A
  1139.     CALL    RDABT
  1140.     CMP    L
  1141.     .JRNZ    SETTST
  1142.     MVI    A,^H46
  1143.     OUT    PTBD
  1144.     RET
  1145. ;
  1146. ;
  1147. ;[CLKRES]
  1148. ;
  1149. CLKRES:    OUT    PTAC
  1150.     OUT    PTBC
  1151. ;
  1152. CLKINT:    IN    PTAD
  1153.     CPI    ^H0FF
  1154.     JZ    $COM+3*$$RNA
  1155.     MVI    A,^H70
  1156.     OUT    PTAD
  1157.     MVI    A,^H77
  1158.     OUT    PTBD
  1159.     MVI    A,^H14
  1160.     OUT    PTAC
  1161.     MVI    A,^H04
  1162.     OUT    PTBC
  1163. ;
  1164.     RET
  1165. ;
  1166. ;
  1167. GETTWO:    JSAE
  1168.     RC
  1169.     LINKC    $$SRA
  1170.     JSAE
  1171.     RC
  1172.     MOV    H,C
  1173.     LINKC    $$SRA
  1174.     JSAE
  1175.     RC
  1176.     MOV    L,C
  1177.     RET]
  1178. ;
  1179. ;
  1180. .SBTTL /Check Summed Adressed Loader/
  1181. ;
  1182. ;    Modes: (stored in "SWLOC")
  1183. ;  1    On - from remote source
  1184. ;  1    Off - Local source
  1185. ;
  1186. ;    Format:
  1187. ; SOH    start of header (hex 1)
  1188. ; del    control byte
  1189. ; byt    number of data bytes
  1190. ; lad    low address load point
  1191. ; had    high address
  1192. ; ...    data
  1193. ; ...    data
  1194. ; lcs    low byte check sum
  1195. ; hcs    high byte check sum
  1196. ;
  1197. ;
  1198. ; 170    end of file header
  1199. ; lad    low address jump to
  1200. ; had    high address jump to
  1201. ;
  1202. ;
  1203. ;[XURCV]
  1204. ;
  1205. XURCV:    CALL    GETARG
  1206.     MVI    C,CCCR
  1207.     LINKC    $$spo;let us go
  1208.     CALL    XMODE1
  1209.     .JRZ    SNDACK
  1210. RCVENT:    LINKC    $$sri;input
  1211.     .JRC    RCVENT
  1212.     CPI    CCENQ
  1213.     .JRNZ    RCVENT
  1214. SNDACK:    MVI    C,CCACK
  1215.     LINKC    $$spo;output
  1216. ;
  1217.     .JMPR    GETLDR
  1218. ;
  1219. GETFIN:    CALL    GETAD
  1220.     MOV    A,L
  1221.     ORA    H
  1222.     RZ
  1223.     PCHL;    all done
  1224. ;
  1225. GETTRS:    CPI    ^H3C
  1226.     .JRZ    LDR377
  1227. ;
  1228. GETLDR:    CALL    GETBY
  1229. GETLDX:    CPI    170
  1230.     .JRZ    GETFIN
  1231.     CPI    CCETB
  1232.     RZ
  1233.     MOV    C,A
  1234.     CALL    XMODE2
  1235.     MOV    A,C
  1236.     .JRNZ    GETTRS
  1237.     CPI    CCSOH
  1238.     .JRNZ    GETLDR
  1239.     CALL    GETBY
  1240.     CPI    377
  1241.     .JRNZ    GETLDX
  1242. ;
  1243. LDR377:    CALL    GETBY
  1244.     PUSH    PSW
  1245.     LXI    D,0
  1246.     CALL    GETAD
  1247.     PUSH    H
  1248.     POP    B
  1249.     LHLD    USER1
  1250.     DAD    B
  1251. ;
  1252. RCVHL:    LDA    USER3
  1253.     ANI    4
  1254.     .JRZ    RCVHL1
  1255. ;
  1256.     LINKC    $$spr
  1257.     LINKC    $$sxc;h&l
  1258.     LINKC    $$spr
  1259. RCVHL1:    POP    PSW
  1260.     MOV    B,A
  1261. ;
  1262. LOAD:    CALL    GETBY
  1263. ;
  1264. RCVOK:    CALL    PUTCHR
  1265.     INX    H
  1266. ;
  1267.     .DJNZ    LOAD
  1268. ;
  1269.     CALL    XMODE2
  1270.     .JRNZ    TRSPAR
  1271.     PUSH    D
  1272.     CALL    GETBY
  1273.     POP    D
  1274.     CMP    D
  1275.     .JRNZ    PARTS1
  1276. TRSPAR:    PUSH    D
  1277.     CALL    GETBY
  1278.     POP    D
  1279.     CMP    E
  1280. PARTS1:    CALL    NOTIFY
  1281.     .JMPR    GETLDR
  1282. ;
  1283. ;
  1284. ;[PUTCHR]
  1285. ;
  1286. PUTCHR:    MOV    M,A
  1287.     CMP    M
  1288.     .JRNZ    MEMERR
  1289. RCVDI:    LDA    USER3
  1290.     ANI    4
  1291.     RZ
  1292. ;
  1293. DOTCHK:    PUSH    B
  1294.     MOV    A,M
  1295.     MVI    C,"."
  1296.     ANI    177
  1297.     CPI    41
  1298.     .JRC    DOTCH1
  1299.     CPI    177
  1300.     .JRZ    DOTCH1
  1301.     MOV    C,A
  1302. DOTCH1:    jswa
  1303.     POP    B
  1304.     RET
  1305. ;
  1306. ;
  1307. ;[GETAD]
  1308. ;
  1309. GETAD:    CALL    GETBY
  1310.     MOV    L,A
  1311.     CALL    GETBY
  1312.     MOV    H,A
  1313.     RET
  1314. ;
  1315. ;
  1316. ;[GETBY]
  1317. ;
  1318. GETBY:    LINKC    $$sri;input
  1319.     .JRC    GETNAK
  1320.     PUSH    PSW
  1321.     ADD    E
  1322.     MOV    E,A
  1323.     .JRNC    GETBYR
  1324.     INR    D
  1325. GETBYR:    POP    PSW
  1326.     RET
  1327. ;
  1328. ;
  1329. GETNAK:    CALL    XMODE1
  1330.     .JRZ    TIMERR
  1331. ;
  1332.     MVI    C,CCNAK
  1333.     LINKC    $$spo;output
  1334.     JMP    GETLDR
  1335. ;
  1336. ;
  1337. ;[NOTIFY]
  1338. ;
  1339. NOTIFY:    .JRNZ    NOTNAK
  1340.     CALL    XMODE1
  1341.     RZ
  1342.     MVI    C,CCACK
  1343.     .JMPR    NOTOUT
  1344. ;
  1345. NOTNAK:    CALL    XMODE1
  1346.     .JRZ    PARERR
  1347. NOTINP:    MVI    C,CCNAK
  1348. NOTOUT:    LINKC    $$sri;input
  1349.     ANI    177
  1350.     CPI    CCENQ
  1351.     .JRNZ    NOTOUT
  1352.     LINKC    $$spo;output
  1353.     RET
  1354. ;
  1355. ;
  1356. ;[ERRORS]
  1357. ;
  1358. MEMERR:    MVI    C,"M"
  1359.     SKIP2    D
  1360. PARERR:    MVI    C,"P"
  1361.     SKIP2    D
  1362. TIMERR:    MVI    C,"T"
  1363. ;
  1364. EREXIT:    jswa
  1365.     LINKJ    $$RNA
  1366. ;
  1367. ;
  1368. ;[GETARG]
  1369. ;
  1370. ; USER4 is start address
  1371. ; USER3 is mode
  1372. ; USER3+1 is channel control
  1373. ; USER1 is from or offset
  1374. ; USER2 is to or reloc
  1375. ; B & C is desired count
  1376. ; H & L memory location
  1377. ;
  1378. GETARG:    CALL    NUDSET
  1379.     MOV    A,L
  1380.     ANI    7
  1381.     STA    USER3
  1382.     XCHG
  1383.     SHLD    USER4
  1384.     CALL    FROMT2
  1385.     SHLD    USER1
  1386.     XCHG
  1387.     SHLD    USER2
  1388. ;
  1389.     MDSBCD
  1390.     MOV    B,H
  1391.     MOV    C,L
  1392.     XCHG
  1393. ;lxi d,0
  1394.     INX    B
  1395.     RET
  1396. ;
  1397. ;
  1398. XMODE1:    LDA    USER3
  1399.     ANI    1
  1400.     RET
  1401. ;
  1402. ;
  1403. XMODE2:    LDA    USER3
  1404.     ANI    2
  1405.     RET
  1406. ;
  1407. ;
  1408. ;[XUXMT]
  1409. ;
  1410. .IFG Z80,[
  1411. XUXMT:    CALL    GETARG
  1412.     EXX
  1413. ;
  1414. XMTENT:    CALL    XMODE1
  1415.     .JRZ    XMT377
  1416.     MVI    C,CCENQ
  1417.     LINKC    $$spo;output
  1418. XMTST2:    LINKC    $$sri;input
  1419.     .JRC    XMTENT
  1420.     CPI    CCACK
  1421.     .JRNZ    XMTST2
  1422. ;
  1423. ;
  1424. XMT377:    MVI    C,CCCR
  1425.     LINKC    $$spo;output
  1426.     EXX
  1427. ;
  1428. XMTSOH:    PUSH    B
  1429.     CALL    LEADER
  1430.     MVI    C,^H3C
  1431.     CALL    XMODE2
  1432.     .JRNZ    XMTTRS
  1433.     MVI    C,CCSOH
  1434.     LINKC    $$spo;output
  1435.     MVI    C,377
  1436. XMTTRS:    LINKC    $$spo;output
  1437.     POP    B
  1438.     XRA    A
  1439.     MOV    E,A
  1440.     MOV    D,A
  1441.     CMP    B
  1442.     .JRNZ    XMTNXT
  1443.     CMP    C
  1444.     .JRZ    XMTDON
  1445.     MOV    A,C
  1446. XMTNXT:    PUSH    B
  1447.     MOV    C,A
  1448.     LINKC    $$spo;output
  1449.     MOV    B,C    ; bytes this block
  1450.     MOV    C,L
  1451.     LINKC    $$spo;output
  1452.     MOV    C,H
  1453.     LINKC    $$spo;output
  1454.     PUSH    H    ; save for rexmt
  1455.     EXX
  1456.     POP    H
  1457.     POP    B
  1458.     PUSH    B
  1459.     EXX
  1460.     MOV    A,H
  1461.     ADC    L
  1462.     MOV    E,A
  1463.     .JRNC    XMTLP1
  1464.     INR    D
  1465. ;
  1466. XMTLP1:    MOV    C,M
  1467.     LINKC    $$spo;output
  1468.     INX    H
  1469.     MOV    A,E
  1470.     ADC    C
  1471.     MOV    E,A
  1472.     .JRNC    XMTLP2
  1473.     INR    D
  1474. XMTLP2:    .DJNZ    XMTLP1
  1475. ;
  1476.     MOV    C,E
  1477.     LINKC    $$spo;output
  1478.     CALL    XMODE2
  1479.     .JRNZ    XMTPAR
  1480.     MOV    C,D
  1481.     LINKC    $$spo;output
  1482. ;
  1483. XMTPAR:    CALL    XMODE1
  1484.     .JRNZ    XMTCK
  1485. ;
  1486. XMTOK:    POP    B
  1487.     ADD    B
  1488. XMTOK1:    .JRZ    XMTDON
  1489.     DCR    B
  1490. XMTOK2:    .JMPR    XMTSOH
  1491. ;
  1492. ;
  1493. XMTCK:    MVI    C,CCENQ
  1494.     LINKC    $$spo;output
  1495.     MVI    B,20
  1496. XMTCK1:    LINKC    $$sri;input
  1497.     CPI    CCACK
  1498.     .JRZ    XMTOK
  1499.     CPI    CCNAK
  1500.     .JRZ    XMTNOK
  1501.     .DJNZ    XMTCK1
  1502.     JMP    TIMERR
  1503. ;
  1504. XMTNOK:    POP    B
  1505.     EXX
  1506.     PUSH    B
  1507.     PUSH    H
  1508.     EXX
  1509.     POP    H
  1510.     POP    B
  1511.     .JMPR    XMTOK2
  1512. ;
  1513. ;
  1514. XMTDON:    MVI    C,170
  1515.     LINKC    $$spo;output
  1516.     LHLD    USER4
  1517.     MOV    C,L
  1518.     LINKC    $$spo;output
  1519.     MOV    C,H
  1520.     LINKC    $$spo;output
  1521.     MVI    C,CCETB
  1522.     LINKC    $$spo;output
  1523.     CALL    LEADER
  1524. ;
  1525.     RET
  1526. ;
  1527. ;
  1528. ;[LEADER]
  1529. ;
  1530. LEADER:    MVI    A,200
  1531. ;
  1532. LEADX:    PUSH    B
  1533.     MOV    C,A
  1534.     MVI    B,20
  1535. ;
  1536. LEAD1:    LINKC    $$spo;output
  1537.     .DJNZ    LEAD1
  1538.     POP    B
  1539.     RET]
  1540. ;
  1541. ;
  1542.     .END
  1543. ;
  1544.